如何在docker-compose中对容器进行分组?

19

我正在使用这个docker-compose.yml文件,如果可能的话,我想让配置更简单并且可以继承。

version: '2'

services:
    nginx-proxy:
        image: jwilder/nginx-proxy
        container_name: nginx-proxy
        ports:
            - "80:80"
        volumes:
            - /var/run/docker.sock:/tmp/docker.sock:ro

    web_one:
        container_name: "web_one"
        build:
            context: ./
            dockerfile: web.docker
        volumes:
            - ./../one:/var/www

        environment:
            - VIRTUAL_HOST=whoami_one.local
        links:
            - app_one
    app_one:
        container_name: "app_one"
        build:
            context: ./
            dockerfile: app.docker
        volumes:
            - ./../one:/var/www
        links:
            - db


    web_two:
        container_name: "web_two"
        build:
            context: ./
            dockerfile: web.docker
        volumes:
            - ./../two:/var/www

        environment:
            - VIRTUAL_HOST=whoami_two.local
        links:
            - app_two
    app_two:
        container_name: "app_two"
        build:
            context: ./
            dockerfile: app.docker
        volumes:
            - ./../two:/var/www
        links:
            - db

我有15个配置相同的网站。 我能简化配置吗?就像这样:

version: '2'

services:
    nginx-proxy:
        image: jwilder/nginx-proxy
        container_name: nginx-proxy
        ports:
            - "80:80"
        volumes:
            - /var/run/docker.sock:/tmp/docker.sock:ro

    one:
        extends:
            file: common-services.yml
        volumes:
            - ./../one:/var/www

        environment:
            - VIRTUAL_HOST=whoami_one.local

    two:
        extends:
            file: common-services.yml
        volumes:
            - ./../two:/var/www

        environment:
            - VIRTUAL_HOST=whoami_two.local

还有更好的选择吗?

谢谢!


你试过了吗?这在 https://docs.docker.com/compose/extends/#/understand-the-extends-configuration 中有详细说明。 - VonC
可以,但无法缩短代码。代码量相同。 - Ilya Key
除了 https://docs.docker.com/compose/extends/ 中所解释的内容外,我不知道还有什么其他的。 - VonC
1个回答

16

更新于2021年8月31日:最新的Docker Compose支持配置文件,详见https://docs.docker.com/compose/profiles/,该新功能完美地解决了这个问题。


另一种方法是创建依赖于其他服务的无操作服务。例如,在下面的docker-compose.yml中,我有两个命名空间,dev用于开发应用程序所需的服务,metrics用于与可视化应用程序指标相关的服务(因为我对在开发时启动这些服务不感兴趣)。

version: "3"
services:
  dev:
    image: tianon/true
    depends_on: ["postgres", "keycloak"]
  metrics:
    image: monroe/noop
    depends_on: ["grafana"]
  postgres: ...
  keycloak: ...
  grafana: ...

2
这个的另一个好解释在这里 - bcattle
2
monroe/noop 仓库已经不存在了。我使用了 tianon/true - Joel Mellon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接