DevSecOps

11 fev, 2016

Conhecendo a ferramenta Docker Compose – Parte 02

Publicidade

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.