容器互联
docker有一个连接系统,允许将多个容器连接在一起,共享连接信息。docker连接会创建一个父子关系,其中父容器可以看到子容器的信息。
容器命名
可以用–name指定名字,取代默认给出的复杂名字。
docker run -d -P --name coco training/webapp python app.py
新建网络
-d是指定网络类型。其中overlay是适用于swarm mode(集群模式的)。
pxy@pxy-pc:~/Desktop$ docker network create -d bridge test-net
ac31b2646640edb5e3740c23d4b4afd5d94f4f6d407ad7b47aca0ea2c7132d35
pxy@pxy-pc:~/Desktop$ docker network ls
NETWORK ID NAME DRIVER SCOPE
f3ede047ab77 bridge bridge local
073b9913697b host host local
7b3fd5378001 none null local
ac31b2646640 test-net bridge local
创建两个容器
在pxy7896/ubuntu:1214里装ping
docker run -it pxy7896/ubuntu:1214
apt-get update
apt install iputils-ping
exit
docker commit -m="install ping" -a="pxy" 58596d336b75 pxt/ubuntu:1214
打错了。。本来想放在pxy/ubuntu:1214里,现在。。。
pxy@pxy-pc:~/Desktop$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
pxt/ubuntu 1214 e2878e512eef 5 seconds ago 168MB
runoob/centos 6.9 50439c5cc069 4 hours ago 195MB
...
然后运行两个容器,并加入test-net网络
docker run -itd --name test0 --network test-net pxt/ubuntu:1214 /bin/bash
docker run -itd --name test3 --network test-net pxt/ubuntu:1214 /bin/bash
测试网络连通性
前台进入test0,看看能不能ping通test3:
pxy@pxy-pc:~/Desktop$ docker exec -it test0 /bin/bash
root@a76b22c14fba:/# ping test3
PING test3 (172.18.0.3) 56(84) bytes of data.
64 bytes from test3.test-net (172.18.0.3): icmp_seq=1 ttl=64 time=0.053 ms
64 bytes from test3.test-net (172.18.0.3): icmp_seq=2 ttl=64 time=0.102 ms
64 bytes from test3.test-net (172.18.0.3): icmp_seq=3 ttl=64 time=0.104 ms
64 bytes from test3.test-net (172.18.0.3): icmp_seq=4 ttl=64 time=0.105 ms
^C
--- test3 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3048ms
rtt min/avg/max/mdev = 0.053/0.091/0.105/0.021 ms
同理test3也可以ping通test0。这里用exec是因为exit后不会影响容器运行。
如果需要多个容器之间互相连接,需要使用Docker Compose。
配置DNS
手动配置指定容器
docker run -it --rm -h host_ubuntu --dns=114.114.114.114 --dns-search=test.com ubuntu
–rm 容器退出时自动清理容器内部的文件系统
-h或–hostname=HOSTNAME 设定容器的主机名,它会被写入容器内的/etc/hostname和/etc/hosts
–dns=IP地址 在容器的/etc/resolv.conf中添加DNS服务器,让容器用这个服务器解析所有不在/etc/hosts中的主机名
–dns-search=Domain 设定容器的搜索域。当设定为.example.com时,在搜素一个名为host的主机时,DNS不仅搜索host,还搜索host.example.com
如果在容器启动时没有指定–dns和–dns-search,那么Docker会默认使用宿主主机上的/etc/resolv.conf来配置容器的DNS。