简单 docker 容器:构建专用映像或将配置装载为卷?
Simple docker containers: Build dedicated image or mount config as volume?
我正在将一个 docker-compose.yml
文件整合到 运行 我正在处理的项目的多项服务中。这个项目有一个位于同一域下的 Magento 和 Wordpress 网站,"same domain" 方面需要一个非常简单的 nginx 容器来将请求路由到任一服务。
所以我将其设计为 4 个容器 (visualisation):
- 一个 "magento" 容器,使用内部项目特定图像。
- 一个 "wordpress" 容器,使用内部项目特定图像。
- A "db" 容器 运行ning
mysql:5.6
,初始化数据库转储安装在 /docker-entrypoint-initdb.d
。
- 一个 "router" 容器 运行ning
nginx:alpine
,自定义配置安装在 /etc/nginx/nginx.conf
。这用作设置了两个位置指令的反向代理。 location /
路由到 "magento",location /blog
路由到 "wordpress"。
我想让事情简单化,避免构建不必要的自定义图像,但在 "router" 的上下文中,我不确定我正在做的是最好的方法,或者那是否会更好关闭作为特定于项目的图像。
我倾向于将自定义配置安装到 nginx:alpine
容器中的当前方法,因为该配置特定于 运行ning 的堆栈——这没有意义一个独立的容器。
所以这两种方法,在没有自定义图像的情况下,我们在 docker-compose.yml
中有以下内容
router:
image: nginx:alpine
networks:
- projectnet
ports:
- "80:80"
volumes:
- "./router/nginx.conf:/etc/nginx/nginx.conf"
否则,我们有一个 Dockerfile
包含以下内容,正如我在互联网和其他 Whosebug 回复中看到的那样。
FROM nginx:alpine
ADD nginx.conf /etc/nginx/
有人对这两种方法有异议吗?for/against
如果你'bake in' nginx 配置(你的第二种方法)
ADD nginx.conf /etc/nginx/
它使您的 docker 容器更 便携 - 即它们可以下载并 运行 在任何能够 运行 宁 docker 它会正常工作。
如果您使用选项 1,在 运行 时安装配置文件,那么您正在将您的依赖项之一转移到容器的 外部 。这使其成为必须在 docker.
的 之外管理的依赖项
在我看来,最好将尽可能多的依赖项放入 docker 文件中,因为这样可以使它们更便携、更自动化(例如,非常适合 CI 管道)
在 运行 时加载文件是有原因的,这些通常以环境特定设置为中心(尽管这些在很大程度上也可以在 docker 内克服)或 'sensitive' 文件应用程序开发人员不应该或不能访问。例如ssl证书、数据库密码等
我正在将一个 docker-compose.yml
文件整合到 运行 我正在处理的项目的多项服务中。这个项目有一个位于同一域下的 Magento 和 Wordpress 网站,"same domain" 方面需要一个非常简单的 nginx 容器来将请求路由到任一服务。
所以我将其设计为 4 个容器 (visualisation):
- 一个 "magento" 容器,使用内部项目特定图像。
- 一个 "wordpress" 容器,使用内部项目特定图像。
- A "db" 容器 运行ning
mysql:5.6
,初始化数据库转储安装在/docker-entrypoint-initdb.d
。 - 一个 "router" 容器 运行ning
nginx:alpine
,自定义配置安装在/etc/nginx/nginx.conf
。这用作设置了两个位置指令的反向代理。location /
路由到 "magento",location /blog
路由到 "wordpress"。
我想让事情简单化,避免构建不必要的自定义图像,但在 "router" 的上下文中,我不确定我正在做的是最好的方法,或者那是否会更好关闭作为特定于项目的图像。
我倾向于将自定义配置安装到 nginx:alpine
容器中的当前方法,因为该配置特定于 运行ning 的堆栈——这没有意义一个独立的容器。
所以这两种方法,在没有自定义图像的情况下,我们在 docker-compose.yml
router:
image: nginx:alpine
networks:
- projectnet
ports:
- "80:80"
volumes:
- "./router/nginx.conf:/etc/nginx/nginx.conf"
否则,我们有一个 Dockerfile
包含以下内容,正如我在互联网和其他 Whosebug 回复中看到的那样。
FROM nginx:alpine
ADD nginx.conf /etc/nginx/
有人对这两种方法有异议吗?for/against
如果你'bake in' nginx 配置(你的第二种方法)
ADD nginx.conf /etc/nginx/
它使您的 docker 容器更 便携 - 即它们可以下载并 运行 在任何能够 运行 宁 docker 它会正常工作。
如果您使用选项 1,在 运行 时安装配置文件,那么您正在将您的依赖项之一转移到容器的 外部 。这使其成为必须在 docker.
的 之外管理的依赖项在我看来,最好将尽可能多的依赖项放入 docker 文件中,因为这样可以使它们更便携、更自动化(例如,非常适合 CI 管道)
在 运行 时加载文件是有原因的,这些通常以环境特定设置为中心(尽管这些在很大程度上也可以在 docker 内克服)或 'sensitive' 文件应用程序开发人员不应该或不能访问。例如ssl证书、数据库密码等