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
容器资源限制
容器数据卷