Docker使用Link在容器之间建立连接
原文链接:Docker使用Link在容器之间建立连接
在使用Docker的时候我们会常常碰到这么一种应用,就是我需要两个或多个容器,其中某些容器需要使用另外一些容器提供的服务。比如这么一种情况:我们需要一个容器来提供MySQL的数据库服务,而另外两个容器作为客户端来连接使用mysql数据库服务。下面我们就来看看docker是怎样通过Link来实现这种功能的。
1. 这里我们首先创建两个容器image,一个用来模拟mysql数据库,另外一个使用mysql的client来模拟一些使用mysql服务的应用,这种应用可以是任何PHP,Python,Java等的应用。
1.1 先创建一个mysql_server目录并在其下创建一个Dockerfile文件,内容如下
[plain] view plain copy print?
- FROM centos:centos6
- MAINTAINER Fanbin Kong "kongxx@hotmail.com"
- RUN yum install -y mysql-server mysql
- RUN /etc/init.d/mysqld start &&\
- mysql -e "grant all privileges on *.* to 'root'@'%' identified by 'letmein';"&&\
- mysql -e "grant all privileges on *.* to 'root'@'localhost' identified by 'letmein';"&&\
- mysql -u root -pletmein -e "show databases;"
- EXPOSE 3306
- CMD ["/usr/bin/mysqld_safe"]
然后根据Dockerfile来创建image
[plain] view plain copy print?
- sudo docker build -t kongxx/mysql_server .
1.2 创建一个mysql_client目录并在其下创建一个Dockerfile文件,内容如下
[plain] view plain copy print?
- FROM centos:centos6
- MAINTAINER Fanbin Kong "kongxx@hotmail.com"
- RUN yum install -y mysql
然后根据Dockerfile来创建image
[plain] view plain copy print?
- sudo docker build -t kongxx/mysql_client .
1.3 创建完image之后,我们可以使用下面命令来查看结果
[plain] view plain copy print?
- $ sudo docker images | grep kongxx
- kongxx/mysql_client latest aa31f22f6fc5 2 hours ago 303.7 MB
- kongxx/mysql_server latest 3b9b08c8dda4 2 hours ago 353.3 MB
2. 第二步是根据image来创建我们的应用场景
2.1 首先创建提供mysql数据库服务的容器
[plain] view plain copy print?
- sudo docker run --name=mysql_server -d -P kongxx/mysql_server
2.2 分别创建两个使用上一步创建出来mysql数据库服务的容器
第一个应用容器
[plain] view plain copy print?
- sudo docker run --name=mysql_client1 --link=mysql_server:db -t -i kongxx/mysql_client /usr/bin/mysql -h db -u root -pletmein
第二个应用容器
[plain] view plain copy print?
- sudo docker run --name=mysql_client2 --link=mysql_server:db -t -i kongxx/mysql_client /usr/bin/mysql -h db -u root -pletmein
这里需要特别注意一下“–link=mysql_server:db”,这个参数就是告诉Docker容器需要使用“mysql_server”容器,并将其别名命名为db,这样在这两个容器里就可以使用“db”来作为提供mysql数据库服务的机器名。所以在最后启动参数里我们使用的是“/usr/bin/mysql -h db -u root -pletmein”来连接mysql数据库的。
2.3 运行完上面两个命令,我们就会在创建了两个mysql的client的容器,此时我们可以使用下面命令来查看状态
[plain] view plain copy print?
- sudo docker ps
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- ac0c76c627c0 kongxx/mysql_client:latest /usr/bin/mysql -h db 10 seconds ago Up 9 seconds mysql_client2
- 763c4825722d kongxx/mysql_client:latest /usr/bin/mysql -h db 41 minutes ago Up 40 minutes mysql_client
- 32f7839f7e9d kongxx/mysql_server:latest /usr/bin/mysqld_safe About an hour ago Up About an hour 0.0.0.0:49153->3306/tcp mysql_client1/db,mysql_client2/db,mysql_server
这里注意一下最后一行,也就是mysql_server容器的“NAMES”列的内容“mysql_client/db,mysql_client2/db,mysql_server”,这就说明mysql_client1和mysql_client2都和db建立的连接。
Docker使用Link在容器之间建立连接相关推荐
- Docker映像和容器之间有什么区别?
本文翻译自:What is the difference between a Docker image and a container? When using Docker, we start wit ...
- docker -v 覆盖了容器中的文件_浅谈docker中宿主机和容器之间互相copy文件的两种方式,欢迎补充...
在dokcer的日常使用过程中,我们可能会遇到将宿主机内文件/目录copy到容器内,或者将容器的文件/目录copy到宿主机中,下面我们就来简单的谈一下关于这种情况的两种操作. 1.Docker cp命 ...
- 【汇智学堂】docker网络管理之三(容器之间的网络通讯)
1.创建容器 创建两个使用默认的bridge网络的容器. docker run -itd --name=a1 busybox docker run -itd --name=a2 busybox 创 ...
- Docker中宿主机与容器之间互传文件(docker cp的方式)
场景 CentOS中使用Docker来部署Tomcat: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/119108232 在上面 ...
- Docker容器——容器之间的互联
创建一个bridge模式的网络 [root@foundation19 ~]# docker network create --driver bridge my_net1 89b97e70be47c75 ...
- docker 容器之间通信_还不清楚docker容器间是如何通信的?看这篇文章就够了
如果觉得文章有帮助,欢迎点击头像关注我获取更多原创文章,同时也欢迎转发. 同时也可以在我的历史文章中找到Linux操作系统相关的服务器运维管理入门系列文章,欢迎交流. 前文演示docker容器内部数据 ...
- Docker容器之间数据传输
Docker容器之间数据传输 1.从容器中将文件拷贝到宿主机上. 在宿主机你想要接收文件的地方,运行下面的指令 docker cp 容器id:home/test . docker run -d --n ...
- 深入理解docker的link机制
什么是docker的link机制 同一个宿主机上的多个docker容器之间如果想进行通信,可以通过使用容器的ip地址来通信,也可以通过宿主机的ip加上容器暴露出的端口号来通信,前者会导致ip地址的硬编 ...
- tableau无法建立连接_Tableau入门(一):数据连接
1 开始界面 你可以在Tableau官网上下载Tableau Desktop(即桌面版). 打开Tableau Desktop后,你可以看到如下界面: 图1 Tableau开始界面 开始界面的左侧是T ...
最新文章
- 学校计算机培训管理制度,小学教师信息技术培训管理制度
- 滴滴千万级ElasticSearch平台发展之路!
- 《高效程序员的45个习惯》之体会
- Java第一个程序(CMD环境)
- java and asp.net
- c++标准程序库异常
- zigbee协议_智能家居的ZigBee到底是什么?和Wi-Fi有何区别?
- python mock_python mock基本使用
- android 通过访问 php 接受 or 传送数据
- camera (13)---智能手机双摄像头工作原理详解:RBG +RGB, RGB + Mono
- 获取表结构信息(字段名,类型,长度,精度,小数位数,主键,自动增长)...
- 计算机睡眠断网,win7睡眠不断网设置方法汇总
- Python图片按比例缩放后的宽和高(PIL等比缩放)
- 【技术贴】删除空白文件夹,提示无法读源文件或磁盘的解决方法
- python输出边长为n的正方形_将一个正方形分成N个较小的正方形并求N个较小正方形的中心坐标...
- 超强大的手机端logo设计制作软件免费分享!
- [转载]2007热点技术职位排行及点析
- c语言指针部分上机,北科大C语言程序设计实验报告8-指针-练习题代码(2次上机课内容)--...
- 分布式网络爬虫关键技术分析与实现一网络爬虫相关知识介绍
- 基于springboot的电影院会员管理系统