DevSecOpsARTIGO

Conhecendo a ferramenta Docker Compose – Parte 02

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.

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:

  1. Definir o ambiente necessário para sua aplicação utilizando um Dockerfile (que pode ser reproduzido em qualquer lugar que tenha Docker instalado);
  2. Definir no arquivo .yml quais serviços são essenciais para sua aplicação e a relação entre elas;
  3. 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:

  1. 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.
  2. 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.

Entusiasta Open Source, trabalha atualmente como Container Specialist na Umbler, seu principal foco é ir atrás de ideias novas e torná-las realidade por meio de soluções simples e eficientes.​ É autor também no site Mundo Docker (www.mundodocker.com.br)

Ver perfil