Docker 是一套平台即服务 (PaaS) 产品,它使用操作系统级可视化技术,以名为容器的软件包形式交付软件。在应用程序开发过程中,有时我们需要两个容器能够相互通信。两个容器的服务可能相互依赖。这可以通过容器链接 (Container Linking) 来实现。
以前,容器是通过使用“–link”标志来使用的,但现在已被弃用并被视为遗留命令。
与链接系统连接
有两种方式可以链接容器
-
默认方式
-
用户自定义方式
要了解两个容器之间自定义网络的形成,我们需要了解 docker 如何自动分配网络。
默认方式
一旦我们安装了docker并创建了一个容器,docker就会被分配一个默认的桥接网络,名为Docker0。IP地址范围是172.17.0.0/16(其中172.17.0.1分配给接口)。
现在,我们将创建的容器将在 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 镜像。
第 2 步:检查新容器的 IP。
$ docker network inspect bridge
在这些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
第 2 步:验证您的网络是否已创建。
$ docker network ls
步骤 3:使用“–net”标志关联或链接您刚刚创建的网络上的两个容器。
$ docker run --name <container_name>
--net=<custom_net>
-d <image_name>
我们已经使用了 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