Docker (Parte 1): Principais comandos para gerenciar seus containers

O objetivo desse artigo é mostrar um cheat sheet com exemplos de comandos usados no gerenciamento de containers Docker. Não apresentarei nenhum “case” dessa vez, quero apenas divulgar de forma simples os comandos e as explicações para ajudar as pessoas que estão iniciando com Docker. Vou mostrar até a parte de volumes em Docker, e nos próximos artigos irei abordar redes e um cluster com swarm.

Para começar, e para que você saia brincando com Docker, vamos iniciar com a instalação da ferramenta no sistema Ubuntu, é o ambiente que eu estou usando para instalar o Docker. Para isso, siga os passos abaixo:

Acesse a documentação aqui para a instalação do Docker. Vou deixar um comando para facilitar do seu lado:

$ curl -fsSL https://get.docker.com | bash

Agora vamos verificar a versão do Docker instalada:

$ docker version
Client: Docker Engine - Community
Version: 19.03.5
API version: 1.40
Go version: go1.12.12
Git commit: 633a0ea838
Built: Wed Nov 13 07:29:52 2019
OS/Arch: linux/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 19.03.5
API version: 1.40 (minimum version 1.12)
Go version: go1.12.12
Git commit: 633a0ea838
Built: Wed Nov 13 07:28:22 2019
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.2.10
GitCommit: b34a5c8af56e510852c35414db4c1f4fa6172339
runc:
Version: 1.0.0-rc8+dev
GitCommit: 3e425f80a8c931f88e6d94a8c831b9d5aa481657
docker-init:
Version: 0.18.0
GitCommit: fec3683

Antes dessa mudança tínhamos que usar, por exemplo,docker ps agora com a nova CLI ficou tudo “modelado”, acho que podemos dizer assim né!? Com a nova CLI, para listar os containers, usamos o comando docker container ls esse é apenas um exemplo de como ficou, outro exemplo é o docker run que agora mudou para docker container run

Para você entender o que mudou basta acessar o blog da Mandic, vale a leitura: Acesse aqui.

Vejamos alguns comandos que podemos utilizar na administração dos containers.

$ docker container ls (mostra os containers em execução).

docker container ls

$ docker container ls -a (mostra todos os containers, em execução, mortos, parados).

docker container ls -a

$ docker container run -ti hello-world (executa uma imagem hello-world com interatividade e conectado usando a opção -ti).

docker container run -ti hello-world

$ docker container attach (se conecta ao container).

$ docker container attach trusting_shamir (pode passar o nome do container ou o ID), e cai de novo dentro do container).

$ docker container exec -ti 18a58c41ebd1 ls / (executa um comando no container, nesse caso estou executando um ls no / do sistema)

docker container exec -ti 18a58c41ebd1 ls /

$ docker container stop angry_babbage (stoppa meu container). Eu passei o nome do container ao invés do ID.

$docker container start angry_babbage (inicia novamente o container).

$ docker container restart angry_babbage (reinicia o container)

$ docker container inspect 18a58c41ebd1 (mostra os detalhes do container, redes, volumes, variáveis). Veja um exemplo de saída:

docker container inspect 18a58c41ebd1

$ docker container pause 18a58c41ebd1 (pausa o container).

$ docker container unpause 18a58c41ebd (volta o estado do container).

$ docker container rm -f 18a58c41ebd1 (remove o container forçando com a opção -f).

$ docker container rm -f ee6 (podemos remover usando apenas as três letras iniciais do ID container que ele entende)

$ docker container stats 18a58c41ebd1 (mostra o uso de recursos consumidos pelo container)

docker container stats 18a58c41ebd1

Vamos agora criar um diretório local com o nome de “dockerfile-teste”. Acesse esse diretório e crie o arquivo “Dockerfile”. Adicione o seguinte texto no arquivo de “Dockerfile”:

  1 FROM debian
2
3 LABEL app="docker"
4 ENV DOCKER="testando"
5
6 RUN apt-get update && apt-get install -y stress && apt-get clean
7
8 CMD echo "criando teste de dockerfile"

Agora vamos fazer o “build” desse “Dockerfile” que acabamos de criar:

$ docker image build -t primeiro-teste-dockerfile:1.0 . (criar uma imagem)
docker image build -t primeiro-teste-dockerfile:1.0 .

Feito isso, vamos executar o container:

$ docker container run -d primeiro-teste-dockerfile:2.0

Tudo que existe dentro de um container (aplicações, documentos, arquivos) depois que removemos esse container, tudo será perdido. Com o uso desse recurso podemos montar os volumes para persistir os dados do container.

Vamos aos exemplos:

Crie um diretório em /opt com o nome de “projeto-volume” no seu sistema local:

$  mkdir /opt/projeto-volume

Agora vamos criar um container para exemplificar volumes bind. Siga o comando abaixo:

$ docker container run -ti --name projeto-volume1 --mount type=bind,src=/opt/projeto-volume,dst=/projeto-teste debian

Efetuamos a criação de um container com volume do tipo bind. Agora vou criar um arquivo dentro de /projeto-teste no container usando o comando “touch” touch teste2.txt vou agora sair desse container e ir no diretório que criei anteriormente que é o /opt/projeto-volume e pode ver que o arquivo está aparecendo aqui também.

Exemplo de volumes com Docker
$ docker volume ls
$ docker volume create projetos

Vamos usar o inspect para ver detalhes de volume:

$ docker volume inspect projetos 
[
{
"CreatedAt": "2020-01-08T14:04:17-03:00",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/projetos/_data",
"Name": "projetos",
"Options": {},
"Scope": "local"
}
]

Agora que sabemos o “mountpoint” do volume, podemos testar usando um container. Tudo que eu criar de dados dentro de /var/lib/docker/volumes/projetos/_data posso replicar em um container.

Veja o container de teste:

$ docker container run -ti --name amaury --mount type=volume,src=volumes-teste,dst=/teste debian

src: volumes-teste (nome do meu volume criado).
dst: diretório destino (nome do diretório de destino).

Vamos acessar o diretório “teste” que foi criado, feito o acesso podemos criar arquivos, diretórios e ver também que tudo que foi criado no “mountpoint” aparecerá aqui dentro desse diretório.

Podemos usar um comando que remove todos os volumes que não estão sendo usados por um container, que é o docker volume prune. Atenção que esse comando é perigoso, pode ser que você precise dos dados antes de remover o volume, então sempre é bom verificar que containers tem os dados antes de usar esse comando para deletar os volumes. Existe esse comando para container também, só para lembrar vocês. 😜

Isso é tudo pessoal, nos próximos artigos irei mostrar mais sobre Docker, fique de olho. #VAIIII

Passion for DevOps