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