Banco de Dados

9 jan, 2018

Docker Compose: O que é? Para que serve? O que come?

Publicidade

 

Docker Compose é o orquestrador de containers da Docker. E como funciona um orquestrador em uma orquestra? Ele rege como uma banda deve se comportar/tocar durante uma determinada apresentação ou música.

Com o Docker Compose é a mesma coisa, mas os maestros somos nós! Nós que iremos reger esse comportamento através do arquivo chamado docker-compose, semelhante ao Dockerfile, escrito em YAML (acrônimo recursivo para YAML Ain’t Markup Language) é um formato de codificação de dados legíveis por humanos, o que torna fácil de ler e entender o que um Compose faz! Mais informações na Wikipedia.

Um exemplo prático de como funciona o Docker Compose é: imagine que temos uma aplicação Java ou PHP e que essa aplicação depende de um banco de dados MySQL e, para disponibilizar essa aplicação na internet, queremos utilizar um proxy na frente. O cenário é bem típico e um cara de infraestrutura configura esse ambiente fácil em menos de um dia. Beleza, esse é o ponto!

Agora imagina que para cada cliente, precisamos realizar esse setup pelo menos umas três vezes: um para Desenvolvimento, Homologação e outro para Produção. Complicou um pouco, né?

Outro detalhe, se esses ambientes estão em cloud e existe uma Instância/VM para cada aplicação, isso pode gerar muito custo, recurso desperdiçado e tempo desnecessário gasto, sem contar o trabalho que dá para montar essa infra toda vez que surge um projeto novo. E no mundo de hoje, precisamos ser ágeis para entregar valor ao cliente.

Outra grande desvantagem desse processo é que ele é altamente manual, logo existe uma possibilidade de acontecer um erro humano.

Bom, falei isso tudo para entender qual a “dor” que tínhamos na infra e explicar como o Docker Compose pode ajudar nessa árdua tarefa!

O Compose File

Nesse arquivo Compose que mencionei no início do texto, descrevemos a infraestrutura como código e como ela vai se comportar ao ser iniciado. Se digo que preciso de um banco de dados para rodar minha aplicação Java/Php, descrevo isso no meu Compose e digo que minha aplicação depende do meu container de banco de dados MySQL para rodar.

Outra coisa legal, é que podemos definir o comportamento que o Docker vai ter caso um dos containers venha a falhar. Descrevo no Compose que, caso o banco de dados falhe por algum motivo, o Docker que suba outro imediatamente. Consigo isolar essas aplicações em uma rede separada e quais volumes essas aplicações vão utilizar para persistir os dados. Vamos subir todos esses serviços descritos no Compose com apenas um comando.

“Essa automatização é muito bacana, a forma que temos de orquestrar os serviços de forma declarativa!” (YAML™) Version 1.2.

A imagem abaixo ilustra como é um arquivo do Docker Compose e como declaramos os serviços:

O que consigo fazer no Compose?

Outro ponto interessante para comentar, são as variáveis de ambiente, podemos configurar no Compose usando o environment, passando as variáveis que serão usadas por nossa aplicação em determinado ambiente, quando os serviços estiverem subindo.

No caso do banco de dados em nosso exemplo, passamos o host, porta, usuário e senha do banco de dados que o WordPress vai usar para poder instalar e depois funcionar.

Em resumo, utilizando o Docker Compose, em vez de o administrador executar o docker run na mão para cada container e subir os serviços separados, linkando os containers das aplicações manualmente, temos um único arquivo que vai fazer essa orquestração e vai subir os serviços/containers de uma só vez. Isso diminui a responsabilidade do Sysadmin ou do desenvolvedor de ter que gerenciar o deploy e se preocupar em rodar todos esses comandos para ter a sua aplicação rodando com todas as suas dependências.

Neste link, temos um arquivo Docker Compose de exemplo que vamos executar para ver como funciona. Na prática, vamos usar o Play With Docker (ou simplesmente ‘PWD’) para testar o Docker Compose.

O PWD nada mais é que uma aplicação rodando o Docker com todos os serviços deste já instalados, simulando uma Vm Linux. Isso é conhecido como DIND (Docker in Docker) e tudo vai ser via navegador web, sem precisar instalar nada nas nossas máquinas para rodar o exemplo. Bacana, né? Agora chega de historinha e vamos ver esse cara funcionando.

Acessem este link.

Vamos ter uma tela semelhante a essa, então clique no botão <add New Instance> para lançar uma “VM” no PWD.

De posse desse terminal já podemos dar o primeiro comando, o Git Clone para clonar o repositório do Github.

A saída do comando vai ser semelhante a esta:

Agora precisamos entrar no diretório que baixamos do Git:

	cd wordpress-mysql-compose/

Após entrar no diretório, podemos listar os arquivos com o comando ls -l para ver o conteúdo desse diretório:

ls -l
1
ls -l

E por fim, estando no mesmo diretório do arquivo do docker-compose.yml, podemos rodar o comando que vai executar de fato o Compose:

docker-compose up

Inicialmente, o Docker vai baixar as imagens que vão ser usadas nesse compose. Pode demorar alguns minutos na primeira vez, depois o comando é bem rápido.

Rodando o comando dessa forma, o Docker joga todas a informações para a tela do terminal. Podemos colocar a flag -d para termos o terminal funcional, enquanto o compose roda em segundo plano:

docker-compose up -d

Como podemos ver se o Compose está rodando e se de fato a quantidade de containers que definimos e as portas que expomos está ok? Com o comando docker-compose ps.

docker-compose ps

Esse comando, como é possível ver na imagem, vai listar o nome da minha aplicação, os status desses serviços e as portas disponíveis para cada container.

OBS: Os comandos do Docker Compose só vão funcionar passando o caminho do diretório ou estando no mesmo diretório do arquivo do docker-compose.yml

Voltando: o legal do PWD é que assim que os containers sobem, as portas que definimos no compose aparecem disponíveis no Dashboard do PWD.

Abaixo, a porta 8000 disponível como link.

Quando clicar no link da porta, automaticamente o PWD redireciona para a aplicação, que no nosso caso é um WordPress.

Tela inicial da instalação do WordPress:

Após realizar o Wizard de instalação do WordPress, temos uma aplicação real funcionando em menos de 5 minutos. Esse é o barato de infraestrutura como código, containers e Docker!

Acessando o WordPress:

Links interessantes para estudo e usados na construção deste artigo:

Compose:

Dockerfile:

Docker WordPress:

WordPress:

PWD:

***

Este artigo foi publicado originalmente em: https://www.concrete.com.br/2017/12/11/docker-compose-o-que-e-para-que-serve-o-que-come/