logo

Dicas de Docker para Testers

Eu fiz um post sobre como montar uma imagem docker (precisa atualizar.. eu sei..), mas como você vai usar o docker no dia a dia? As vezes da problema na máquina virtual, as vezes da problema no boot, etc..etc..

Pensando nisso eu fiz esse apanhado de dicas do dia a dia para quem trabalha ou pretende trabalhar com docker (quem já trabalha sabe mas não custa validar).


Prefira o Docker ToolBox

Grande parte dos Testers que eu conheço usam Windows ou Mac.
Mesmo usando mac, prefira usar o Docker Toolbox ao invés de ser "badass" e sair instalando as coisas via brew independentemente.

Esse cara é um pacote que já inclui:

Se você usa mac, pense com carinho em parar de usar o boot2docker ... ele foi descontinuado e docker-machine está bem bonito :)

Acho que esse post já vale só por essa dica.. ela resolve grande parte dos problemas de configuração e integração e compatibilidade de versões de docker com virtual machine, etc..

Para maiores informações: https://www.docker.com/docker-toolbox

Para usuários Linux, o site do docker tem um passo a passo que você provavelmente deve conhecer https://docs.docker.com/engine/installation/ubuntulinux/


Economize no Docker-machine

Talvez outras pessoas com problemas mais complexos precisem separar mais as coisas, mas grande parte de nós mortais não precisa de muito. Supere o TOC e crie apenas uma docker-machine para rodar sua aplicação e dependências.

Se quer ter coisas separadas, então tenha containers separados (isso é tão simples usando docker-compose).

Lembre: Você está usando DOCKER e não VAGRANT


Variáveis de ambiente docker

Eu não sei como é em windows, mas no mac cada aba do shell é meio que independente, ou seja, se você rodou os exports em outra aba vai ter que rodar novamente sempre que abrir outra.
Por que não colocar isso no seu bash_profile? Eu admito que depois que eu comecei a fazer uso do bashprofile_ minha vida mudou :)

vim ~/.bash_profile  #ou qualquer outro editor de texto de sua preferência :)  

Adicione as linhas de start de sua máquina virtual e de export das variáveis de ambiente.
obs: caso ela já esteja ligada, não vai dar problema :)

#docker-machine
docker-machine start NOME_MÁQUINA_VIRTUAL  
eval "$(docker-machine env NOME_MÁQUINA_VIRTUAL)"  

Para usuários Windows, escreva um .bat para rodar isso:

start caminho/completo/docker-machine.exe env --shell cmd dev  
echo set DOCKER_TLS_VERIFY=1  
echo set DOCKER_HOST=tcp://192.168.99.101:2376  
echo set DOCKER_CERT_PATH=C:\Users\SEU_USUARIO\.docker\machine\machines\NOME_DA_SUA_MAQUINA  
echo set DOCKER_MACHINE_NAME=NOME_DA_SUA_MAQUINA  

O caminho do docker-machine provavelmente estará em algum lugar aqui dentro : "C:\Program Files\Docker Toolbox"

Você pode colocar esse arquivo .bat no para rodar no início do seu profile :)
(maiores informações de como fazer isso: http://www.addictivetips.com/windows-tips/where-is-startup-folder-how-to-edit-startup-items-in-windows-8/ )


Prefira o console

Sim, você pode abrir, iniciar, parar, etc sua docker machine via virtualbox mas faça um favor a você e a sua produtividade.
Seu ambiente em docker é uma atividade meio e não a fim.

Já que você colocou o start da sua máquina virtual e as variáveis de ambiente para rodar automaticamente por que ficar usando virtualbox?

Quer saber se sua máquina ainda está rodando de boa?

docker-machine ls  

Quer saber se seus containers estão rodando também?

docker-compose ps  

Quer dar stop start no docker-machine por qualquer motivo?

docker-machine restart SUA_MÁQUINA  

Acho que a subdica seria.. leia sempre o --help das aplicações :)


Economize Tabs e comandos

docker-compose up -d  

Pode parecer bem idiota para quem já conhece docker, mas quando eu comecei a usar docker, eu deixava rodando tudo aberto em primeiro plano. Quando queria procurar um log, eu ficava puto de não conseguir acessar fácil o log especifico do container do mysql (por exemplo).

O parâmetro -d da função up define que os containers deve rodar no background

Mas por que economizar comandos? Caso seu container não tenha feito build, ele faz o build automaticamente e sobe o container para você!


Entenda que seu containers são processos!

dica do @stefan: http://pt.slideshare.net/rheinwein/stop-being-lazy-and-test-your-software

Na antiga empresa que eu trabalhei, a equipe que eu fazia parte já estava em um nível que tanto o teste quanto o as aplicações a serem testadas já estavam em containers separados e 99% isolados de falhas (o 1% eu vou falar em seguida).

Tenha um container para alocar e rodar seus testes separado da sua aplicação :)


Cuidado com variáveis de ambiente

Se sua aplicação ou seu teste usam variáveis de ambiente, é possível que as definições do seu docker-compose.yml não sobrescreva as suas locais e provavelmente você terá alguns comportamentos bizarros.
A galera do docker não recomenda mais usar variáveis de ambiente, mas sim usar os links internos do próprio docker: https://docs.docker.com/compose/env/


Nem tudo são flores

Existe a possibilidade de seu container parar de funcionar ou você estragar alguma coisa sem querer querendo.
Você poderia debugar e procurar a raiz do problema, mas tem vezes que é mais fácil, rápido e prático simplesmente começar de novo... e o Docker-compose deixa isso mais fácil.
(cof cof...eu já fiz muito isso.)

docker-compose kill #parar seus containers  
docker-compose rm #remover seus containers  

Comandos acima sem o nome do container ira perguntar se você quer parar/remover todos.


Problemas de conexão

Você vai provavelmente esbarrar por alguns problemas de conexão para fazer pull das imagens, ou tentar se conectar com docker hub...

Não se desespere!

Isso acontece porque sua vm para de resolver os endereços corretamente e para solucionar esse problema você precisa reiniciar a sua maquina virtual.

docker-compose restart SUA_MAQUINA  

Compartilhe suas dicas também :)

Links:
https://www.eventials.com/locaweb/groups/testadores-2a-edicao/ > O Fantástico Mundo de Docker, com Stefan Teixeira

http://stefanteixeira.com.br/2015/03/17/comandos-essenciais-docker-monitoramento-containers/ > Docker Puro


Sobre o Autor: Leonardo Galani é Agile Tester, dev, gamer, dj and etc. Mantém o fórum http://agiletesters.com.br | http://leonardobg.com.br (profile)| http://lazytester.com (blog em inglês)
http://br.linkedin.com/in/leonardogalani/

comments powered by Disqus