原文链接: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?

  1. FROM centos:centos6
  2. MAINTAINER Fanbin Kong "kongxx@hotmail.com"
  3. RUN yum install -y mysql-server mysql
  4. RUN /etc/init.d/mysqld start &&\
  5. mysql -e "grant all privileges on *.* to 'root'@'%' identified by 'letmein';"&&\
  6. mysql -e "grant all privileges on *.* to 'root'@'localhost' identified by 'letmein';"&&\
  7. mysql -u root -pletmein -e "show databases;"
  8. EXPOSE 3306
  9. CMD ["/usr/bin/mysqld_safe"]

然后根据Dockerfile来创建image

[plain] view plain copy  print?

  1. sudo docker build -t kongxx/mysql_server .

1.2 创建一个mysql_client目录并在其下创建一个Dockerfile文件,内容如下

[plain] view plain copy  print?

  1. FROM centos:centos6
  2. MAINTAINER Fanbin Kong "kongxx@hotmail.com"
  3. RUN yum install -y mysql

然后根据Dockerfile来创建image

[plain] view plain copy  print?

  1. sudo docker build -t kongxx/mysql_client .

1.3 创建完image之后,我们可以使用下面命令来查看结果

[plain] view plain copy  print?

  1. $ sudo docker images | grep kongxx
  2. kongxx/mysql_client   latest                aa31f22f6fc5        2 hours ago         303.7 MB
  3. kongxx/mysql_server   latest                3b9b08c8dda4        2 hours ago         353.3 MB

2. 第二步是根据image来创建我们的应用场景

2.1 首先创建提供mysql数据库服务的容器

[plain] view plain copy  print?

  1. sudo docker run --name=mysql_server -d -P kongxx/mysql_server

2.2 分别创建两个使用上一步创建出来mysql数据库服务的容器

第一个应用容器

[plain] view plain copy  print?

  1. 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?

  1. 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?

  1. sudo docker ps
  2. CONTAINER ID        IMAGE                        COMMAND                CREATED             STATUS              PORTS                     NAMES
  3. ac0c76c627c0        kongxx/mysql_client:latest   /usr/bin/mysql -h db   10 seconds ago      Up 9 seconds                                  mysql_client2
  4. 763c4825722d        kongxx/mysql_client:latest   /usr/bin/mysql -h db   41 minutes ago      Up 40 minutes                                 mysql_client
  5. 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在容器之间建立连接相关推荐

  1. Docker映像和容器之间有什么区别?

    本文翻译自:What is the difference between a Docker image and a container? When using Docker, we start wit ...

  2. docker -v 覆盖了容器中的文件_浅谈docker中宿主机和容器之间互相copy文件的两种方式,欢迎补充...

    在dokcer的日常使用过程中,我们可能会遇到将宿主机内文件/目录copy到容器内,或者将容器的文件/目录copy到宿主机中,下面我们就来简单的谈一下关于这种情况的两种操作. 1.Docker cp命 ...

  3. 【汇智学堂】docker网络管理之三(容器之间的网络通讯)

    1.创建容器 创建两个使用默认的bridge网络的容器. docker run -itd --name=a1 busybox docker run -itd --name=a2 busybox 创 ...

  4. Docker中宿主机与容器之间互传文件(docker cp的方式)

    场景 CentOS中使用Docker来部署Tomcat: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/119108232 在上面 ...

  5. Docker容器——容器之间的互联

    创建一个bridge模式的网络 [root@foundation19 ~]# docker network create --driver bridge my_net1 89b97e70be47c75 ...

  6. docker 容器之间通信_还不清楚docker容器间是如何通信的?看这篇文章就够了

    如果觉得文章有帮助,欢迎点击头像关注我获取更多原创文章,同时也欢迎转发. 同时也可以在我的历史文章中找到Linux操作系统相关的服务器运维管理入门系列文章,欢迎交流. 前文演示docker容器内部数据 ...

  7. Docker容器之间数据传输

    Docker容器之间数据传输 1.从容器中将文件拷贝到宿主机上. 在宿主机你想要接收文件的地方,运行下面的指令 docker cp 容器id:home/test . docker run -d --n ...

  8. 深入理解docker的link机制

    什么是docker的link机制 同一个宿主机上的多个docker容器之间如果想进行通信,可以通过使用容器的ip地址来通信,也可以通过宿主机的ip加上容器暴露出的端口号来通信,前者会导致ip地址的硬编 ...

  9. tableau无法建立连接_Tableau入门(一):数据连接

    1 开始界面 你可以在Tableau官网上下载Tableau Desktop(即桌面版). 打开Tableau Desktop后,你可以看到如下界面: 图1 Tableau开始界面 开始界面的左侧是T ...

最新文章

  1. 学校计算机培训管理制度,小学教师信息技术培训管理制度
  2. 滴滴千万级ElasticSearch平台发展之路!
  3. 《高效程序员的45个习惯》之体会
  4. Java第一个程序(CMD环境)
  5. java and asp.net
  6. c++标准程序库异常
  7. zigbee协议_智能家居的ZigBee到底是什么?和Wi-Fi有何区别?
  8. python mock_python mock基本使用
  9. android 通过访问 php 接受 or 传送数据
  10. camera (13)---智能手机双摄像头工作原理详解:RBG +RGB, RGB + Mono
  11. 获取表结构信息(字段名,类型,长度,精度,小数位数,主键,自动增长)...
  12. 计算机睡眠断网,win7睡眠不断网设置方法汇总
  13. Python图片按比例缩放后的宽和高(PIL等比缩放)
  14. 【技术贴】删除空白文件夹,提示无法读源文件或磁盘的解决方法
  15. python输出边长为n的正方形_将一个正方形分成N个较小的正方形并求N个较小正方形的中心坐标...
  16. 超强大的手机端logo设计制作软件免费分享!
  17. [转载]2007热点技术职位排行及点析
  18. c语言指针部分上机,北科大C语言程序设计实验报告8-指针-练习题代码(2次上机课内容)--...
  19. 分布式网络爬虫关键技术分析与实现一网络爬虫相关知识介绍
  20. 基于springboot的电影院会员管理系统

热门文章

  1. 创业公司做数据分析(三)用户行为数据采集系统 (转)
  2. Nginx服务器之基础学习
  3. 怎样推断一棵二叉树是全然二叉树
  4. 字符串(strcmp)
  5. 高性能WEB开发 - HTTP服务器篇
  6. 在Ubuntu 10.10下安装JDK配置Eclipse及Tomcat
  7. WSUS3.0 详细部署之一
  8. 采用SIMULINK SimPowerSystems的光伏并网阵列仿真
  9. SecureCRT更改 rz上传/sz下载的默认路径
  10. linux命令之查看文件内容加上行号-nl