我正在整理一个docker-compose.yml
文件,为我正在处理的项目运行多项服务。该项目有一个Magento和Wordpress网站,位于同一个域下,“同一域”方面需要一个非常简单的nginx容器来将请求路由到任一服务。
所以我将这个架构设计为4个容器(visualisation):
mysql:5.6
的“db”容器,其中init db dumps挂载在/docker-entrypoint-initdb.d
。nginx:alpine
并在/etc/nginx/nginx.conf
处安装自定义配置的“路由器”容器。这用作反向代理,设置了两个位置指令。 location /
路由到“magento”,location /blog
路由到“wordpress”。我想保持简单并避免构建不必要的自定义图像,但在“路由器”的上下文中我不确定我所做的是最好的方法,或者如果这样做会更好特定的图像。
我倾向于将当前的自定义配置安装到nginx:alpine
容器中的方法,因为配置特定于正在运行的堆栈 - 它作为单个独立容器没有意义。
所以这两种方法没有自定义图像,我们在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/
是否有人支持/反对任何一种方法?
答案 0 :(得分:1)
如果你在'烘烤' nginx配置(你的第二种方法)
ADD nginx.conf /etc/nginx/
它使你的docker容器更加可移植 - 也就是说,它们可以在任何能够运行docker的服务器上下载和运行,它只会起作用。
如果您使用选项1,在运行时安装配置文件,那么您将一个依赖项传输到容器的外部。这使得它成为依赖关系,必须在docker的外部进行管理。
在我看来,最好在dockerfiles中放置尽可能多的依赖项,因为它使它们更具可移植性和更高的自动化(例如,非常适合CI管道)
在运行时安装文件是有原因的,这些通常以环境特定的设置为中心(尽管这些也可以在docker中很大程度上克服)或“敏感”。应用程序开发人员不应该或无法访问的文件。例如ssl证书,数据库密码等