O Docker Compose é uma ferramenta para executar aplicações multi-containers, conforme a documentação do site oficial do Docker (https://docs.docker.com/compose/overview/).
Imagine que você tem 4 Dockerfiles, um para cada aplicação que irá usar um container diferente. Você teria que “rodar” os 4 Dockerfiles para subir essas aplicações. Com o Docker Compose você define tudo isso em um único arquivo, o docker-compose.yml, ou seja, você cria e inicia todos os seus serviços com a configuração que você definiu para cada serviço com um único comando.
Para fazer a instalação do Docker Compose é necessário fazer o download no Github oficial do docker compose: https://github.com/docker/compose/releases . No momento dessa postagem, a versão mais atual é a v1.13.0
O comando para instalar/atualizar para essa versão é:
# curl -L https://github.com/docker/compose/releases/download/1.13.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
# chmod +x /usr/local/bin/docker-compose
Depois de instalado, como exemplo, vamos fazer um docker-compose.yml que irá subir 2 containers: Um container com o MySQL 5.7 e o outro container com o WordPress mais atual disponível no Docker Hub. Vamos criar um arquivo .env com as variáveis utilizadas nas configurações desses dois serviços. Lembre-se de criar um diretório para esse dois arquivos.
Nome do arquivo: docker-compose.yml
version: ‘3’
services:
db:
image: mysql:5.7
volumes:
– db_data:/var/lib/mysql
restart: always
env_file:
– .env
wordpress:
depends_on:
– db
image: wordpress:latest
ports:
– “8000:80”
restart: always
env_file:
– .env
volumes:
db_data:
Agora vamos criar o arquivo com as variáveis de ambiente dentro do arquivo .env
Nome do arquivo: .env
#Variáveis MYSQL
MYSQL_ROOT_PASSWORD=wordpress
MYSQL_DATABASE=wordpress
MYSQL_USER=wordpress
MYSQL_PASSWORD=wordpress
#Variáveis WORDPRESS
WORDPRESS_DB_HOST=db:3306
WORDPRESS_DB_PASSWORD=wordpress
Com os dois arquivos prontos, vamos executar o docker compose:
# docker-compose up -d
Esse comando executará o arquivo docker-compose, baixar as imagens base, subir dois containers, um com o wordpress e outro com mysql.
A imagem abaixo é um resumo do que foi feito até agora com o Docker Compose e verificando se as imagens e containers estão funcionando.
Agora vamos detalhar o que foi usado no Docker Compose acima.
- VERSION: é onde definimos qual a versão do Docker Compose File que estamos usando. A versão mais atual é a versão 3;
- SERVICES: é o nome do serviços que vamos criar. Serve para diferenciar quais containers estarão no docker-compose.yml;
- IMAGE: Determina imagem será usada como base para a criação do container. Semelhante ao FROM do Dockerfile;
- VOLUME: Faz a montagem dos volumes no container;
- RESTART: Determina quando o container será reiniciado. No nosso caso, será sempre reiniciado independente do status da saída do container. Para ler sobre as outras opções, clique aqui para ler ir ao Docker Docs.
- ENV_FILE: Informa que há um arquivo com as variáveis de ambiente que serão usadas nos serviços executados nos containers;
- DEPENDS_ON: Informa a ordem de dependência dos containers. Por exemplo, o container do wordpress só será iniciado após a criação do container do banco de dados;
- PORTS: Expõe as portas do host e do container, em ordem;
Outras opções para utilização no docker-compose.yml:
- BUILD: São opções para aplicar no momento da compilação do compose. Também é possível definir um diretório e compilar os arquivos dentro desse diretório, incluindo Dockerfiles;
- COMMAND: Semelhante ao CMD do Dockerfile, executa um comando dentro do container;
- CONTAINER_NAME: Informa o nome do container;
- DNS: Informa o endereço do servidor DNS;
- DNS_SEARCH: Informa o Search Domain;
- DOCKERFILE: Deve ser usado no BUILD para informar a utilização de um Dockerfile;
- ENTRYPOINT: Informa qual o processo principal do container;
- ENVIRONMENT: Adiciona variáveis de ambiente. Semelhante ao ENV_FILE, mas sem criar o arquivo .env;
- EXPOSE: Expõe a porta do container;
- EXTERNAL_LINKS: Cria links com containers criados fora do arquivo do Docker Compose;
- EXTRA_HOSTS: Adiciona o mapeamento de hostnames dentro do arquivo /etc/hosts do container;
- HEALTHCHECK: Define como será testado o estado do container. É preciso determinar o teste que será realizado, o período, o timeout da resposta do teste e o número de tentativas;
- LABELS: Adiciona informações de metadados no container;
- LINKS: Cria links com containers que estão dentro do Docker Compose;
- LOGGING: Configura os logs para um serviço de logs;
- NETWORK_MODE: Define qual o modo de rede o container irá usar;
- SYSCTLS: Configura informações relacionadas no Kernel para o container;
Para uma relação completa de todos os argumentos e como utilizá-los, basta ir à página oficial da documentação do docker.
Espero que tenham gostado das postagens e em breve postarei mais informações sobre Docker.
Ao som de: Primus – Wynona’s Big Brown Beaver