【问题标题】:Which is better to create docker-compose.yml file创建 docker-compose.yml 文件哪个更好
【发布时间】:2019-12-27 11:08:06
【问题描述】:

我有两个web应用,都是通过域名访问的,nginx作为代理,创建docker-compose.yml文件有两种方法

  1. 只创建一个包含所有应用程序配置的 docker-compose.yml 文件,如下所示
webapp1:
  image:nodejs
  command: node app.js
webapp2:
  image:nodejs
  command: node app.js
nginx:
  image:nginx
  ports:
    - "80:80"
  depends_on:
    - webapp1
    - webapp2
  1. 创建三个 docker-compose.yml 文件,如下所示

webapp1

webapp1:
  image:nodejs
  command: node app.js

webapp2

webapp2:
  image:nodejs
  command: node app.js

nginx

nginx:
  image:nginx
  ports:
    - "80:80"

哪种方法更好?我更喜欢第二种方法,因为web应用程序会经常更换,如果我使用第一种方法,可能会影响其他应用程序,第二种方法不会出现这个问题。

如果我使用第二种方法,这里不能使用如何链接nginx与webapp1、webapp2、depends_on。有什么想法吗?

更新:webapp1 和 webapp2 之间没有关系,我只想在一台服务器上运行它们。

【问题讨论】:

    标签: docker nginx docker-compose


    【解决方案1】:

    您应该更愿意为应用程序及其所有依赖项编写一个docker-compose.yml 文件。

    正如您所注意到的,喜欢这个的最直接原因是您可以运行一次docker-compose up 并获得整个应用程序堆栈。使用单独的 Compose 文件,您不仅需要为每个服务运行一次该命令,而且让它们相互通信的布线也很棘手。

    我不会特别担心较大的 Compose 文件中的部分会影响其他容器堆栈。标准的微服务风格是不同的服务不应该共享存储,在 Docker 中,每个服务运行一个数据库很简单,所以每个 Compose 文件应该能够完全独立,并且在一个文件中重新启动(一些)服务应该'不会影响其他任何地方。

    最后,就更改时重新部署容器而言,您的优势在于 (a) 如果没有任何更改,则重新运行 docker build 非常快,并且如果您的上游依赖项没有更改,则仍然非常快(例如,您的package.json 未更改),并且(b)重新运行docker-compose up -d 只会影响以某种方式更改的容器。比如你

    docker-compose up --build -d
    

    这不会影响数据库容器等未更改的内容,如果您没有更改某些特定的应用程序组件,它仍会重新构建,但您最终会得到相同的映像。

    【讨论】:

    • webapp1和webapp2没有关系。例如。 webapp1 是一个网站,webapp2 是另一个网站。
    • 那么没有特别的理由将它们合并到一个文件中。
    • 作为两者的代理,我可以使用docker run -p 80:80 --link webapp1:webapp1 --link webapp2:webapp2 nginx,但是在nginx的docker-compose.yml中,nginx应该如何与它们关联呢?
    猜你喜欢
    • 1970-01-01
    • 2020-08-02
    • 2020-07-06
    • 2022-07-20
    • 2018-05-28
    • 2023-01-07
    • 2022-08-08
    • 2022-11-04
    • 2020-08-09
    相关资源
    最近更新 更多