Docker使用Link在容器之间建立连接

原文链接:Docker使用Link在容器之间建立连接

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

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

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

FROM centos:centos6
MAINTAINER Fanbin Kong "[email protected]"

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

sudo docker build -t kongxx/mysql_server .

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

FROM centos:centos6
MAINTAINER Fanbin Kong "[email protected]"

RUN yum install -y mysql

然后根据Dockerfile来创建image

sudo docker build -t kongxx/mysql_client .

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

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

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

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

第一个应用容器

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

第二个应用容器

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

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在容器之间建立连接

时间: 2024-08-08 09:24:59

Docker使用Link在容器之间建立连接的相关文章

使用link在两个容器之间建立连接(mysql)

在使用Docker的时候我们会常常碰到这么一种应用,就是我需要两个或多个容器,其中某些容器需要使用另外一些容器提供的服务.比如这么一种情况:我们需要一个容器来提供mysql的数据库服务,而另外两个容器作为客户端来连接使用mysql数据库服务.下面我们就来看看Docker是怎样通过Link来实现这种功能的. 1. 这里我们首先创建两个容器image,一个用来模拟mysql数据库,另外一个使用mysql的client来模拟一些使用mysql服务的应用,这种应用可以是任何php,python,java

Docker学习笔记(9-2)Docker容器之间的连接

学习目标: 容器之间的连接 准备工作 FROM ubuntu:14.04 RUN apt-get install -y ping RUN apt-get update RUN apt-get install -y nginx RUN pat-get install -y curl EXPOSE 80 CMD /bin/bash #构建测试镜像 docker build -t lexiaofei/cct . 1.允许所有容器互联 --icc=true 默认 $ docker run -it --n

docker端口映射与容器互联

端口映射与容器互联 1.端口映射实现容器访问 ① 从外部访问容器应用 在启动容器的时候,如果不指定对应参数,在容器外部是无法通过网络来访问容器内的网络应用和服务的. 当容器中运行一些网络应用,要让外部访问这些应用时,可以通过-P或-p参数来指定端口映射.当使用-P(大写)标记时,Docker会随机映射一个端口(端口范围在Linux系统使用的端口之外,一般都过万)到内部容器的开放网络端口: [[email protected]_0_9_centos ~]# docker run -d -P tra

Docker 数据卷与容器互联(3)

title: Docker 数据卷与容器互联(3) date: 2018-12-15 14:50:42 tags: Docker categories: Docker copyright: true --- Docker是基于Go语言实现的开源容器项目,Docker让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间不会有任何接口,Docker诞生于2013年年初,最初发起者是dotCloud公司.

关于对docker run --link的理解

原文:关于对docker run --link的理解 前言 在实践中,自己会遇到2个容器之间互相访问通信的问题,这个时候就用到了docker run --link选项.自己也花了一段时间泡官网研究了--link的用法,把自己对--link的理解分享下.注意!docker官方已不推荐使用docker run --link来链接2个容器互相通信,随后的版本中会删除--link,但了解其原理,对如何使2个容器之间互相通信还是有帮助的. 1. docker run --link的作用 docker ru

深入理解docker的link机制

https://yq.aliyun.com/articles/55912 摘要: 什么是docker的link机制 同一个宿主机上的多个docker容器之间如果想进行通信,可以通过使用容器的ip地址来通信,也可以通过宿主机的ip加上容器暴露出的端口号来通信,前者会导致ip地址的硬编码,不方便迁移,并且容器重启后ip地址会改变,除非使用固定的ip,后者的通信方式比较单一,只能依靠监听在暴露出的端口的进程来进行有限的通信.通过docker的link机制可以通过一个name来和另一 什么是docker

Docker & ASP.NET Core (4):容器间的连接

原文:Docker & ASP.NET Core (4):容器间的连接 第一篇:把代码连接到容器 第二篇:定制Docker镜像 第三篇:发布镜像 Docker容器间的连接 Docker提供了两种方式可以用来做容器间的连接/通信: Legacy Linking:这种方式使用容器名进行连接,实际上它创建了一个桥接的网络,在这个网络里,容器间可以进行通信. 把容器添加到桥接网络:这种方式是创建了一个自定义的桥接网络,它的类型是isolated network(隔离网络),只有在这个网络里的容器才能互相

Docker基本命令与使用 —— Docker容器的网络连接(四)

一.Docker容器的网络基础 通过ifconfig查看docker0的网络设备,docker守护进程就是通过docker0为docker的容器提供网络连接的各种服务. docker0是Linux虚拟网桥. Linux虚拟网桥的特点: 可以设置IP地址 相当于拥有一个隐藏的虚拟网卡 docker0的地址划分: IP:172.17.42.1 子网掩码: 255.255.0.0 MAC: 02:42:ac:11:00:00 到 02:42:ac:11:ff:ff 总共提供65534个地址 docke

docker容器之间网络是如何通信的?

相关概念: 网桥:相当于一个虚拟的交换机,连接在此网桥上的所有设备均可以正常通信: veth pair:虚拟网卡对(2张网卡),两张网卡之间的收发数据保持一致: docker网络: docker0网桥:在安装启动完docker之后,会出现一个docker0的网卡设备(此设备相当于一个交换机): 创建docker容器后,会创建2个虚拟网卡,一端显示在宿主机中,一端是容器中的eth0,这2张网卡是虚拟网卡对: 创建2个容器,在宿主机上执行ip a,可以看到会出现2个虚拟网卡(以veth开头): do