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.



