多个Docker容器,相同的映像,不同的配置

多个Docker容器,相同的映像,不同的配置,docker,containers,Docker,Containers,我对Docker完全是新手,所以我感谢你的耐心 我正在寻找一种方法来部署具有相同映像的多个容器,但是我需要向每个容器传递不同的配置(文件) 现在,我的理解是,一旦构建了一个映像,这就是部署的内容,但我的问题是,当容器之间的配置不同时,我不认为构建同一应用程序的多个映像有什么意义 如果这是正常的,那么我将不得不处理它,但是如果有另一种方法,那么请让我摆脱痛苦!:) 谢谢 每个容器使用相同的RO映像运行,但使用特定于RW容器的文件系统层。结果是每个容器都可以有自己的文件,这些文件与其他容器不同 您可

我对Docker完全是新手,所以我感谢你的耐心

我正在寻找一种方法来部署具有相同映像的多个容器,但是我需要向每个容器传递不同的配置(文件)

现在,我的理解是,一旦构建了一个映像,这就是部署的内容,但我的问题是,当容器之间的配置不同时,我不认为构建同一应用程序的多个映像有什么意义

如果这是正常的,那么我将不得不处理它,但是如果有另一种方法,那么请让我摆脱痛苦!:)


谢谢

每个容器使用相同的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。 这一切都是由我们自己完成的

  • 在此处添加入口点脚本
  • 不要忘记在生成映像期间复制脚本
  • 然后,在映像启动过程中,您的ENV变量将触发:
  • 当然,你可以用这个做任何你喜欢的事情。例如,这将配置一个通用端口映像: 哪个有这个入口点

    所以你看,入口点策略非常普遍,非常强大,我想只要你能,我就走这条路

    c) 派生图像 可能是为了“完整性”,图像衍生策略,因此您有一个名为“myapp”的基础图像,在安装X时您创建一个新图像

    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