Oi, pessoal!
Seguindo nossa série de artigos sobre as ferramentas do ecossistema Docker, hoje veremos um pouco mais sobre o Docker Compose, uma ferramenta que vai agilizar no deploy de seu ambiente, utilizando uma forma simples, clara e padronizada.
O Docker Compose é uma ferramenta para a criação e execução de múltiplos containers de aplicação. Com o Compose, você usar um arquivo do tipo yaml para definir como será o ambiente de sua aplicação e usando um único comando você criará e iniciará todos os serviços definidos.
O Compose é ótimo para desenvolvimento, testes e homologação, bem como para melhorar seu fluxo de integração continua. Por exemplo:
- Em ambiente de desenvolvimento: Você pode utilizar ele para simular todo o ambiente de produção, ou seja, precisando de serviço redis, php, mysql? Basta definir isso em um arquivo .yml e quando você executar o docker-compose up, todo esse ambiente estará disponível para você, todas as dependências que sua stack precisa estarão configuradas e disponíveis para uso. Isso sem contar que este ambiente poderá ser isolado, sem depender ou prejudicar o trabalho dos demais da equipe.
- Automação de testes: Uma das premissas básicas para desenvolvimento e integração contínua é ter uma base de testes automatizada, isso para garantir qualidade e agilidade na entrega de novos releases de sua aplicação. Pensando nisso, você pode utilizar o Docker Compose para criar sua própria suite de testes, e precisando apenas executar um docker-compose up para testar os 50, 100, ou 200 requisitos que você definiu.
Para utilizar o docker-compose você precisa ter em mente que será necessário seguir essas três etapas:
- Definir o ambiente necessário para sua aplicação utilizando um Dockerfile (que pode ser reproduzido em qualquer lugar que tenha Docker instalado);
- Definir no arquivo .yml quais serviços são essenciais para sua aplicação e a relação entre elas;
- Executar o comando docker-compose up para que seu ambiente seja criado e configurado.
Fácil, certo?! Vamos praticar?
Instalação
Bem simples, basta executar o seguinte comando (caso Linux). Se você estiver utilizando em Windows via Docker ToolBox, você já terá disponível o docker-compose. Vamos lá:
curl -L https://github.com/docker/compose/releases/download/1.5.2/docker-compose-`uname -s`-`uname -m` \ > /usr/local/bin/docker-compose
Depois:
chmod +x /usr/local/bin/docker-compose
Compose eu escolho você
Vamos testar com um WordPress. É fácil:
- Criar um diretório de trabalho (mkdir /my-app);
- Faça download do WordPress: cd /my-app; curl https://wordpress.org/latest.tar.gz | tar -xvzf –
- Criar um arquivo Dockerfile com o seguinte código:
FROM orchardup/php5 ADD . /app
- Criar um arquivo my-app.yml com o código:
web: build: . command: php -S 0.0.0.0:8000 -t /my-app ports: - "80:8000" links: - db volumes: - .:/my-app db: image: orchardup/mysql environment: MYSQL_DATABASE: wordpress
Certifique-se de que seu wp-config esteja parecido com este:
<?php define('DB_NAME', 'wordpress'); define('DB_USER', 'root'); define('DB_PASSWORD', ''); define('DB_HOST', "db:3306"); define('DB_CHARSET', 'utf8'); define('DB_COLLATE', ''); define('AUTH_KEY', 'put your unique phrase here'); define('SECURE_AUTH_KEY', 'put your unique phrase here'); define('LOGGED_IN_KEY', 'put your unique phrase here'); define('NONCE_KEY', 'put your unique phrase here'); define('AUTH_SALT', 'put your unique phrase here'); define('SECURE_AUTH_SALT', 'put your unique phrase here'); define('LOGGED_IN_SALT', 'put your unique phrase here'); define('NONCE_SALT', 'put your unique phrase here'); $table_prefix = 'wp_'; define('WPLANG', ''); define('WP_DEBUG', false); if ( !defined('ABSPATH') ) define('ABSPATH', dirname(__FILE__) . '/'); require_once(ABSPATH . 'wp-settings.php');
- O que falta? docker-compose up no diretório onde você criou o Dockerfile e o my-app.yml.
Agora é só acessar: http://ipdamaquina e prosseguir com a instalação do Woprdress normalmente. O que o Compose fez então? No passo 3, nós criamos um arquivo Dockerfile contendo a descrição da imagem que queremos criar e que será utilizada como base para o nosso ambiente.
No passo 4, nós definimos qual era esse ambiente (veja que definimos one container para atender requisições web e um banco de dados). Quando executamos o docker-compose up, ele criará a imagem baseado no Dockerfile e criará os containers de serviços que definimos no my-app.yml.
O mais legal é você pode escalar seu ambiente, ter mais containers web. Para isso, docker-compose scale web=5 e o Compose criará e iniciará cinco containers do serviço web que definimos no my-app.yml.
Alguns dados importantes sobre o Docker Compose:
- O Compose preserva todos os volumes atribuídos aos seus serviços, por exemplo, quando você executa o docker-compose up, se você já tiver algum outro container utilizando o volume informado, o Compose copiará o volume do container antigo para o novo container, sem perder nenhuma informação.
- O Compose recriará apenas containers cujas configurações foras modificadas, caso contrário ele se baseará nas configurações que ele já tem armazenada em cache – isso é muito útil, principalmente, para provisionar e escalar seu ambiente de forma muito mais rápida.
Você ainda pode utilizar o Docker Compose juntamente com o Docker Machine e provisionar seu ambiente em qualquer lugar que precisar, isso é ainda mais útil para quem tem seu serviço de infraestrutura terceirizado com outros provedores (AWS, Digital Ocean, etc).
Gostou? Ótimo! Deixe seu feedback para que possamos melhorar cada vez mais.