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