Alisson Machado
04 June 2016

Docker Básico

Opa! Esse é um post para mostrar os comandos básicos para administrar containers em docker. O Docker é uma ferramenta criada para gerenciar containers, os desenvolvedores pegaram o LXC e o GIT misturaram as duas coisas e acabou saindo essa tecnologia, que por sinal é muito legal e útil. Qual o objetivo do Docker? Fazer o deploy de aplicações de forma mais confiável. Como ele faz isso? Quando é realizado o deploy de uma aplicação, são necessárias uma série de configurações, como por exemplo: - Dependências do Sistema Operacional - Dependência de bibliotecas da aplicação - Permissões de Arquivos e Pastas - Criação de Usuários e Grupos - Mover,Apagar ou Renomear Arquivos Esses são só alguns exemplos de coisas que talvez precisem ser realizadas durante o deploy de uma aplicação, pode ser também que nenhuma delas seja necessária. Mas como o Docker resolve isso? Com o Docker é possível fazer o deploy de uma aplicação dentro de um container, fazer todos os testes possíveis e depois mandar o container inteiro para o servidor de produção, assim você pode garantir que tudo está funcionando, uma vez que foram enviadas todas as alterações citadas acima. Dessa forma o ambiente já vai configurado e o seu deploy fica muito mais confiável. Como isso é feito? Normalmente é utilizado um cara chamado registry que é onde você hospeda as imagens do seus containers, o próprio docker disponibiliza um público para que você possa utilizar gratuitamente, para acessa-lo é só acessar esse endereço: https://hub.docker.com/. Mas você também pode ser o seu próprio registry internamente. Bom vamos aos comandos do docker para que você possa entender como isso é feito. Para instar o docker na sua máquina basta seguir as instruções no site oficial: https://docs.docker.com/engine/installation/ No meu caso, eu uso uma distro linux Debian 8, para instalar o Docker foram executadas as seguintes instruções: Todos os comandos abaixo foram executados como root, caso você não esteja com esse usuário certifique-se de digitar sudo na frente dos comandos.
apt-get purge lxc-docker*

apt-get purge docker.io*

apt-get update

apt-get install apt-transport-https ca-certificates -y

apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D

echo "deb https://apt.dockerproject.org/repo debian-jessie main" > /etc/apt/sources.list.d/docker.list

apt-get update

apt-get install docker-engine -y

service docker start

Para criar um container, você pode digitar a seguinte instrução:
docker run -ti --name teste --hostname teste ubuntu /bin/bash
Feito isso você já estará dentro do container, o seu terminal deve ter ficado da seguinte maneira:
root@teste:/# 
Isso significa que você já está dentro do container. Explicando alguns parâmetros. -t Esse parâmetro definir que você quer um tty no seu container, para que você possa digitar os comandos. -i Esse é de interative, para você poder interagir com o tty que foi dado ao seu container. Existe também o parâmetro -d que pode ser passado em conjunto com o -ti, esse parâmetro signfica detach, ou seja, ele desprende o container do seu terminal, assim o seu container fica sendo executado em background e você não entra direto na shell dele. Para sair do container você precisa digitar CTRL+P CTRL+Q, assim você sai do container e o mantém em execução, caso você execute um CTRL+D que é o que fazemos quando queremos sair de um terminal, você será desconectado do container e ele será parado automaticamente. Para ver os containers em execução digite a seguinte instrução:
docker ps
Caso você queria ver os containers também parados adicione a opção -a.
docker ps -a
Quando executado o comando acima, você terá uma saída como essa:
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                          PORTS               NAMES
b517bd4dc3d1        ubuntu              "/bin/bash"         5 minutes ago       Exited (0) About a minute ago    
Sempre que for executar uma instrução em um determinado container, pode-se utilizar tanto o CONTAINER ID quando o NAME do container. Caso você tenha parado o container sem querer utilizando o CTRL+D, para faze-lo voltar a funcionar digite o seguinte comando:
docker start teste
No comando acima você pode tanto usar teste que é o NAME do container quando o ID do container, que no meu caso é b517bd4dc3d1. Para executar um comando dentro de um container, você pode utilizar a seguinte instrução:
docker exec -ti teste cat /etc/hosts
O comando será executado e você voltará ao terminal da máquina host. Caso você queira abrir uma shell para digitar vários comandos você pode fazer da seguinte maneira:
docker exec -ti teste /bin/bash
Existe também uma opção attach para o container, por exemplo:
docker attach teste
Essa instrução faz com que você volte para o comando executado quando criado o container, no nosso exemplo foi executado o /bin/bash, então você terá uma shell, mas poderia ter sido executado um python /opt/teste.py, então nesse caso você não teria uma shell e o seu terminal ficaria travado. Caso você queira ver todos os comandos que foram executados dentro de um container em execução, você pode executar a seguinte instrução:
docker logs teste
Pode-se ver também o consumo de um container utilizando a instrução abaixo:
docker stats teste
Ou até mesmo ver os processos que ocupam mais ciclos da CPU:
docker top teste
Uma vez que você fez todas as configurações dentro do seu container, pode-se gerar uma imagem dele para que o próximo container gerado a partir dessa imagem tenha as mesmas configurações. Para isso executa o seguinte comando:
docker commit teste imagem_teste
Será gerada uma imagem baseada no container especificado. Para ver a lista de imagens que você possui, digite a seguinte instrução:
docker images
A saída do comando será parecida com essa:
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
imagem_teste        latest              f0ad3b913e94        3 seconds ago       187.9 MB
Agora você pode enviar a sua imagem para o docker hub, para isso a primeira a coisa a se fazer é dar uma tag para a sua imagem com o seu login do docker hub e o nome da imagem, por exemplo:
docker tag imagem_teste alissonmenezes/imagem_teste:latest
Isso definiu que a minha imagem_teste possui a tag alissonmenezes/imagem_teste:latest ou seja, é a última versão da imagem. Antes de enviar a sua imagem para o docker hub, é necessário efetuar o login, para isso digite a seguinte instrução:
docker login --username alissonmenezes --email=alisson.machado@responsus.com.br
Será solicitada a senha no terminal, uma vez informada e correta será exibida a seguinte mensagem:
WARNING: login credentials saved in /home/wally/.docker/config.json
Login Succeeded
Agora para envia-la para o docker hub você precisa passar a tag e não o nome da imagem, ficando o comando da seguinte forma:
docker push alissonmmenzes/imagem_teste
Uma vez terminado o push para o hub.docker.com, qualquer pessoa pode baixa-la executando o seguinte comando:
docker pull alissonmmenzes/imagem_teste
Agora você pode deletar o seu container utilizando o seguinte comando:
docker stop teste
docker rm teste
É necessário parar o container antes de deleta-lo. O backup da imagem já foi feito no docker hub, então pode ser deletado também:
docker rmi imagem_teste
E é isso ai. Valeu \o