我们在使用Docker的时候,经常可能需要连接到其他的容器,比如:web服务需要连接数据库。按照往常的做法,需要先启动数据库的容器,映射出端口来,然后配置好客户端的容器,再去访问。其实针对这种场景,Docker提供了--link 参数来满足。

这里使用数据库服务器和客户端的例子来介绍下--link的用法。
一 创建容器
这里需要创建MySQL服务端和客户端的容器
MySQL 服务端的Dockerfile:
FROM centos:centos6 MAINTAINER David "xx@xx.com" RUN yum install -y mysql-server mysql RUN /etc/init.d/mysqld start RUN mysql -e "grant all privileges on *.* to 'root'@'%' identified by '1234';" RUN mysql -e "grant all privileges on *.* to 'root'@'localhost' identified by '1234';" EXPOSE 3306 CMD ["/usr/bin/mysqld"]
MySQL客户端的Dockerfile:
FROM centos:centos6 MAINTAINER David "xx@xx.com" RUN yum install -y mysql
根据Dockerfile来创建images
David@MacBook-Pro-3 ~$ docker build -t hzc/mysql_server /path/mysql_server/Dockerfile David@MacBook-Pro-3 ~$ docker build -t hzc/mysql_client /path/mysql_client/Dockerfile
image构建执行结束之后,执行docker image|greo hzc,可以看到:
David@MacBook-Pro-3 ~$ docker image|grep hzc hzc/mysql_client latest 62cfe52e02bf 2 days ago 289 MB hzc/mysql_server latest 83c64aba0805 2 days ago 377.9 MB
二 启动容器
启动MySQL服务端的容器
David@MacBook-Pro-3 ~$ docker run -d -P --name=mysql_server hzc/mysql_server David@MacBook-Pro-3 ~$ b5e097fe510d8f258dd82c48a2f6aa4c279e227c4472e42d3e9956ac419ae73c
启动MySQL客户端容器
David@MacBook-Pro-3 ~$ docker run --name=mysql_client1 --link=mysql_server:db -i -t hzc/mysql_client mysql -h db -uroot -p1234 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>
查看进程
David@MacBook-Pro-3 ~$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 213285ec2663 hzc/mysql_client "mysql -h db -uroot -" 2 minutes ago Up 2 minutes mysql_client1 b5e097fe510d hzc/mysql_server "/usr/bin/mysqld_safe" 4 minutes ago Up 4 minutes 0.0.0.0:32768->3306/tcp mysql_server
可以看到多了一个参数配置--link=mysql_server:db , 是告诉当前容器需要使用mysql_server容器,并命名为db。这里db就是mysql_server容器的别名。在后面连接数据库的时候是可以直接使用mysql -h db -uroot -p1234来连接mysql数据库。
三 原理
在这里可以看到创建了两个容器,mysql_client1和mysql_server。容器mysql_client1连接到了mysql_server,建立了一种父子关系。
查看父容器mysql_client1的环境变量
David@MacBook-Pro-3 ~$ docker exec -it 213285ec2663 bash [root@213285ec2663 /]# env HOSTNAME=213285ec2663 DB_NAME=/mysql_client1/db TERM=xterm DB_PORT=tcp://172.17.0.2:3306 DB_PORT_3306_TCP_PORT=3306 .... DB_PORT_3306_TCP_PROTO=tcp PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin PWD=/ DB_PORT_3306_TCP_ADDR=172.17.0.2 SHLVL=1 HOME=/root DB_PORT_3306_TCP=tcp://172.17.0.2:3306 no_proxy=*.local, 169.254/16 DB_ENV_no_proxy=*.local, 169.254/16 LESSOPEN=||/usr/bin/lesspipe.sh %s G_BROKEN_FILENAMES=1 _=/usr/bin/env
可以看到已经得到了容器mysql_server的环境变量,给出的是3306的端口,而不是映射出来的端口。
查看hosts
[root@213285ec2663 /]# cat /etc/hosts 127.0.0.1 localhost .... 172.17.0.2 db b5e097fe510d mysql_server 172.17.0.3 213285ec2663
可以看到两条hosts的配置,一个是数据库的ip对应的别名,容器ID,容器名称。另外一个是客户端对应的容器ID。所以这里可以使用别名连接到数据库服务端。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# docker
# 连接容器
# 容器互联
# link
# 容器
# Docker容器依赖link连接按顺序启动方式
# docker容器通信参数使用及link参数介绍
# docker --link容器互联的实现
# Docker link实现容器互联的方式
# docker中的link和network网络互连问题
# 可以看到
# 客户端
# 服务端
# 连接到
# 的是
# 连接数据库
# 在这里
# 其他的
# 可以直接
# 两条
# 可以使用
# 再去
# 另外一个
# 在后面
# 命名为
# 大家多多
# 往常
# 结束之后
# 而不是
# 得到了
相关文章:
建站之星后台管理:高效配置与模板优化提升用户体验
定制建站如何定义?其核心优势是什么?
如何自定义建站之星模板颜色并下载新样式?
建站之星备案是否影响网站上线时间?
如何在Ubuntu系统下快速搭建WordPress个人网站?
网站制作网站,深圳做网站哪家比较好?
mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?
python的本地网站制作,如何创建本地站点?
C#怎么使用委托和事件 C# delegate与event编程方法
如何用低价快速搭建高质量网站?
如何通过万网虚拟主机快速搭建网站?
如何在IIS7上新建站点并设置安全权限?
教学网站制作软件,学习*后期制作的网站有哪些?
上海制作企业网站有哪些,上海有哪些网站可以让企业免费发布招聘信息?
已有域名建站全流程解析:网站搭建步骤与建站工具选择
网页制作模板网站推荐,网页设计海报之类的素材哪里好?
如何在云主机上快速搭建网站?
c# 服务器GC和工作站GC的区别和设置
成都品牌网站制作公司,成都营业执照年报网上怎么办理?
,石家庄四十八中学官网?
东莞专业网站制作公司有哪些,东莞招聘网站哪个好?
专业网站制作服务公司,有哪些网站可以免费发布招聘信息?
如何快速选择适合个人网站的云服务器配置?
微网站制作教程,不会写代码,不会编程,怎么样建自己的网站?
浅析上传头像示例及其注意事项
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
天津个人网站制作公司,天津网约车驾驶员从业资格证官网?
杭州银行网站设计制作流程,杭州银行怎么开通认证方式?
网站制作新手教程,新手建设一个网站需要注意些什么?
C#如何在一个XML文件中查找并替换文本内容
,怎么用自己头像做动态表情包?
非常酷的网站设计制作软件,酷培ai教育官方网站?
制作农业网站的软件,比较好的农业网站推荐一下?
哈尔滨网站建设策划,哈尔滨电工证查询网站?
网站制作软件免费下载安装,有哪些免费下载的软件网站?
湖南网站制作公司,湖南上善若水科技有限公司做什么的?
建站之星如何实现五合一智能建站与营销推广?
名字制作网站免费,所有小说网站的名字?
如何选择高效可靠的多用户建站源码资源?
如何在IIS中配置站点IP、端口及主机头?
建站之星下载版如何获取与安装?
Swift中swift中的switch 语句
智能起名网站制作软件有哪些,制作logo的软件?
网站制作员失业,怎样查看自己网站的注册者?
javascript基本数据类型及类型检测常用方法小结
制作网站公司那家好,网络公司是做什么的?
微网站制作教程,我微信里的网站怎么才能复制到浏览器里?
头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?
如何通过虚拟机搭建网站?详细步骤解析
免费公司网站制作软件,如何申请免费主页空间做自己的网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。