logo

Seu ambiente de teste com Docker

No mundo de dev, de tempos em tempos aparece algo bem legal que parece mágica.

O docker veio para ser um apanhado geral. Você entrega uma imagem(container) e pronto. É só rodar e sua aplicação está disponível para uso.

Da mesma forma que você sobe uma instância você a destrói. Talvez seja esse o grande motivo que o docker caiu na graça dos devs.

Uma maquina pode ter múltiplas instâncias dockers com versões de mysql e python diferentes em cada instância e elas não irão entrar em conflito (isso é lindo demais... até caiu uma lágrima..), ou seja, ele age como uma camada fina por cima do seu sistema operacional.

sugestão de @stefanteixeira

O @stefanteixeira mandou essa imagem que traduz bem a idéia dos containers.

No nível macro o docker funciona da seguinte forma:

And thats it!

TL:DR Po os caras fizeram um video introdutório! da uma assistida!


TL:DR2 Po! Eles fizeram um tutorial com linha de comando para você aprender como utilizar o garoto com as funções básicas .. por que será que eu estou fazendo esse post?! => https://www.docker.com/tryit/


Setup

Primeiro, crie sua conta aqui => https://hub.docker.com/account/signup/

Espero que seu inglês básico seja bom, pois eles explicam nos mínimos detalhes como instalar o client do docker => https://docs.docker.com/installation/#installation

Depois de criado e instalado, você pode rodar os seguintes comandos para ver se esta tudo ok.

boot2docker init  
#saídas do console no proceso de inicialização
boot2docker up  
#saida do console no processo de subir um instancia

Vai ser exibido qual IP e porta em que sua instância (container) irá subir.

Vamos dar um tempo e criar a imagem da sua aplicação.

Criando a imagem do seu aplicativo.

tl:dr3 http://docs.docker.com/reference/builder/

Provavelmente você quer saber como o docker pode te ajudar no dia a dia de teste, correto? bom, a partir daqui você vai precisar da ajuda do time de desenvolvimento da sua aplicação pois é preciso mapear toda e qualquer dependência que você tenha.

Vamos criar criar um arquivo de "receita" (dockerfile) para criar imagem da sua aplicação com as dependência que ela precisa.

nano Dockerfile  

Você pode usar outras imagens do docker como base para a sua.

Para exemplo, vou colocar uma aplicação simples em nodejs rodando.

Primeiro crie uma pasta separada onde vai ficar seu container.
Dentro da pasta crie um arquivo sem file_type (sem extensão) chamado dockerfile.

FROM ubuntu:14.04

RUN apt-get update  
RUN apt-get curl -y  
RUN curl -sL https://deb.nodesource.com/setup | sudo bash -  
RUN sudo apt-key add nginx_signing.key  
RUN apt-get update  
RUN apt-get install -y nodejs  
RUN apt-get install nginx  
RUN apt-get install git python-virtualenv  
RUN echo "daemon off;" >> /etc/nginx/nginx.conf  
RUN rm /etc/nginx/conf.d/default  
RUN mkdir -p /var/www  

Vou assumir que você não é muito familiarizado com ambiente linux, então vou explicar algum dos comandos:

Se tiver um tempo e alguns trocados sobrando, leia DEVOPS NA PRATICA => http://www.casadocodigo.com.br/products/livro-devops


WORKDIR /var/www  
RUN git clone https://github/enderecoApp app  
ADD meuDirConfig/ngninxConfig.conf /etc/nginx/conf.d/meuapp.conf  
ADD meuDirConfigs/scriptStartApp.sh /usr/bin/start_server  
RUN chmod +x /usr/bin/start_server

WORKDIR /var/www/app

EXPOSE 80

ENTRYPOINT /usr/bin/start_server  

Pronto, é só salvar o arquivo e mandar criar a imagem.

docker build -t docker_user_name/containerName .  

O parâmetro -t serve para tagear a imagem, melhorando a busca depois.

Agora é a hora de ir tomar um café...

Assim que a imagem do container estiver pronta, você pode rodar ele através do comando:

docker run -p 80:80 -d docker_user_name/containerName  

O parâmetro -d é para subir o container em background e o parâmetro -p serve para fazer a relação da porta privada para porta publica do container, que neste caso é a mesma.

Agora é só acessar o IP que o docker já mostrou no boot e pronto, pronto para acessar sua aplicação.

Também não deixe de conferir => http://docs.docker.com/articles/dockerfile_best-practices

Considerações

As possibilidades são muitas!

referências:


Este artigo não é final e está em constante mudança.

#todo:


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