Comandos básicos do Docker

Uma das vantagens do Docker é que você não precisa estar sempre reinventando a roda. Existem repositórios com milhares de imagens prontas para utilização. No Docker Hub você encontra a relação das imagens que podem ser utilizadas. As que estiverem marcadas como “Official”, foram enviadas e são mantidas pelos responsáveis daquele produto.

Antes de começar a explicar os comandos, vale a pena mostrar um conceito simples. Se você já ouviu falar de docker, então já ouviu falar de containers, certo?

Então, containers e imagens são mais ou menos a mesma coisa.
Um container é uma instancia da imagem e pode estar ativa ou não. Fazendo uma analogia com programação orientada a objetos, a imagem é a classe e o container é o objeto que foi instanciado desta classe.

 

Verificando se o Docker está instalado

Para testar se o docker foi instalado corretamente, utilize o comando:

docker -v

Se tudo estiver certo, você vai ver uma mensagem parecida com esta:

Docker version 18.09.2, build 6247962

 

Procurando uma imagem

Após instalar o Docker (seguindo as orientações do post anterior), você pode pesquisar por uma imagem seguindo os passos abaixo:

(Neste exemplo, vou baixar a imagem do nginx).

 

  1. Abra o prompt de comando;
  2. Digite o comando:
docker search nginx

O resultado será uma lista com as imagens que utilizam o nginx.
As informações listadas são: Nome, Descrição, Estrelas (stars, que seriam as notas dadas pelos usuários), se é oficial e se está configurada como autobuild.

Este resultado é o mesmo que você vai obter se pesquisar por nginx no site Docker Hub.

 

Baixando uma imagem

Para baixar uma imagem, utilizamos o comando pull.

No caso, meu objetivo é obter a imagem do nginx. Então o comando será:

docker pull nginx

Esta comando baixará a versão mais atual da imagem. Se for necessário, posso baixar uma versão específica, colocando a tag com o identificador da versão. Se a imagem que você quer já estiver no seu computador, então nada será baixado.

Exemplo: docker pull nginx:6 – vai baixar a versão 6.
Vale lembrar que a tag da versão pode ser estruturada de uma forma diferente. Confira esta informação no Docker Hub.

 

Observação: Se você receber um erro de autenticação ao tentar baixar uma imagem, isso (provavelmente) quer dizer que você fez login no seu Docker Desktop utilizando o seu endereço de email e ele precisa do ID.

Você consegue logar utilizando qualquer um dos dois: email ou id (nome de usuário que você criou no momento de fazer a conta), mas só consegue baixar as imagens se utilizar o ID. Sendo assim, faça log-off e depois login novamente no Docker Desktop, utilizando seu ID.

 

Verificando imagens que existem no PC

Para verificar quais imagens já existem no seu PC, utilizaremos o comando images.

Neste caso, basta utilizar a linha de comando:

docker images

Será apresentada uma lista com todas as imagens que existem no seu computador e as seguintes informações: nome do repositório, tag da versão, ID da imagem, quando foi criada e o tamanho dela.

 

Removendo imagens instaladas

Para remover uma imagem instalada no seu computador, podemos utilizar o comando rmi.

Assim como os outros comandos, este é bem simples. Para remover a imagem nginx do seu repositório local, basta utilizar:

docker rmi nginx

Até este momento, trabalhei apenas com as imagens. Hora de começar a executa-las.

 

Vou continuar utilizando a imagem do nginx nos próximos exemplos, mas como este post não é sobre o nginx em si, não vou entrar a funda nas configurações dele, ok?

 

Executando uma imagem

Para rodar uma imagem, utilizamos o comando run, mas ele pode exigir alguns parâmetros adicionais, dependendo do que você quer fazer. No caso, como vamos executar um servidor web, precisaremos do comando abaixo:

docker run --name my_nginx -d -p 8080:80 nginx

Neste comando, os parâmetros utilizados foram:

  • –name: o nome que você dará para esta instancia do nginx.
  • –d: indica que a imagem será executada em background (daemon)
  • –p: faz um redirecionamento de portas. Nele indicamos que todas as requisições que chegarem na porta 8080, da sua maquina local, deverão ser redirecionadas para a porta 80 do container que estamos criando.
  • nginx: imagem que será utilizada para criação deste container. Se ela não existir na sua maquina, o Docker vai baixa-la automaticamente.

 

Após executar o comando acima, você pode acessar o endereço http://localhost:8080 e verá a página de boas vindas do NGINX. Legal, não?

 

Verificando containers ativos

Como você pode rodar containers em background, é importante saber quais estão sendo executados no momento. Para isso, utilizamos o comando ps.

Comando:

docker ps

 

Isso vai retornar uma lista com: Id do container, qual a imagem utilizada, qual o comando de inicialização, quando ele foi criado, qual o status dele, as portas e os nomes.

Todavia, o comando acima mostra apenas os containers ativos. Para verificar todos os containers existentes, independente do status, adicione a flag -a ao comando acima.

Exemplo:

docker ps -a

 

Você também pode executar o comando docker ps para pegar apenas os ids dos containers com a flag -q.

Exemplo:
Apenas os ids dos containers ativos:

docker ps -q

 

Os ids de todos os containers:

docker ps -aq

 

Logando em um container

Você gerou um container a partir de uma imagem e agora, por alguma razão, precisa logar neste container. Sim, isso é possível e o comando exec existe para atender este propósito.

Primeiro você precisa do id do container que você deseja logar.

  1. Para isso, utilize o comando docker ps.
  2. Copie o valor da coluna container id do container que você quer logar
  3. Utilize o comando:
docker exec <id do container> -ti /bin/bash

No comando acima, a flag -ti indica que você vai inciar um terminal interativo e o /bin/bash indica qual tipo de shell você vai utilizar. Você pode substituir este valor por sh.

 

Após utilizar utilizar este comando, seu terminal vai mudar e indicar que você está dentro do container. Agora você consegue acessar e modificar todos os arquivos que estão naquele container. Para sair, utilize o comando exit.

 

Parando a execução de um container

Para fazer com que um container interrompa sua execução, utilize o comando stop.

Assim como no comando exec, para este você também vai precisar do id do container que deseja interromper.

docker stop <id do container>

 

Após executar este comando, o container vai parar e não será mais exibido no comando docker ps (mas vai aparecer no docker ps -a).

 

Parando imediatamente um container

Diferente do comando anterior, o comando kill vai encerrar abruptamente o container desejado. Isso pode causar o corrompimento de arquivos e outros problemas, dependendo do que estiver no container.

Para fazer este encerramento forçado, utilize o comando:

docker kill <id do container>

 

Iniciando um container

Nos comandos anteriores, nós paramos a execução de um container. Agora vou mostrar como fazer com que ele volte a ser executado.

O comando é:

docker start <id do container>

 

Se você executar o comando docker ps agora, vai perceber que o container está ativo e funcionando novamente.

 

Deletando um container

Antes de começar: Cuidado. Depois que você deletar o container, não tem mais volta.

Para deletar um container:

docker rm <id do container>

 

Para deletar todos os containers:

docker rm $(docker ps -aq)

 

No comando acima, utilizamos um comando aninhado. Sendo que o segundo (que está dentro do $() ) vai retornar todos os ids dos containers que serão removidos. Cuidado, ok?

Um detalhe importante: Este aninhamento de comandos funciona apenas no PowerShell. Se você tentar utilizar esta sintaxe no prompt de comando, não vai dar certo.

 

No próximo post, vou mostrar outros comandos.

The following two tabs change content below.
Arquiteto de Software e Desenvolvedor Backend (quase Fullstack), geralmente trabalho com C#, PowerShell, Python, Golang, bash e Unity (esse é mais por hobby). Estou sempre buscando algo novo para aprender, adicionando novas ferramentas ao meu cinto de utilidades.
Posted in Conhecimento Técnico, Dev, Docker and tagged , .