【问题标题】:Simple docker containers: Build dedicated image or mount config as volume?简单的 docker 容器:构建专用映像或将配置挂载为卷?
【发布时间】:2017-06-08 14:51:55
【问题描述】:

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

所以我将这个架构为 4 个容器 (visualisation):

  • “magento”容器,使用内部项目特定的图像。
  • “wordpress”容器,使用内部项目特定图像。
  • 运行mysql:5.6 的“db”容器,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/

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

【问题讨论】:

  • 这里有错字:FROM nginx:aline (aline=>alpine)
  • 啊,不错。谢谢。

标签: docker docker-compose dockerfile docker-stack


【解决方案1】:

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

ADD nginx.conf /etc/nginx/

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

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

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

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

【讨论】:

  • 谢谢,这是有道理的。我今天一直在玩 Docker Cloud;看到堆栈是如何定义和上下旋转的,我绝对理解你在说什么 re:可移植性:我在 Docker Cloud 中运行堆栈所需要做的就是传入docker-compose.yml。如果我的部署过程(用于按需图像)还需要我对各种额外的配置值进行 scp 处理,而不是仅仅将它们烘焙进去,那将是一整层额外的麻烦。
猜你喜欢
  • 2018-10-29
  • 2021-09-17
  • 2014-12-08
  • 2017-01-31
  • 1970-01-01
  • 1970-01-01
  • 2014-10-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多