位于同一个宿主机上的容器,可以互为连接而不需要暴露端口,只需使用docker内置的link参数即可。这里对link网络做一个演示,所有操作均在宿主机172.16.71.33上执行:
我们事先构建了一个包含了mysql服务器和客户端的镜像 mysql:latest(镜像已修改mysql的用户权限root@% 无密码) ,后续的测试将在这个镜像的基础上进行
首先启动一个实例db,并使其后台执行mysqld
#docker run -itd --name db mysql /usr/libexec/mysqld ffc7f3b2bf1eec0186bfee77ae1c51b8fddd7838e5bfd561df4cc70b03aa227f |
接下来同样从mysql镜像构建一个实例main,作为客户端来连接先前启动的服务端
#docker run -it --name main --link db:db mysql 0;@9db56e05a707:/[root@9db56e05a707 /]#mysql -h db Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 Server version: 5.1.73 Source distribution Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> |
之所以能解析动态地址是因为docker在main实例的hosts中增加了解析项
0;@9db56e05a707:/[root@9db56e05a707 /]#cat /etc/hosts 172.17.0.14 9db56e05a707 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.12 db ffc7f3b2bf1e |
对于跨宿主机的实例间link通讯,可以借助ambassador来实现。使用link来处理通讯的好处是不需要维护hosts或者ddns,docker会帮助完成实例间的名称解析。跨主机间的link通讯稍显繁琐,也可以借助waves或者flannel来完成跨宿主机实例间的通讯。
请注意,本站的所有文章均要求阁下在转载时注明出处和原作者,阁下转载本站文章即表示阁下同意并遵守此规程,除非特别注明转载出处,否则文章即为其发布者所著。本站及文章作者保留文章的著作权并有权在阁下违反上述规程时予以追究。
本文链接地址: 初识DOCKER(13)–链接容器间网络