我是Docker的新手,感谢您的耐心配合。
我正在寻找一种方法来部署具有相同映像的多个容器,但是我需要向每个容器传递不同的配置(文件)?
现在,我的理解是,一旦构建了映像,就可以部署它,但是对我来说,问题是,当相同的应用程序之间的配置不同时,我看不到构建同一应用程序的多个映像的意义。容器。
如果这是正常现象,那么我将不得不处理它,但是,如果还有其他方法,请让我摆脱痛苦!:)
谢谢!
我认为查看易于理解的示例可以为您提供最好的画面。
您要做的是完全有效的,映像应该是您需要运行的任何内容,而无需进行配置。
要生成配置,您可以:
使用卷并在容器启动期间挂载文件docker run -v my.ini:/etc/mysql/my.ini percona(与相似docker- compose)。请注意,您可以根据需要多次重复此操作,因此可以将多个配置装入 容器中 (因此映像的运行时版本)。您将在运行容器之前在主机上创建这些配置,并且需要将这些文件与容器一起运送,这是此方法的缺点(可移植性)
docker run -v my.ini:/etc/mysql/my.ini percona
docker- compose
大多数高级Docker映像确实提供了一个复杂的入口点,该入口点消耗了启动映像时传递的ENV变量来为您创建配置,例如https://github.com/docker- library/percona /blob/master/5.7/docker- entrypoint.sh
因此,当您运行此映像时,您可以执行docker run -e MYSQL_DATABASE=myapp percona此操作,这将启动percona并为您创建数据库percona。这一切都由
docker run -e MYSQL_DATABASE=myapp percona
当然,您可以随心所欲地做任何事情。例如,这将配置一个常规的门户图像:https : //github.com/EugenMayer/docker-rancher-extra- catalogs/blob/master/templates/registry-slim/11/docker- compose.yml 具有此入口点https:/ /github.com/EugenMayer/docker-image- portus/blob/master/build/startup.sh
因此,您会看到,切入点策略非常普遍且功能强大,我想尽可能地走这条路。
也许是出于“完整性”(源自图像的策略)的考虑,因此您将基于“ myapp”的图像作为基础,并为安装X创建了新图像
from myapp COPY my.ini /etc/mysql/my.ini COPY application.yml /var/app/config/application.yml
并将此图像称为myapp:x-显而易见的问题是,与a)相比,您最终拥有很多图像,而a)它的可移植性更高。
希望能有所帮助