版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/y472360651/article/details/81745299
如果你之前有使用Docker的经验,你可能已经习惯了使用--link
参数来实现容器互联。随着Docker网络的完善,强烈建议将Docker加入自定义的Docker网络来连接多个容器,而不是使用--link
参数
新建网络
下面创建一个新的Docker网络
root@ubuntu:~# docker networker create -d bridge my-net
-d
参数指定Docker网络类型,有bridge
、overlay
类型,overlay
类型适用于Swarm mode,这里我们使用bridge
连接容器
运行一个容器并连接到新建的my-net网络当中:
root@ubuntu:~# docker run -it --rm --name box1 --network my-net busybox sh
在运行一个容器并连接到新建的my-net网络当中:
root@ubuntu:~# docker run -it --rm --name box2 --network my-net busybox sh
下面通过ping
命令证明两个容器建立了互联关系,在box1
容器中输入以下命令:
/ # ping box2
PING box2 (172.17.0.3): 56 data bytes
64 bytes from 172.17.0.3: seq=0 ttl=64 time=0.714 ms
64 bytes from 172.17.0.3: seq=1 ttl=64 time=0.125 ms
...
同理,在box2容器中ping box1
也会成功连接到:
/ # ping box1
PING box1 (172.17.0.2): 56 data bytes
64 bytes from 172.17.0.2: seq=0 ttl=64 time=0.084 ms
64 bytes from 172.17.0.2: seq=1 ttl=64 time=0.123 ms
...
使用DNS
如何自定义容器的主机名和DNS呢?配置全部容器的DNS,可以在/etc/docker/daemon.json
文件中增加如下内容来设置:
{
"dns": [
"114.114.114.114",
"8.8.8.8"
]
}
这样每次启动的容器DNS都会自动配置为114.114.114.114
和8.8.8.8
。使用以下命令来证明其已经生效:
root@ubuntu:~# docker run -it --rm ubuntu:16.04 cat /etc/resolv.conf
nameserver 114.114.114.114
nameserver 8.8.8.8
如果用户想要手动指定容器的配置,可以在使用docker run
命令的时候添加如下参数:-h HOSTNAME
或者--hostname=HOSTNAME
设定容器的主机名,它会被写到容器内的/etc/hostname
和/etc/hosts
。但它不会在容器外部显示,并且不会在docker ps
中显示,也不会在容器的/etc/hosts
看到。--dns=IP_ADDRESS
添加DNS服务器到容器的/etc/resolv.conf
中,让容器用这个服务器解析所有不在/etc/hosts
中的主机名。