Линковка Docker контейнеров с помощью Docker Compose

С помощью Docker Compose создаем файл YML с инструкциями о том, какие контейнеры запускать и как линковать их между собой.

# docker-compose -v
docker-compose version: 1.5.1


$ docker pull tomcat

$ docker history tomcat | grep -i expose


$ vi docker-compose.yml


tomcatapp:
  image: tomcat
  ports:
   - "8080"


// -d - to start your application in the background

$ docker-compose -f docker-compose.yml up -d

$ docker-compose -f docker-compose.yml ps


    Name             Command       State            Ports          
-------------------------------------------------------------------
tmp_tomcatapp_1   catalina.sh run   Up      0.0.0.0:32768->8080/tcp


$ docker-compose -f docker-compose.yml logs
$ docker-compose -f docker-compose.yml stop
$ docker-compose -f docker-compose.yml rm


$ curl localhost:32768


http://localhost:32768/


Посложнее пример

$ vi compose-ex2.yml

К сожалению у меня нет этого war


nginx:
  image: nginx
  links:
   - tomcatapp1:tomcatapp1
   - tomcatapp2:tomcatapp2
   - tomcatapp3:tomcatapp3
  ports:
   - "80:80"
  volumes:
   - nginx.conf:/etc/nginx/nginx.conf
tomcatapp1:
  image: tomcat
  volumes:
   - sample.war:/usr/local/tomcat/webapps/sample.war
tomcatapp2:
  image: tomcat
  volumes:
   - sample.war:/usr/local/tomcat/webapps/sample.war
tomcatapp3:
  image: tomcat
  volumes:
   - sample.war:/usr/local/tomcat/webapps/sample.war


$ vi nginx.conf


worker_processes 1;

events { worker_connections 1024; }

http {

    sendfile on;

    gzip              on;
    gzip_http_version 1.0;
    gzip_proxied      any;
    gzip_min_length   500;
    gzip_disable      "MSIE [1-6]\.";
    gzip_types        text/plain text/xml text/css
                      text/comma-separated-values
                      text/javascript
                      application/x-javascript
                      application/atom+xml;

    # List of application servers
    upstream app_servers {

        server tomcatapp1:8080;
        server tomcatapp2:8080;
        server tomcatapp3:8080;

    }

    # Configuration for the server
    server {

        # Running port
        listen [::]:80;
        listen 80;

        # Proxying the connections connections
        location / {

            proxy_pass         http://app_servers;
            proxy_redirect     off;
            proxy_set_header   Host $host;
            proxy_set_header   X-Real-IP $remote_addr;
            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header   X-Forwarded-Host $server_name;

        }
    }
}


$ export COMPOSE_FILE=compose-ex2.yml

$ docker-compose up -d

$ docker-compose ps

$ docker exec composetest_nginx_1 cat /etc/hosts

$ docker exec composetest_tomcatapp1_1 ip a

$ docker exec composetest_tomcatapp2_1 ip a

$ docker exec composetest_tomcatapp3_1 ip a

$ curl http://localhost/sample/

$ docker-compose stop


Еще 1 пример конфига

$ vi docker-compose.yml


django:
  image: username/image:latest
  command: python manage.py supervisor
  environment:
    RUN_ENV: "$RUN_ENV"
  ports:
   - "80:8001"
  volumes:
   - .:/project
  links:
   - redis
   - postgres

celery_worker:
  image: username/image:latest
  command: python manage.py celery worker -l info
  links:
   - postgres
   - redis

postgres:
  image: postgres:9.1
  volumes:
    - local_postgres:/var/lib/postgresql/data
  ports:
   - "5432:5432"
  environment:
    POSTGRES_PASSWORD: "$POSTGRES_PASSWORD"
    POSTGRES_USER: "$POSTGRES_USER"  

redis:
  image: redis:latest
  command: redis-server --appendonly yes


$ docker-compose up

или

$ docker-compose up --no-deps -d postgres

http://dou.ua/lenta/articles/docker/