10-docker 容器link机制

1.docker的link机制

同一个宿主机上的多个docker容器之间如果想进行通信,可以通过使用容器的ip地址来通信,也可以通过宿主机的ip加上容器暴露出的端口号来通信,前者会导致ip地址的硬编码,不方便迁移,并且容器重启后ip地址会改变,除非使用固定的ip,后者的通信方式比较单一,只能依靠监听在暴露出的端口的进程来进行有限的通信。通过docker的link机制可以通过一个name来和另一个容器通信,link机制方便了容器去发现其它的容器并且可以安全的传递一些连接信息给其它的容器

2.查看容器的IP地址

[root@docker03 ~]# docker inspect nginx-web | tail -20
            "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "a66de95d526fefecd29a7c6759ef60c80f2bb25927e335c0923df6d67d1a8356",
                    "EndpointID": "8ba835e1e3d9d8628c3891bef9216270166cd7173e00764b35b74e0f4b9edbbc",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.2",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:02",
                    "DriverOpts": null
                }
            }
        }
    }
]
[root@docker03 ~]# docker inspect nginx-web02 | tail -20
            "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "a66de95d526fefecd29a7c6759ef60c80f2bb25927e335c0923df6d67d1a8356",
                    "EndpointID": "ab3617c83f2a8bdc2f45330e5f040b55581cc50e392fdcf084b96c4f6b5a29f3",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.3",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:03",
                    "DriverOpts": null
                }
            }
        }
    }
]

 3.在创建nginx-web02时,link容器nginx-web

# 查看容器id
[root@docker03 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                NAMES
7d89f9196f78        sunmmi/nginx        "nginx"             17 minutes ago      Up 17 minutes       0.0.0.0:80->80/tcp   nginx-web

# run容器nginx-web02时,link容器nginx-web,其中nginx-web:nginx01前面是链接哪个容器名,后面是对这个容器别名
[root@docker03 ~]# docker run -itd --name nginx-web02 --link nginx-web:nginx01 -p 81:81 sunmmi/nginx nginx
37e693a5f7a317a3e225ebf93a2caf316525fe674c93a6046f48c700f59796f6

# 查看容器并进入nginx-web02容器
[root@docker03 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                NAMES
37e693a5f7a3        sunmmi/nginx        "nginx"             25 seconds ago      Up 23 seconds       0.0.0.0:81->81/tcp   nginx-web02
7d89f9196f78        sunmmi/nginx        "nginx"             19 minutes ago      Up 19 minutes       0.0.0.0:80->80/tcp   nginx-web
[root@docker03 ~]# docker exec -it 37e693a5f7a3 bash

# 进入nginx-web02容器,查看hosts文件,nginx-web,nginx01已经增加到hosts文件中
[root@37e693a5f7a3 /]# 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.2	nginx01 7d89f9196f78 nginx-web
172.17.0.3	37e693a5f7a3

# 测试
[root@37e693a5f7a3 /]# ping nginx01
PING nginx01 (172.17.0.2) 56(84) bytes of data.
64 bytes from nginx01 (172.17.0.2): icmp_seq=1 ttl=64 time=0.071 ms
64 bytes from nginx01 (172.17.0.2): icmp_seq=2 ttl=64 time=0.170 ms
^C
--- nginx01 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 0.071/0.120/0.170/0.050 ms

 

posted @ 2018-03-20 16:58  sunmmi  阅读(1417)  评论(0)    收藏  举报