简单的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证书,数据库密码等