Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How I can group containers in docker-compose?

I'm using this docker-compose.yml. And I wanna make simpler and inherrit configuration, if its possible.

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

I have 15 sites with same configuration. Can I make config simpler? Like this:

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

Or better?

Thank you!

like image 860
Ilya Key Avatar asked Aug 23 '16 11:08

Ilya Key


People also ask

What is a group of Docker containers called?

Docker relies on cgroups to control and isolate resource limits. A cluster is a group of machines that work together to run workloads and provide high availability.


1 Answers

UPDATE 31 Aug 2021 In the latest docker compose there's support for profiles https://docs.docker.com/compose/profiles/ so this problem would be perfectly solved by that new feature.


Another way is to create no-op services that depend on other services. For example, in the following docker-compose.yml I have two namespaces, dev for services needed when developing the app, and metrics for services related to visualizing app metrics (since I'm not interested instarting those when developing).

version: "3"
services:
  dev:
    image: monroe/noop
    depends_on: ["postgres", "keycloak"]
  metrics:
    image: monroe/noop
    depends_on: ["grafana"]
  postgres: ...
  keycloak: ...
  grafana: ...
like image 116
Anler Avatar answered Oct 24 '22 03:10

Anler