您不能拥有多个具有完全相同名称的容器,但您可以使用docker-compose
file 来拥有多个具有相同名称的目录和容器(但有一些差异,我将在下面解释)。
您可以在Docker Docs中阅读有关我以下解释的更多信息。
让我们假设你的:
Physical Server A
-----------------------------------------
| Virtual Server A |
| -------------------------------------- |
| | keepalived - htmld - accessd - mysql |
| -------------------------------------- |
| ^ |
| | |
| v |
| Virtual Server B |
| -------------------------------------- |
| | keepalived - htmld - accessd - mysql |
| -------------------------------------- |
-----------------------------------------
在您的情况下,我将创建两个目录:vsb
和vsb
. 现在让我们进入这两个目录。
我们有这些文件(至少,但您可以根据您的要求拥有更多文件):
-----------------------------------------
| /home/vsa/docker-compose.yml |
| /home/vsa/keepalived/Dockerfile |
| /home/vsa/htmld/Dockerfile |
| /home/vsa/accessd/Dockerfile |
| /home/vsa/mysql/Dockerfile |
| -------------------------------------- |
| ^ |
| | |
| v |
| /home/vsb/docker-compose.yml |
| /home/vsb/keepalived/Dockerfile |
| /home/vsb/htmld/Dockerfile |
| /home/vsb/accessd/Dockerfile |
| /home/vsb/mysql/Dockerfile |
| -------------------------------------- |
-----------------------------------------
请准确记下文件名,Dockerfile
以大写 D 开头。
让我们看看docker-compose.yml
:
version: '3.9'
services:
keepalived:
build: ./keepalived
restart: always
htmld:
build: ./htmld
restart: always
accessd:
build: ./accessd
restart: always
mysql:
build: ./mysql
restart: always
networks:
default:
external:
name: some_network
volumes:
some_name: {}
让我们首先深入研究docker-compose.yml
:
Version
部分定义要使用的版本。Services
部分启动您要创建和运行的服务和容器。
我使用过类似keepalived
under 的名称services
。您可以在那里使用任何您想要的名称,因为这是您的选择。
在 下keepalived
,关键字build
指定Dockerfile
存在于哪个路径,所以当路径被调用/home/vsa/keepalived
时,所以我们.
在这里使用 which 的意思,然后它进入keepalived
目录,搜索Dockerfile
(在docker-compose.yml
for 中vsb
,它在 中搜索这个文件/home/vsb/keepalived
)。
networks
part 指定了external
这些容器使用的网络,这样当我们来自 docker-compose 的所有容器都在运行时,它们就在同一个 docker 网络中,所以它们可以看到并相互交谈。name
零件具有some_network
您可以选择之前创建的任何名称的名称。
如何创建一个名为的网络some_network
是,如果你在 Linux 中,你应该docker network create some_network
在运行 docker-compose 文件之前运行。
volumes
部分指定这些服务的卷的名称。
这是keepalived
目录中名为的文件的示例Dockerfile
:
FROM ubuntu:latest # see [Dockerfile Docs][2] for more info
# after FROM command, you can use
# other available commands to reach
# your own goal
现在让我们去Dockerfile
:
FROM
命令指定要使用的操作系统基础。在这种情况下,我们想使用ubuntu
例如,以便我们基于ubuntu
.
还有其他命令,您可以在上面的链接中看到它们。
Dockerfile
使用您自己的命令和关键字完成这两个docker-compose.yml
文件后,您可以通过以下命令运行和创建它们:
docker-compose -f /home/vsa/docker-compose.yml up -d
docker-compose -f /home/vsb/docker-compose.yml up -d
现在我们将有八个容器调用它们(docker 自动调用它们,否则您将自己显式命名它们):
vsa_keepalived
vsa_htmld
vsa_accessd
vsa_mysql
vsb_keepalived
vsb_htmld
vsb_accessd
vsb_mysql