简单 docker 容器:构建专用映像或将配置装载为卷?

Simple docker containers: Build dedicated image or mount config as volume?

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

所以我将其设计为 4 个容器 (visualisation):

我想让事情简单化,避免构建不必要的自定义图像,但在 "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证书、数据库密码等