简单的docker集装箱:build立专用的图像或assemblyconfiguration为卷?
我正在做一个docker-compose.yml
文件来为我正在处理的项目运行多个服务。 这个项目有一个Magento和WordPress的网站驻留在同一个域名下,这个“同域”方面需要一个非常简单的nginx容器来将请求路由到任一服务。
所以我把这个架构devise成4个容器( 可视化 ):
- 使用内部项目特定图像的“magento”容器。
- 一个“wordpress”容器,使用内部项目特定的图像。
- 运行
mysql:5.6
“db”容器,在/docker-entrypoint-initdb.d
上安装init db转储。 - 在
/etc/nginx/nginx.conf
运行nginx:alpine
“路由器”容器,自定义configuration。 这起到一个带有两个位置指令的反向代理的作用。 到“magento”的location /
路线,以及到“wordpress”的location /blog
路线。
我想保持简单,并避免构build不必要的自定义图像,但在“路由器”的背景下,我不确定我正在做什么是最好的方法,或者如果这将是一个项目特定的图像更好。
我倾向于将自定义configuration安装到nginx:alpine
容器中,因为configuration特定于正在运行的堆栈 – 作为单独的独立容器是没有意义的。
所以这两个方法,没有一个自定义图像,我们在docker-compose.yml
有以下docker-compose.yml
router: image: nginx:alpine networks: - projectnet ports: - "80:80" volumes: - "./router/nginx.conf:/etc/nginx/nginx.conf"
否则,我们有一个包含以下内容的Dockerfile
,正如我在互联网和其他StackOverflow响应中所看到的那样。
FROM nginx:alpine ADD nginx.conf /etc/nginx/
有没有人对两种方法有争论?
如果你'烘烤'nginxconfiguration(你的第二种方法)
ADD nginx.conf /etc/nginx/
它使你的docker容器更加便携 – 也就是说,它们可以在任何运行docker的服务器上下载和运行,并且只会工作。
如果您使用选项1,在运行时安assembly置文件,那么您将您的一个依赖关系传输到您的容器外部 。 这使得它必须在docker 之外进行pipe理。
在我看来,最好将尽可能多的依赖关系放在你的dockerfiles里面,因为它使得它们更加便携和自动化(例如,对于CIpipe道来说很好)
在运行时安装文件是有原因的,而且这些原因通常都是围绕环境特定的设置(尽pipedocker中也可以很好地解决这些问题),或者应用程序开发人员不应该或不能访问的“敏感”文件。 例如SSL证书,数据库密码等