在使用Docker的时候我们会常常碰到这么一种应用,就是我需要两个或多个容器,其中某些容器需要使用另外一些容器提供的服务。比如这么一种情况:我们需要一个容器来提供MySQL数据库服务,而另外两个容器作为客户端来连接使用mysql数据库服务。下面我们就来看看Docker是怎样通过Link来实现这种功能的。

1. 这里我们首先创建两个容器image,一个用来模拟mysql数据库,另外一个使用mysql的client来模拟一些使用mysql服务的应用,这种应用可以是任何PHPPythonJava等的应用。

1.1 先创建一个mysql_server目录并在其下创建一个Dockerfile文件,内容如下

  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

  1. sudo docker build -t kongxx/mysql_server .

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

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

然后根据Dockerfile来创建image

  1. sudo docker build -t kongxx/mysql_client .

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

  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数据库服务的容器

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

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

第一个应用容器

  1. sudo docker run --name=mysql_client1 --link=mysql_server:db -t -i kongxx/mysql_client /usr/bin/mysql -h db -u root -pletmein

第二个应用容器

  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的容器,此时我们可以使用下面命令来查看状态

  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建立的连接

dokcer使用--link 让容器相连的更多相关文章

  1. Docker使用link建立容器之间的连接

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

  2. dokcer 运行和进入容器

    <pre name="code" class="html">docker:/root# docker run -itd --name zjtest8 ...

  3. Docker 容器网络

    默认网络 当安装docker时,它会自动创建3个网络.可以使用docker network ls 来查看.   zane@zane-V:~$ docker network ls NETWORK ID ...

  4. Docker容器的网络连接:

    yw1989@ubuntu:~$ ifconfig docker0 Link encap:Ethernet HWaddr 02:42:97:61:42:9f inet addr:172.17.0.1 ...

  5. docker4-docker网络,容器编排,集群部署

    1,docker网络 1.1,docker0 有三个网络环境,那么docker是如何处理容器网络访问的? 1.2,测试 docker run -d -p 80:8080 --name tomcat01 ...

  6. 深入理解docker的link机制

    https://yq.aliyun.com/articles/55912 摘要: 什么是docker的link机制 同一个宿主机上的多个docker容器之间如果想进行通信,可以通过使用容器的ip地址来 ...

  7. [转载] Docker网络原则入门:EXPOSE,-p,-P,-link

    原文: http://dockone.io/article/455 如果你已经构建了一些多容器的应用程序,那么肯定需要定义一些网络规则来设置容器间的通信.有多种方式可以实现:可以通过--expose参 ...

  8. docker 连接容器

    1.通过端口映射 sudo docker run -d -P training/webapp python app.py 容器有一个内部网络和IP地址(在使用Docker部分我们使用docker in ...

  9. Docker容器的网络连接

    Docker容器的网络连接 Docker容器的网络连接 我们用ifconfig命令来查看网络设备 我们可以看到上面有个叫docker0的网络设备,docker守护进程就是通过docker0为docke ...

随机推荐

  1. linux 关于时间日期date

    一.查看和修改Linux的时区 1. 查看当前时区 命令 : "date -R" 2. 修改设置Linux服务器时区 方法 A 命令 : "tzselect" ...

  2. python面向对象笔记

    一.封装(属性/私有方法/公有方法/静态方法/构造函数...) # 定义一个类 class Animal: # 私有成员(用_开头的约定为私有成员 - 注:仅仅是君子协定) _age = 0 # 构造 ...

  3. 解决 Mac 的 Terminal 中,Java 乱码的问题

    在 .bash_profile 文件中,增加如下行: export JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF-8 然后,重新加载该配置 source .bash_pr ...

  4. android:定制 ListView 的界面

    只能显示一段文本的 ListView 实在是太单调了,我们现在就来对 ListView 的界面进行 定制,让它可以显示更加丰富的内容. 首先需要准备好一组图片,分别对应上面提供的每一种水果,待会我们要 ...

  5. 学员会诊之02:SVN协作以及Page类的设计

    三层架构的学生管理系统是我们第一个稍微大型的项目:分层.一个解决方案多个Project,所以值得我们停下来好好审查审查. 1.测试SVN服务器地址 我们的作业要求学员创建自己的SVN服务器,并且将代码 ...

  6. WebMagic编译时提示Failure to transfer org.apache.maven.plugins:maven-surefire-plugin:pom:2.18的解决方法

    问题描述:    从http://git.oschina.net/flashsword20/webmagic 下载最新代码,按照http://webmagic.io/docs/zh/posts/ch3 ...

  7. 原创:vsphere概念深入系列三:vSphere命令行管理

    假设无法近距离接触物理主机,只能远程命令行管理,. 以下命令行可以起到点作用. 首先需要安装vSphere CLI工具. 启动后界面: 1.查看datastore内容 所有命令行工具都可以加上-ser ...

  8. swift3 与 OC 语法区别

    1.Swift还增加了Objective-C中没有的类型比如元组(Tuple). 元组可以让你创建或者传递一组数据,比如作为函数的返回值时,你可以用一个元组可以返回多个值. 元组(tuples)把多个 ...

  9. UnDistracted for Mac(集中注意力辅助工具)破解版安装

    1.软件简介    UnDistracted 是 macOS 系统上一款可以帮助我们集中注意力的辅助工具,让我们在 mac 电脑上工作更加集中注意力,提高工作效率,隐藏所有文件或是文件夹窗口.隐藏所有 ...

  10. [Aaronyang紫色博客] 写给自己的WPF4.5-Blend5公开课系列 3 - 再来一发

     我的文章一定要做到对读者负责,否则就是失败的文章  ---------   www.ayjs.net    aaronyang技术分享 深入路径的Blend技巧课,Ay原创,自己琢磨讲解 内容已经迁 ...