当使用 Docker 部署多个容器时,这些容器之间需要进行互相通信才能完成某些应用程序的功能。下面就是实现 Docker 容器互联互通的方法攻略。
方法一:使用 Docker 服务发现
Docker 官方提供了 Docker 服务发现框架(Docker Swarm Mode)。通过 Docker Swarm Mode,可以将多个 Docker 节点集中管理并提供负载均衡、服务发现、服务注册等功能。
- 开启 Docker Swarm Mode
在 Docker 主机上执行以下命令:
$ docker swarm init
- 部署服务
使用以下命令创建服务。
$ docker service create --name <SERVICE-NAME> --network <NETWORK-NAME> <IMAGE>
其中:
<SERVICE-NAME>
:需要创建的服务名称<IMAGE>
:服务所需的 Docker 镜像<NETWORK-NAME>
:所使用的网络名称
这个命令将创建新的服务并将其分配到指定的 Docker 节点上。
- 连接到创建的服务
通过以下命令连接到创建的服务中:
$ docker service connect <TARGET-SERVICE> <SOURCE-SERVICE>
其中:
<TARGET-SERVICE>
:目标服务名称<SOURCE-SERVICE>
:需要连接到目标服务的服务名称
通过这个命令,您可以使一个服务连接到其他服务。
方法二:使用 Docker 网络
Docker 给我们提供了一个通用的网络创建方法:bridge网络,通过容器加入相同的bridge网络,实现同一网络内的通信。
- 创建 Docker 网络
使用以下命令创建一个 Docker 网络:
$ docker network create <NETWORK-NAME>
其中 <NETWORK-NAME>
是网络名称。
- 创建容器并连接到网络
使用以下命令创建一个容器,并加入指定的网络:
$ docker run --name <CONTAINER-NAME> --network <NETWORK-NAME> <IMAGE>
其中:
<CONTAINER-NAME>
:需要创建的容器名称<IMAGE>
:所要使用的 Docker 镜像-
<NETWORK-NAME>
:所需要加入的网络名称 -
测试容器互联
通过以下命令进入到容器内部:
$ docker exec -it <CONTAINER-NAME> /bin/bash
在容器内部使用 ping
命令测试其他容器的 IP 是否能够 ping 通。
$ ping <CONTAINER-IP>
示例
下面我们通过一个简单的示例来演示其中一个方法。
假设我们有一个应用程序,它由两个服务组成:MySQL 和 Nginx。这两个服务之间需要进行通信才能完成应用程序的功能。
Docker 服务发现方法
- 开启 Docker Swarm Mode
在 Docker 主机上执行以下命令:
$ docker swarm init
- 创建 Docker 网络
使用以下命令创建一个 Docker 网络:
$ docker network create mynetwork
- 部署 MySQL 服务
使用以下命令创建 MySQL 服务:
$ docker service create -e MYSQL_ROOT_PASSWORD=<MY_PWD> --name mysql --network mynetwork mysql:5.7
其中:
-
<MY_PWD>
:您设置的 MySQL root 账号密码 -
部署 Nginx 服务
使用以下命令创建 Nginx 服务:
$ docker service create --name nginx --network mynetwork -p 80:80 nginx
- 连接服务
连接 Nginx 服务和 MySQL 服务:
$ docker service connect nginx mysql
现在,您已经成功连接了 Nginx 服务和 MySQL 服务。
Docker 网络方法
- 创建 Docker 网络
使用以下命令创建一个 Docker 网络:
$ docker network create mynetwork
- 启动 MySQL 容器
使用以下命令启动 MySQL 容器:
$ docker run --name mysql -e MYSQL_ROOT_PASSWORD=<MY_PWD> --network mynetwork -d mysql:5.7
其中:
-
<MY_PWD>
:您设置的 MySQL root 账号密码 -
启动 Nginx 容器
使用以下命令启动 Nginx 容器:
$ docker run --name nginx --network mynetwork -p 80:80 -d nginx
- 测试容器互联
通过以下命令进入到 Nginx 容器内部:
$ docker exec -it nginx /bin/bash
在容器内部使用 ping
命令测试 MySQL 容器的 IP 是否能 ping 通:
$ ping mysql
如果能 ping 通,则说明容器互联成功。
以上就是 Docker 容器互联互通的实现方法及其示例。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Docker 容器互联互通的实现方法 - Python技术站