6

我正在整理一个docker-compose.yml文件来为我正在处理的项目运行多个服务。该项目有一个位于同一域下的 Magento 和 Wordpress 网站,“相同域”方面需要一个非常简单的 nginx 容器来将请求路由到任一服务。

所以我把这个架构成 4 个容器(可视化):

  • 一个“magento”容器,使用内部项目特定的图像。
  • 一个“wordpress”容器,使用内部项目特定的图像。
  • 一个“db”容器正在运行mysql:5.6,init db 转储安装在/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/

有人支持/反对这两种方法吗?

4

1 回答 1

2

如果您“烘焙” nginx 配置(您的第二种方法)

ADD nginx.conf /etc/nginx/

它使您的 docker 容器更具可移植性- 即它们可以下载并在任何能够运行 docker 的服务器上运行,并且可以正常工作。

如果您使用选项 1,在运行时挂载配置文件,那么您正在将您的依赖项之一转移到容器外部。这使它成为必须在docker之外管理的依赖项。

在我看来,最好将尽可能多的依赖项放在你的 dockerfiles 中,因为它使它们更便携和更自动化(例如,非常适合 CI Pipelines)

在运行时挂载文件是有原因的,这些通常集中在特定于环境的设置(尽管这些也可以在 docker 中很大程度上克服)或应用程序开发人员不应该或无法访问的“敏感”文件。例如 ssl 证书、数据库密码等

于 2017-06-08T15:49:34.100 回答