Tutorial de comandos do Docker | Introdução ao Docker
Comandos essenciais do Docker para iniciantes
Este tutorial detalhado do Docker aborda os comandos do Docker essenciais, como criar um novo contêiner, executar o contêiner, remover um contêiner e assim por diante. Além disso, este guia também explica como construir sua própria imagem Docker personalizada a partir de um contêiner existente e como remover contêineres e imagens. Sem mais delongas, vamos começar com o uso básico do Docker!
Etapas de instalação do Docker
O Docker pode ser instalado na maioria dos sistemas operacionais Linux modernos. Se você ainda não instalou o Docker, consulte os seguintes guias:
- Instale o Docker Engine e o Docker Compose no AlmaLinux, CentOS, Rocky Linux
- Como instalar o Docker e o Docker Compose no Ubuntu
O que é imagem Docker e contêiner Docker?
Antes de começar a usar o Docker, deixe-me esclarecer o que é uma imagem do Docker e um contêiner do Docker.
Uma imagem Docker é o arquivo que decide como um contêiner deve se comportar, e Docker Container é o estágio de execução ou parada de uma imagem Docker.
Os contêineres são isolados do restante dos arquivos do host.
Quando executamos um contêiner Docker, ele usa um sistema de arquivos isolado fornecido por uma imagem Docker. A imagem Docker consiste em tudo o que é necessário para executar um aplicativo – todas as dependências, configurações, scripts, binários, etc.
A imagem também contém outras configurações para o contêiner, como variáveis de ambiente, um comando padrão para execução e outros metadados.
Introdução ao Docker no Linux
Todas as etapas abaixo foram testadas nas edições de servidor Ubuntu 22.04, 20.04 e 18.04 LTS. Entretanto, as etapas fornecidas nas seções subsequentes são comuns a todas as plataformas Linux. Por exemplo, você também pode executar os mesmos comandos em um sistema baseado em RHEL (por exemplo, AlmaLinux).
1. Pesquise imagens do Docker
Podemos obter as imagens da biblioteca oficial do docker chamada Docker hub ou criar a nossa própria.
Para quem está se perguntando, o Docker hub é um repositório central online onde todos os usuários do Docker constroem, testam e salvam suas imagens do Docker. O hub Docker possui dezenas de milhares de imagens Docker e o número de imagens cresce a cada dia.
Você pode pesquisar qualquer imagem do Docker com o comando "docker search"
na linha de comando.
Por exemplo, para pesquisar imagens docker baseadas em Alpine Linux, execute:
sudo docker search alpine
Exemplo de resultado:
Pesquisar imagens do Docker
Para pesquisar imagens baseadas em Ubuntu, execute:
sudo docker search ubuntu
Você pode até pesquisar imagens de qualquer aplicativo, por exemplo Nginx, como abaixo:
sudo docker search nginx
O hub Docker possui uma ampla variedade de imagens. Seja um sistema operacional, aplicativo ou combinação de vários aplicativos (por exemplo, pilha LAMP), você encontrará imagens Docker pré-construídas para tudo no Docker Hub.
Se algo que você procura não estiver disponível, você pode construí-lo e disponibilizá-lo publicamente por meio do Docker Hub ou mantê-lo privado para seu próprio uso.
2. Baixe imagens do Docker
Para baixar a imagem Docker para Ubuntu OS, execute o seguinte comando no Terminal:
sudo docker pull ubuntu
O comando acima irá baixar a imagem mais recente do Ubuntu do hub Docker.
Exemplo de resultado:
Using default tag: latest
latest: Pulling from library/ubuntu
405f018f9d1d: Pull complete
Digest: sha256:b6b83d3c331794420340093eb706a6f152d9c1fa51b262d9bf34594887c2c7ac
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest
Você também pode baixar uma versão específica da imagem do Ubuntu usando o comando:
sudo docker pull ubuntu:20.04
O Docker nos permite baixar qualquer imagem e iniciar o contêiner com base nessa imagem, independentemente do sistema operacional host.
Por exemplo, para baixar a imagem do Alpine OS, execute:
sudo docker pull alpine
Baixar imagens do Docker
3. Listar imagens do Docker
Todas as imagens Docker baixadas serão salvas no diretório /var/lib/docker/
.
Para visualizar a lista de imagens Docker baixadas, execute:
sudo docker images
Exemplo de resultado:
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest 27941809078c 3 weeks ago 77.8MB
ubuntu 20.04 20fffa419e3a 3 weeks ago 72.8MB
alpine latest e66264b98777 5 weeks ago 5.52MB
Listar imagens do Docker
Como você pode ver acima, baixei três imagens do Docker - Ubuntu mais recente, Ubuntu 20.04 e Alpine Linux.
Agora vamos ver como iniciar ou executar os contêineres com base nas imagens baixadas.
4. Execute contêineres Docker
Podemos iniciar um contêiner de duas maneiras - usando sua Image TAG do Docker ou Image ID.
TAG refere-se a um instantâneo específico da imagem e o IMAGE ID é o identificador exclusivo correspondente para essa imagem.
Dê uma olhada na seguinte captura de tela:
Tag e ID da imagem Docker
Como você pode ver nos resultados acima, as tags são "latest" e "20.04".
27941809078c
é o ID da IMAGEM da imagem do Docker mais recente do Ubuntu,20fffa419e3a
é o ID da imagem do Docker do Ubuntu 20.04- e
e66264b98777
é o ID da imagem Alpine mais recente do Docker.
4.1. Execute contêineres usando tag
Depois de baixar as imagens do Docker de sua escolha, execute o seguinte comando para iniciar um contêiner do Docker e conectar-se a ele usando seu TAG.
sudo docker run -t -i ubuntu:latest /bin/bash
Ou,
sudo docker run -it ubuntu:latest /bin/bash
Aqui,
-t
: Atribui um novo Pseudo Terminal dentro do contêiner do Ubuntu.-i
: permite fazer uma conexão interativa capturando o padrão (STDIN) do contêiner.ubuntu:latest
: imagem do Docker do Ubuntu com a tag "latest"./bin/bash
: shell BASH para o novo contêiner. Isso é opcional. Se você não mencionar o shell, o shell padrão será atribuído ao contêiner.
Depois de iniciar o contêiner, você será direcionado automaticamente ao shell do contêiner (prompt de comando):
Execute contêineres usando tag
O novo contêiner baseado na imagem mais recente do Ubuntu foi iniciado agora. Um ID exclusivo e um nome serão fornecidos a todos os novos contêineres. Como você pode ver na saída acima, o ID do contêiner do Ubuntu é 2f2a5b826762. Veremos onde encontrar o nome do contêiner em um minuto.
Agora você pode começar a trabalhar no contêiner. Depois de terminar o Container, você pode retornar ao Terminal do sistema host (no meu caso, é Ubuntu 22.04 LTS) sem encerrar o Container (sistema operacional convidado).
4.2. Desconecte-se dos contêineres em execução
Para desanexar de um contêiner em execução (sem encerrá-lo), pressione CTRL+P
seguido de CTRL+Q
.
Agora, você está de volta à janela do terminal do computador host original. Observe que o contêiner ainda está sendo executado em segundo plano e ainda não o encerramos.
4.3. Execute contêineres usando IMAGE ID
A outra maneira de iniciar um contêiner e conectar-se a ele é usando o IMAGE ID conforme mostrado abaixo:
sudo docker run -it 20fffa419e3a /bin/bash
Aqui,
20fffa419e3a
- ID da imagem
Para desconectar do contêiner e retornar ao Terminal do sistema host, pressione CTRL+P e CTRL+Q. Novamente, apenas nos separamos do contêiner, mas não o paramos. O contêiner ainda está em execução em segundo plano.
4.4. Execute contêineres em modo desanexado
Nas seções anteriores, iniciamos um contêiner e o anexamos imediatamente. E então nos desconectamos do contêiner assim que nosso trabalho com ele for concluído.
Você também pode iniciar o contêiner no modo desanexado (sem anexá-lo automaticamente).
Para executar um contêiner em segundo plano, execute:
sudo docker run -it -d alpine:latest
Exemplo de resultado:
d74f2ceb5f3ad2dbddb0b26e372adb14efff91e75e7763418dbd12d1d227129d
As primeiras 12 letras na saída acima indicam o ID do contêiner.
Você pode verificar se o contêiner está em execução usando o comando docker ps
:
sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d74f2ceb5f3a alpine:latest "/bin/sh" 3 seconds ago Up 2 seconds zen_pascal
Execute contêineres em segundo plano
Como você pode ver na saída acima, criamos um contêiner Alpine, mas não o conectamos.
Se você quiser anexá-lo ao contêiner, simplesmente execute:
sudo docker attach d74f2ceb5f3a
5. Visualizar contêineres em execução
Para visualizar a lista de contêineres em execução, execute o seguinte comando:
sudo docker ps
Exemplo de resultado:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f7e04eed577e 20fffa419e3a "/bin/bash" 6 minutes ago Up 6 minutes brave_mclean
2f2a5b826762 ubuntu:latest "/bin/bash" 18 minutes ago Up 18 minutes hungry_leavitt
Ver contêineres em execução
Aqui,
- f7e04eed577e é o ID do contêiner Ubuntu criado com a imagem "2f2a5b826762". E "brave_mclean" é o nome deste contêiner.
- 2f2a5b826762 é o ID do contêiner do Ubuntu criado com a imagem "ubuntu:latest". E "hungry_leavitt" é o nome deste contêiner.
Sempre que um novo contêiner for criado, um ID e um nome exclusivos serão fornecidos a ele, para que possamos acessar o contêiner usando seu ID ou nome.
Atenção: observe que o ID do contêiner e o ID da imagem do Docker são diferentes.
Para listar todos os contêineres disponíveis (em execução ou parados), execute:
sudo docker ps -a
6. Anexar ou desconectar de contêineres em execução
Primeiro, encontre o nome ou ID do contêiner com o comando docker ps
.
sudo docker ps
Em seguida, anexe ao contêiner em execução usando o comando docker attachment
.
sudo docker attach <container-id>
Por exemplo, vou anexar ao contêiner que possui o ID "f7e04eed577e" como abaixo:
sudo docker attach f7e04eed577e
Você também pode anexar a um contêiner usando seu nome.
sudo docker attach brave_mclean
Agora você está conectado ao contêiner.
Para desanexar do contêiner, basta pressionar CTRL+P seguido de CTRL+Q.
7. Iniciar, reiniciar, pausar e parar contêineres
Você pode iniciar, reiniciar, pausar ou parar um contêiner Docker usando seu nome ou ID de contêiner.
Primeiro, encontre o nome ou ID do contêiner com o comando docker ps -a
.
Encontre o ID e o nome do contêiner
Agora você pode iniciar um contêiner usando o comando docker start
com nome ou ID como abaixo.
sudo docker start modest_cray
sudo docker start 10615254bb45
Você pode iniciar vários contêineres separados por espaço como abaixo.
sudo docker start 24b5ee8c3d3a 56faac6d20ad d74f2ceb5f3a
Para reiniciar normalmente um contêiner em execução, faça:
sudo docker start 10615254bb45
Para pausar processos em um contêiner em execução:
sudo docker pause 10615254bb45
Para retomar processos em um contêiner em execução:
sudo docker unpause 10615254bb45
Para bloquear um contêiner até que outros parem:
sudo docker wait 10615254bb45
Da mesma forma, podemos parar um contêiner docker usando seu nome ou ID. Se você já estiver dentro do shell do contêiner, poderá interrompê-lo simplesmente executando o seguinte comando:
exit
Você também pode parar (desligar o contêiner) do sistema host Docker usando o seguinte comando:
sudo docker stop 10615254bb45
Você pode sair de vários contêineres separados por espaço, conforme mostrado abaixo.
sudo docker stop 35b5ee8c3d3a 10615254bb45
Após sair do container, verifique se ele realmente está parado listando os containers em execução com o comando:
sudo docker ps
8. Elimine contêineres Docker
O comando docker stop desligará normalmente um contêiner em execução. Às vezes, você pode ficar preso em um contêiner que não responde ou deseja encerrar um contêiner à força.
Para encerrar um contêiner enviando um SIGKILL
para um contêiner em execução, execute:
sudo docker kill 10615254bb45
9. Exclua contêineres automaticamente após fechá-los
Você pode testar um contêiner e excluí-lo quando terminar de usar o contêiner. Nesse caso, você pode excluir automaticamente o Container após fechá-lo usando o sinalizador --rm
:
sudo docker run -it --rm debian:latest
Assim que você sair do Container, ele será excluído automaticamente.
Excluir contêineres automaticamente
Como você pode ver na saída acima, criei um novo contêiner Debian. Assim que saio do contêiner, ele é excluído automaticamente. A saída docker ps -a
mostra que o contêiner Debian não existe.
10. Atribuir nome aos contêineres
Se você observar atentamente a saída dos comandos anteriores, cada contêiner receberá um nome aleatório quando você iniciar um contêiner. Se você não nomear seus contêineres, o Docker os nomeará automaticamente.
Dê uma olhada no exemplo a seguir.
sudo docker run -it -d alpine:latest
2af79e97a825c91bf374b4862b9e7c22fc22acd1598005e8bea3439805ec335d
sudo docker run -it -d alpine:latest
80b53b7e661d33696b65c78267fc3f067b6100799c925910db4721963e3fae0a
sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
80b53b7e661d alpine:latest "/bin/sh" 3 seconds ago Up 2 seconds bold_margulis
2af79e97a825 alpine:latest "/bin/sh" 6 seconds ago Up 5 seconds recursing_taussig
Como você pode ver na saída acima, embora eu tenha criado dois contêineres usando a mesma imagem do docker, ambos recebem ID e nomes diferentes.
Se você deseja atribuir um nome estático ao contêiner, use o sinalizador --name
como abaixo:
sudo docker run -it -d --name ostechnix_alpine alpine:latest
O comando acima criará um novo contêiner chamado ostechnix_alpine em modo desanexado.
vamos ver a lista dos contêineres em execução:
sudo docker ps
Exemplo de resultado:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
397111fac537 alpine:latest "/bin/sh" 2 seconds ago Up 2 seconds ostechnix_alpine
80b53b7e661d alpine:latest "/bin/sh" 7 minutes ago Up 7 minutes bold_margulis
2af79e97a825 alpine:latest "/bin/sh" 7 minutes ago Up 7 minutes recursing_taussig
Atribuir nome aos contêineres
Você notou o nome do primeiro Container na saída acima? Sim, atribuímos um nome personalizado (ou seja, ostechnix_alpine
) ao Container.
Atribuir nomes personalizados aos contêineres nos traz um benefício. Podemos identificar facilmente o que está instalado naquele contêiner observando o nome do contêiner.
11. Crie imagens Docker personalizadas
O Docker não serve apenas para baixar e usar os contêineres existentes. Você também pode criar sua própria imagem docker personalizada.
Vamos iniciar um contêiner Ubuntu:
sudo docker run -it ubuntu:latest
Agora você estará no shell do contêiner.
Em seguida, instale qualquer software ou faça o que quiser no contêiner.
Por exemplo, vamos instalar o servidor web Apache no contêiner.
apt update
apt install apache2
Da mesma forma, instale e teste qualquer software de sua escolha no Container.
Quando terminar, desconecte-se do contêiner (não saia dele) e retorne ao shell do sistema host. Não pare ou desligue o contêiner. Para desanexar do contêiner sem interrompê-lo, pressione CTRL+P
seguido de CTRL+Q
.
No terminal host do Docker, execute o seguinte comando para encontrar o ID do contêiner:
sudo docker ps
Por fim, crie uma imagem Docker do Container em execução usando o comando:
sudo docker commit 377e6d77ebb5 ostechnix/ubuntu_apache
Exemplo de resultado:
sha256:bc5e5f95ca592a3585fda2c5a40ec30c98e292046ef70390a2c3b7863cc6f7c1
Aqui,
377e6d77ebb5
– ID do contêiner do Ubuntu.ostechnix
– Nome do usuário que criou o contêiner.ubuntu_apache
– Nome da imagem docker criada pelo usuário ostechnix.
Vamos verificar se a nova imagem Docker foi criada ou não com o comando:
sudo docker images
Exemplo de resultado:
REPOSITORY TAG IMAGE ID CREATED SIZE
ostechnix/ubuntu_apache
latest bc5e5f95ca59 55 seconds ago 229MB
debian latest d2780094a226 11 days ago 124MB
ubuntu latest 27941809078c 3 weeks ago 77.8MB
ubuntu 20.04 20fffa419e3a 3 weeks ago 72.8MB
alpine latest e66264b98777 5 weeks ago 5.52MB
Crie imagens Docker personalizadas
Como você pode ver na saída acima, a nova imagem Docker foi criada em nosso sistema host Docker a partir do Container em execução.
Agora, você pode criar um novo contêiner a partir da imagem Docker recém-criada, como de costume, com o comando:
sudo docker run -it ostechnix/ubuntu_apache
12. Removendo Contêineres
Depois de concluir toda a pesquisa e desenvolvimento com contêineres Docker, você poderá excluí-los se não quiser mais.
Para fazer isso, primeiro temos que parar (desligar) os Containers em execução.
Vamos descobrir os contêineres em execução com o comando:
sudo docker ps
Exemplo de resultado:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
377e6d77ebb5 ubuntu:latest "bash" 7 minutes ago Up 7 minutes elegant_beaver
Pare o contêiner em execução usando seu ID:
sudo docker stop 377e6d77ebb5
Agora, exclua o contêiner usando o comando:
sudo docker rm 377e6d77ebb5
Da mesma forma, pare todos os contêineres e exclua-os se não forem mais necessários.
Excluir vários contêineres, um por um, pode ser uma tarefa tediosa. Assim, podemos deletar todos os containers parados de uma só vez, basta executar:
sudo docker container prune
Digite "Y"
e pressione a tecla ENTER
para excluir os contêineres.
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
Deleted Containers:
397111fac5374921b974721ee646b2d5fbae61ca9c6e8b90fbf47952f382a46b
80b53b7e661d33696b65c78267fc3f067b6100799c925910db4721963e3fae0a
[...]
Total reclaimed space: 176B
Excluir contêineres
Este comando funcionará apenas com as versões mais recentes do Docker.
Verifique se todos os contêineres foram excluídos usando o comando:
sudo docker ps -a
Se você não vir nenhuma saída, todos os contêineres serão excluídos.
13. Removendo imagens Docker
Lembre-se, primeiro você deve remover todos os contêineres antes de remover todas as imagens a partir das quais esses contêineres foram criados.
Depois de remover os contêineres, você poderá excluir as imagens do Docker que não são mais necessárias.
Para encontrar a lista de imagens Docker baixadas:
sudo docker images
Exemplo de resultado:
REPOSITORY TAG IMAGE ID CREATED SIZE
ostechnix/ubuntu_apache latest bc5e5f95ca59 14 minutes ago 229MB
debian latest d2780094a226 11 days ago 124MB
ubuntu latest 27941809078c 3 weeks ago 77.8MB
ubuntu 20.04 20fffa419e3a 3 weeks ago 72.8MB
alpine latest e66264b98777 5 weeks ago 5.52MB
Como você pode ver acima, temos 5 imagens Docker em nosso sistema host.
Vamos excluí-los usando seu ID IMAGE:
sudo docker rmi ce5aa74a48f1
Exemplo de resultado:
Untagged: ostechnix/ubuntu_apache:latest
Deleted: sha256:bc5e5f95ca592a3585fda2c5a40ec30c98e292046ef70390a2c3b7863cc6f7c1
Deleted: sha256:a8e4797160a2b2d33d8bd1bd67e008260c022b3a53fbcc198b2b74d9eae5961d
Da mesma forma, exclua todas as outras imagens do Docker.
Para remover todos os contêineres parados, todas as imagens, construir cache, todas as redes, execute:
sudo docker system prune -a
Tenha cuidado ao usar este comando. Ele excluirá todos os contêineres, redes e imagens não utilizados (pendentes e não referenciados).
Exclua tudo no Docker
Por padrão, os volumes não são removidos para evitar que dados importantes sejam excluídos, mesmo que atualmente não haja nenhum contêiner usando o volume.
Se você quiser excluir tudo, incluindo os volumes, use o sinalizador --volumes
.
sudo docker system prune -a --volumes
Solução de problemas do Docker
O Docker não permitirá que você exclua as imagens do Docker se elas forem usadas por qualquer contêiner em execução ou parado.
Por exemplo, quando tento excluir uma imagem Docker com ID b72889fa879c
, de um dos meus antigos servidores Ubuntu. Eu recebi o seguinte erro:
Error response from daemon: conflict: unable to delete b72889fa879c (must be forced) - image is being used by stopped container dde4dd285377
Isso ocorre porque a imagem do Docker que você deseja excluir está sendo usada por outro contêiner.
Então, vamos verificar o Container em execução usando o comando:
sudo docker ps
Exemplo de resultado:
Mostrar contêineres docker em execução
Ops! Não há contêiner em execução.
Vamos verificar novamente todos os contêineres (em execução e parados) com o comando:
sudo docker ps -a
Exemplo de resultado:
Mostrar contêineres docker em execução e parados
Como você pode ver, ainda existem alguns contêineres parados usando uma das imagens do Docker. Então, vamos deletar todos os contêineres.
Exemplo:
sudo docker rm 12e892156219
Da mesma forma, remova todos os contêineres conforme mostrado acima usando o ID do respectivo contêiner.
Depois de excluir todos os contêineres, remova finalmente as imagens do Docker.
Exemplo:
sudo docker rmi b72889fa879c
É isso. Agora verifique se há outras imagens Docker no host com o comando:
sudo docker images
Agora você provavelmente não terá nenhuma imagem do Docker.
Leia a seguir:
- Explicando os conceitos de rede do Docker
- Explicando volumes do Docker com exemplos
- Uma breve introdução ao Dockerfile
- Introdução ao Docker Compose no Linux
- Como executar o Docker como usuário não root no Linux
- Tutorial do Podman – Primeiros passos com o Podman
Conclusão
Neste abrangente tutorial de introdução ao Docker, explicamos os fundamentos do Docker, como criar, executar, pesquisar, remover contêineres e também construir a própria imagem do Docker a partir de um contêiner. Também explicamos como excluir contêineres e imagens do Docker quando eles não forem mais necessários.
Espero que você tenha uma ideia básica sobre o uso do Docker.
Para obter mais detalhes, consulte os links de recursos oficiais fornecidos no final deste guia ou deixe um comentário na seção de comentários abaixo.
Leitura sugerida:
- Como atualizar automaticamente contêineres Docker em execução
- ctop – Uma ferramenta de monitoramento de linha de comando para contêineres Linux
- Portiner – uma maneira mais fácil de gerenciar o Docker
- PiCluster – um aplicativo de gerenciamento Docker simples baseado na Web
- Dockly - Gerencie contêineres Docker a partir do terminal
- Converter comandos de execução do Docker em arquivos Docker-Compose
Recursos:
- Site Docker
- Documentação do Docker
E-book gratuito do Docker:
- E-book gratuito: "Livro de receitas de conteinerização do Docker"