多个Docker容器,相同的映像,不同的配置
我对Docker完全是新手,所以我感谢你的耐心 我正在寻找一种方法来部署具有相同映像的多个容器,但是我需要向每个容器传递不同的配置(文件) 现在,我的理解是,一旦构建了一个映像,这就是部署的内容,但我的问题是,当容器之间的配置不同时,我不认为构建同一应用程序的多个映像有什么意义 如果这是正常的,那么我将不得不处理它,但是如果有另一种方法,那么请让我摆脱痛苦!:)多个Docker容器,相同的映像,不同的配置,docker,containers,Docker,Containers,我对Docker完全是新手,所以我感谢你的耐心 我正在寻找一种方法来部署具有相同映像的多个容器,但是我需要向每个容器传递不同的配置(文件) 现在,我的理解是,一旦构建了一个映像,这就是部署的内容,但我的问题是,当容器之间的配置不同时,我不认为构建同一应用程序的多个映像有什么意义 如果这是正常的,那么我将不得不处理它,但是如果有另一种方法,那么请让我摆脱痛苦!:) 谢谢 每个容器使用相同的RO映像运行,但使用特定于RW容器的文件系统层。结果是每个容器都可以有自己的文件,这些文件与其他容器不同 您可
谢谢 每个容器使用相同的RO映像运行,但使用特定于RW容器的文件系统层。结果是每个容器都可以有自己的文件,这些文件与其他容器不同
您可以在CLI上以环境变量或唯一卷装载的形式传入配置。这是Docker的一个非常标准的用例。我认为看一些容易理解的例子可以给你最好的印象 您想要做的是完全有效的,映像应该是您需要运行的任何东西,而不需要配置 要生成配置,您可以:
a) 卷装载 在容器启动期间使用卷并装载文件
docker run-v my.ini:/etc/mysql/my.ini percona
(与docker compose
类似)。
请注意,您可以随时重复此操作,因此将多个配置装载到您的容器中(因此映像的运行时版本)。
在运行容器之前,您将在主机上创建这些配置,并且需要随容器一起提供这些文件,这是这种方法的缺点(可移植性)
b) 基于入口点的配置(生成)
大多数高级docker映像确实提供了一个复杂的所谓入口点,该入口点使用启动映像时传递的ENV变量,以便为您创建配置,如
因此,当您运行此映像时,您可以执行docker run-e MYSQL_DATABASE=myapp percona
,这将启动percona并为您创建数据库percona。
这一切都是由我们自己完成的
from myapp
COPY my.ini /etc/mysql/my.ini
COPY application.yml /var/app/config/application.yml
把这张图片称为myapp:x——最明显的问题是,你最终会有很多图片,另一方面,与a)相比,它更便于携带
希望这有助于根据需要多次从同一图像运行。将创建新容器,然后可以启动和停止它们,每个容器保存自己的配置。为了方便起见,最好为每个容器指定一个带有“-name”的名称 F.i: 之后,您将永久创建容器,您可以像虚拟机一样启动和停止它们
docker start MyContainer1
您可以在运行时动态挂载配置文件。太棒了,谢谢:)但是是否可以自动化此配置?比如说,如果我要添加一堆不同的容器,所有容器都使用相同的Nginx映像,但每个容器都有不同的.conf,那么如何设置将与之一起部署的.conf。您将把conf文件作为卷共享到每个容器中。一个卷可以是一个目录或一个单独的文件。这如何解决“我需要向每个卷传递不同的配置(文件)”,这是问题的核心。每个容器可以有不同的配置。更改stay.OP希望从同一个映像部署多个容器,这比配置文件更为核心@迪米达克回答了这个问题。
$ docker ps
CONTAINER ID IMAGE CREATED STATUS NAMES
a7e789711e62 67759a80360c 12 hours ago Up 2 minutes MyContainer1
87ae9c5c3f84 67759a80360c 12 hours ago Up About a minute MyContainer2
c1524520d864 67759a80360c 12 hours ago Up About a minute MyContainer3
docker start MyContainer1