Docker 容器链接

Docker 是一套平台即服务 (PaaS) 产品,它使用操作系统级可视化技术,以名为容器的软件包形式交付软件。在应用程序开发过程中,有时我们需要两个容器能够相互通信。两个容器的服务可能相互依赖。这可以通过容器链接 (Container Linking) 来实现

以前,容器是通过使用“–link”标志来使用的,但现在已被弃用并被视为遗留命令。

容器链接

与链接系统连接

有两种方式可以链接容器

  • 默认方式

  • 用户自定义方式

要了解两个容器之间自定义网络的形成,我们需要了解 docker 如何自动分配网络。

默认方式

一旦我们安装了docker并创建了一个容器,docker就会被分配一个默认的桥接网络,名为Docker0。IP地址范围是172.17.0.0/16(其中172.17.0.1分配给接口)。

Docker0 网络

现在,我们将创建的容器将在 172.17.0.2/16 范围内获取其 IP。

步骤1:创建两个新容器,webcon和dbcon

$ docker run -it --name webcon -d httpd
$ docker run -it --name dbcon -e MYSQL_ROOT_PASSWORD=1234 -d mysql

您可以使用任何镜像,在我们的例子中我们将使用MySQL和 HTTPD 镜像

使用 httpd 镜像创建的 webcon

dbcon 创建

第 2 步:检查新容器的 IP。

$ docker network inspect bridge

这些 IP 与 Docker0 网桥的 IP 处于同一范围内。

在这些IP的帮助下,docker主机与容器建立连接。

步骤 3:进入 webcon 容器并尝试 ping dbcon 容器,如果收到响应,则表示默认连接已建立。

$ docker container exec -it webcon /bin/bash  
(to get into the webcon container)
$ ping "172.17.0.3" 
(ping the dbcon container)

连接已建立

用户定义方式

步骤 1:创建自定义桥接网络

$ docker network create <bridge_name> 
(This will create a bridge with custom subnet and gateway)

我们还可以提供我们自己的子网网关。

$ docker network create --subnet <your_subnet>
 --gateway <Your_gateway> bridgename

网络名称 - OUR-NET

第 2 步:验证您的网络是否已创建。

$ docker network ls

步骤 3:使用“–net”标志关联或链接您刚刚创建的网络上的两个容器。

$ docker run --name <container_name>
 --net=<custom_net> 
-d <image_name>

webnew 容器

高山容器

我们已经使用了 httpd 和 Alpine 图像作为我们的容器。

步骤 4:进入 webnew 容器(IP-10.7.0.10)并 ping alpine 容器(IP-10.7.0.2)

$ docker exec -it webnew /bin/bash 
$ ping "10.7.0.2" (inside the webnew container)

如果您开始接收来自 Alpine 容器的数据包,则表示您已成功使用您自己的 OUR-NET 网络在两个容器之间建立了连接。这就是您可以创建自定义桥接网络的方法,该网络允许您在容器之间建立连接。

命名的重要性

Docker 主要依赖于容器的名称,我们可以在上面的例子中看到,每当您创建一个新容器时,名称就会自动创建,我们还可以用两种不同的方式来命名我们的容器。

  • 通过为容器命名,我们可以跟踪在其中执行的程序类型,例如 Web 应用程序或数据库。

  • 例如,如果 Web 应用程序想要与 DB 服务器通信,它可以像连接链接一样充当两个容器之间的屏障。

我们可以借助下面显示的命令来命名我们的容器

(--name) docker run -d -P --name <name/imagename/tag> 

环境变量

如果假设开发人员在源代码中提到了一些–env (环境变量),我们可以通过它们连接到数据库服务器,例如用户名和密码,那么在创建容器时我们会设置用户名和密码,如下面的命令所示。

docker run -d --name <name>  -e USERNAME=<***> -e  PASSWORD=<***>  --network <****> 

我们可以使用以下命令将上述环境变量设置到数据库容器。

docker run -d -p <port> --name <name>  -e HOSTNAME=<***> -e  USERNAME=<***> -e  PASSWORD=<***> --network <***>

更新 /etc/hosts 文件

除了我们提供的环境变量之外,Docker 还会在 /etc/hosts 中添加源容器的主机条目,下面会提到链接两个容器的命令。

docker run -t -i --rm --link <Mention Entries> 

要检查 /etc/hosts 文件中提到的条目列表,我们可以使用以下命令。

cat / etc /hosts

Leave a Comment