我认为查看易于理解的示例可以为您提供最好的画面。
您要做的是完全有效的,映像应该是您需要运行的任何内容,而无需进行配置。
要生成配置,您可以:
a)体积安装
使用卷并在容器启动期间挂载文件
docker run -v my.ini:/etc/mysql/my.ini percona(与相似
docker-compose)。请注意,您可以根据需要多次重复此操作,因此可以将多个配置装入 容器中
(因此映像的运行时版本)。您将在运行容器之前在主机上创建这些配置,并且需要将这些文件与容器一起运送,这是此方法的缺点(可移植性)
b)基于入口点的配置(生成)
大多数高级Docker映像确实提供了一个复杂的入口点,该入口点消耗了启动映像时传递的ENV变量来为您创建配置,例如https://github.com/docker-
library/percona /blob/master/5.7/docker-
entrypoint.sh
因此,当您运行此映像时,您可以执行
docker run -e MYSQL_DATAbase=myapppercona此操作,这将启动percona并为您创建数据库percona。这一切都由
- 在此处添加入口点脚本https://github.com/docker-library/percona/blob/master/5.7/Dockerfile#L65
- 不要忘记在映像构建期间复制脚本https://github.com/docker-library/percona/blob/master/5.7/Dockerfile#L63
- 然后在图像启动期间,您的ENV变量将导致此事件触发:https : //github.com/docker-library/percona/blob/master/5.7/docker-entrypoint.sh#L91
当然,您可以随心所欲地做任何事情。例如,这将配置一个常规的门户图像: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
因此,您会看到,切入点策略非常普遍且功能强大,我想尽可能地走这条路。
c)衍生图像
也许是出于“完整性”(源自图像的策略)的考虑,因此您将基于“ myapp”的图像作为基础,并为安装X创建了新图像
from myappCOPY my.ini /etc/mysql/my.iniCOPY application.yml /var/app/config/application.yml
并将此图像称为myapp:x-显而易见的问题是,与a)相比,您最终拥有很多图像,而a)它的可移植性更高。
希望能有所帮助



