Docker技术入门与实战 第二版-学习笔记-8-网络功能network-2-相应配置

1) 快速配置指南(详细使用下面会讲)

其中有些命令选项只有在 Docker 服务启动的时候才能配置,而且不能马上生效

下面2个命令选项既可以在启动服务时指定,也可以 Docker 容器启动(docker run )时候指定。在 Docker 服务启动的时候指定则会成为默认值,后面执行docker run时可以覆盖设置的默认值。

 

最后这些选项只有在 docker run执行时使用,因为它是针对容器的特性内容:

2) 配置 DNS

怎么自定义配置容器的主机名和 DNS 配置呢? 秘诀就是它利用虚拟文件来挂载到来容器的 3 个相关配置文件:

  • /etc/resolv.conf : 记录了容器的配置信息
  • /etc/hostname : 记录了容器的主机名
  • /etc/hosts : 默认只记录了容器自身的一些地址和名称
这种机制可以让宿主主机 DNS 信息发生更新后,所有 Docker 容器的 dns 配置通过 /etc/resolv.conf文件立刻得到更新。

如果用户想要手动指定容器的配置,可以利用下面的选项:

  • -h HOSTNAME 或 --hostname = HOSTNAME :设定容器的主机名,它会被写到容器内的/etc/hostname 和 /etc/hosts中。但它在容器外部看不到,既不会在docker ps中显示,也不会在其他的容器的 /etc/hosts看到
  • --links = CONTAINER_NAME:ALIAS 选项会在创建容器的时候,添加一个其他容器的主机名到/etc/hosts文件中,让新的容器的进程可以使用主机名ALIAS就可以连接它
  •  --dns = IP_ADDRESS : 添加DNS服务到容器的/etc/resolv.conf中,让容器用这个服务器来解析所有不在/etc/hosts上的主机名
  •  --dns-search = DOMAIN : 设定容器的搜索域,当设定搜索域为.example.com时,在搜索一个名为host的主机时,DNS不仅搜索host,还会搜索host.example.com。注意,如果没有上述最后的两个选项,Docker会默认主机上的/etc/resolv.conf来配置容器

 

在容器中使用 mount 命令可以看到挂载信息,在之前连接的是host网络的ubuntu6容器上运行:

userdeMBP:~ user$ docker exec -it ubuntu6 /bin/bash
root@linuxkit-025000000001:/# mount
...
/dev/sda1 on /etc/resolv.conf type ext4 (rw,relatime,data=ordered)
/dev/sda1 on /etc/hostname type ext4 (rw,relatime,data=ordered)
/dev/sda1 on /etc/hosts type ext4 (rw,relatime,data=ordered)
...

1.查看其/etc/resolv.conf内容:

root@linuxkit-025000000001:/# cat /etc/resolv.conf 
# This file is included on the metadata iso
nameserver 192.168.65.1  // 相当于运行docker run时使用--dns=192.168.65.1
domain lan  //表示局域网,相当于运行docker run时使用--dns-search=lan

⚠️如果是直接手动对/etc/resolv.conf进行更改,那么再次重启时,里面更改的内容就会恢复原状,希望不回复的方法就是在run时使用-dns--dns-search参数来设置

此时任意打开一个连接的是自定义的bridge——myNetwork2的ubuntu7容器,查看它的/etc/resolv.conf配置文件,可以看见,和上面的内容是相同的

这是因为创建容器时,默认会与宿主机的/etc/resolv.conf内容保持一致

2.查看其/etc/hosts内容:

root@linuxkit-025000000001:/# cat /etc/hosts       
127.0.0.1       localhost
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters 

当我们使用--link=container:alias参数连接了其他容器的话,该文件中就会出现连接容器的ip地址,如下面是容器ubuntu7没有连接其他容器前文件的内容:

root@8eef1c93a7d4:/# vi /etc/hosts

127.0.0.1       localhost
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.20.11.2     8eef1c93a7d4

⚠️设置了alias的好处是:重启容器IP变化时,别名alias正常使用

然后后面打开另一个容器ubuntu8,让其通过--link连接了容器db,然后就能够在/etc/hosts中看见db的信息:

userdeMBP:~ user$ docker run -it --name ubuntu8 --link db:db ubuntu:14.04 /bin/bash
root@1f6456e5fbfd:/# cat /etc/hosts
127.0.0.1    localhost
::1    localhost ip6-localhost ip6-loopback
fe00::0    ip6-localnet
ff00::0    ip6-mcastprefix
ff02::1    ip6-allnodes
ff02::2    ip6-allrouters
172.17.0.4    db 2fca948912dc
172.17.0.5    1f6456e5fbfd

就能够使用容器db的名字ping通它了:

root@1f6456e5fbfd:/# ping -c 3 db
PING db (172.17.0.4) 56(84) bytes of data.
64 bytes from db (172.17.0.4): icmp_seq=1 ttl=64 time=0.081 ms
64 bytes from db (172.17.0.4): icmp_seq=2 ttl=64 time=0.092 ms
64 bytes from db (172.17.0.4): icmp_seq=3 ttl=64 time=0.109 ms

--- db ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2111ms
rtt min/avg/max/mdev = 0.081/0.094/0.109/0.011 ms

3.查看其/etc/hostname内容:

root@linuxkit-025000000001:/# cat /etc/hostname
linuxkit-025000000001

可以在run容器时自己设定自己的主机名,使用--hostname参数:

userdeMacBook-Pro:~ user$ docker run -it --hostname=myUbuntu9 --name ubuntu9 ubuntu:14.04 /bin/bash
root@myUbuntu9:/# cat /etc/hostname
myUbuntu9

上面的例子就将主机名设置为了myUbuntu9

4.使用--net参数(其实就是之前使用的--network参数)设置使用的网络是bridge、nonedeng,或者是指明与某个容器使用相同的网络,这里着重讲其如何使用container模式(其他网络模式请看上一章):
重新生成一个ubuntu10容器,使用--net=container:ubuntu8连接之前link db容器的ubuntu8容器:

从上图可见,基本上就相当于打开了别名为ubuntu10的ubuntu8容器,两者的IP地址是完全一样的,连主机名都是一样的。当然,ubuntu10容器也是开启了的:

userdeMBP:~ user$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
3b854b76e02e        ubuntu:14.04        "/bin/bash"              2 minutes ago       Up 2 minutes                                 ubuntu10
f07c50c1c6ee        ubuntu:14.04        "/bin/bash"              27 minutes ago      Up 27 minutes                                ubuntu8
原文地址:https://www.cnblogs.com/wanghui-garcia/p/10145429.html