apt-get -y install docker.io

运行报错E: Sub-process /usr/bin/dpkg returned an error code (1)

非常不乐意用了以下办法

sudo mv /var/lib/dpkg/info /var/lib/dpkg/info.bak            //现将info文件夹更名
 sudo mkdir /var/lib/dpkg/info                                          //再新建一个新的info文件夹
 sudo apt-get update
 apt-get -f install docker.io
 sudo mv /var/lib/dpkg/info.bak/* /var/lib/dpkg/info         //把以前的info文件夹重新改回名字
 rm -rf /var/lib/dpkg/info.bak/

这个还是慎用,至少前两天装的ssh又需要重装,感觉有可能软件什么的都有问题了


docker verison 发现

FATA[0000] Get http:///var/run/docker.sock/v1.18/version: dial unix /var/run/docker.sock: no such file or directory. Are you trying to connect to a TLS-enabled daemon without TLS? 
或者docker -d & 后面搞就docker -d这个不知道这一步应该没作用就crtl +c 了
docker service status 可以看见是docker stop/waiting 
docker servise start 就好了
docker@docker:~$ docker version
 Client version: 1.6.2
 Client API version: 1.18
 Go version (client): go1.2.1
 Git commit (client): 7c8fca2
 OS/Arch (client): linux/amd64
 Server version: 1.6.2
 Server API version: 1.18
 Go version (server): go1.2.1
 Git commit (server): 7c8fca2
 OS/Arch (server): linux/amd64

最终样子,也不需要搞什么软连接

docker pull ubuntu

现在可以看到在Bash Shell下建立Ubuntu容器是非常简单的,只需运行一行命令即可。
-i选项:让输入输出都在标准控制台进行
-t选项:分配一个tty

docker run -i -t ubuntu /bin/bash

删除所有none的镜像

docker rmi $(docker images -f "dangling=true" -q)

删除所有容器

docker rm $(docker ps -aq)

删除Docker中所有已停止的容器

方法一:

#显示所有的容器,过滤出Exited状态的容器,取出这些容器的ID,

sudo docker ps -a|grep Exited|awk '{print $1}'

#查询所有的容器,过滤出Exited状态的容器,列出容器ID,删除这些容器

sudo docker rm `docker ps -a|grep Exited|awk '{print $1}'`

方法二: 

#删除所有未运行的容器(已经运行的删除不了,未运行的就一起被删除了)

sudo docker rm $(sudo docker ps -a -q)

方法三:

#根据容器的状态,删除Exited状态的容器

sudo docker rm $(sudo docker ps -qf status=exited)

方法四:

#Docker 1.13版本以后,可以使用 docker containers prune 命令,删除孤立的容器。

sudo docker container prune

停止所有容器

docker stop $(docker ps -a -q)

二、使用iptables动态绑定端口

1、查看容器ip

docker inspect <container-name | id> | grep IPAddress

这一步后会输出容器的ip地址,端口绑定时会使用。

2、端口绑定

sudo iptables -t nat -A PREROUTING  -p tcp -m tcp --dport hostport -j DNAT --to-destination  containerip:port

举个例子,使用命令

sudo iptables -t nat -A PREROUTING  -p tcp -m tcp --dport 9030 -j DNAT --to-destination  172.22.0.2:9090

将容器的9090端口和宿主机的9030端口绑定了起来,其中172.22.0.2是容器的ip地址。

3、保存规则

sudo iptables-save

4、查看动态绑定的端口

 docker port <container-name | id> 不能查看使用iptables绑定的端口,要使用命令 iptables -t nat -nvL | grep container-ip 来查看。

数据卷

docker run -t -i -v /root/api:/root/api --name api ubuntu:14.04 /bin/bash
docker run -d -v /root/api:/root/api --name dbdata ubuntu:14.04
docker run -d -v /mnt/hgfs/workspace/docker:/root/chronos --name dbdata ubuntu:14.04
docker run -t -i --volumes-from dbdata --name chronos ubuntu /bin/bash
docker run -t -i --volumes-from dbdata --name chronos ubuntu:14.04 /bin/sh /root/chronos/run_test_fgs_docker.sh
docker run -t -i -p 8787:8787 --expose=8787 --env-file=env --volumes-from dbdata --name chronos ubuntu:14.04 /bin/sh /root/chronos/test_fgs_docker

iptables -t nat -A PREROUTING  -p tcp -m tcp --dport 9030 -j DNAT --to-destination  172.22.0.2:9090(容器)

docker run -d -m 10m -p 8787:8787 --expose=8787 --oom-kill-disable=true --net=host --env-file=env --volumes-from dbdata --name chronos ubuntu:14.04 sh -c 'cd /root/chr
 onos/ && /root/chronos/test_fgs_docker'

docker设置固定ip地址

Docker安装后,默认会创建下面三种网络类型

$ docker network ls
NETWORK ID     NAME        DRIVER       SCOPE
9781b1f585ae    bridge       bridge       local
1252da701e55    host        host        local
237ea3d5cfbf    none        null        local

启动 Docker的时候,用 --network 参数,可以指定网络类型

docker run -itd --name test1 --network bridge --ip 172.17.0.10 centos:latest /bin/bash

bridge:桥接网络

默认情况下启动的Docker容器,都是使用 bridge,Docker安装时创建的桥接网络,每次Docker容器重启时,会按照顺序获取对应的IP地址,这个就导致重启下,Docker的IP地址就变了

none:无指定网络

使用 --network=none ,docker 容器就不会分配局域网的IP

host: 主机网络

使用 --network=host,此时,Docker 容器的网络会附属在主机上,两者是互通的。
例如,在容器中运行一个Web服务,监听8080端口,则主机的8080端口就会自动映射到容器中。

创建自定义网络:(设置固定IP)

启动Docker容器的时候,使用默认的网络是不支持指派固定IP的,如下
docker run -itd --net bridge --ip 172.17.0.10 centos:latest /bin/bash
6eb1f228cf308d1c60db30093c126acbfd0cb21d76cb448c678bab0f1a7c0df6
docker: Error response from daemon: User specified IP address is supported on user defined networks only.

步骤1: 创建自定义网络

docker network create --subnet=172.18.0.0/16 mynetwork
➜ ~ docker network ls
NETWORK ID     NAME        DRIVER       SCOPE
9781b1f585ae    bridge       bridge       local
1252da701e55    host        host        local
4f11ae9c85de    mynetwork      bridge       local
237ea3d5cfbf    none        null        local

步骤2: 创建Docker容器

docker run -itd --name networkTest1 --net mynetwork --ip 172.18.0.2 centos:latest /bin/bash

容器资源限制



容器数据卷