Comandos básicos do Docker

Comandos básicos do Docker

Overview

Bem-vindo ao universo do Docker! Se você está iniciando ou já é um profissional querendo aprimorar seus conhecimentos, este post é para você. Vamos embarcar juntos nesta jornada que simplifica o desenvolvimento de software, explorando desde a essência de imagens e containers até comandos práticos para gerenciá-los. Prepare-se para desvendar o Docker Hub, executar o NGINX com facilidade e muito mais!

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.