Como verificar os detalhes da instalação do Docker

DockerBeginner
Pratique Agora

Introdução

Docker é uma plataforma de containerização poderosa que revolucionou a forma como os desenvolvedores constroem, implantam e gerenciam aplicações. Neste tutorial, você aprenderá como verificar a sua instalação do Docker e garantir que ela está funcionando corretamente. Você também descobrirá como solucionar problemas comuns que podem surgir ao trabalhar com o Docker.

Ao final deste laboratório, você terá uma sólida compreensão de como verificar os detalhes da instalação do Docker e confirmar que seu ambiente Docker está funcionando adequadamente.

Este Lab requer uma conexão com a internet para aprendizado, portanto, apenas usuários Pro podem iniciar a VM. Atualize sua conta para Pro

Verificando a Versão e o Status do Docker

Antes de mergulhar nas operações do Docker, é essencial verificar se o Docker está devidamente instalado em seu sistema e funcionando corretamente. Nesta etapa, verificaremos a versão do Docker e o status do daemon.

Verificar a Versão do Docker

Primeiro, vamos verificar a versão do Docker que está instalada em seu sistema. Abra um terminal e execute o seguinte comando:

docker --version

docker version

Este comando exibe a versão do Docker instalada. Você deve ver uma saída semelhante a:

Docker version 20.10.21, build baeda1f

Para obter informações de versão mais detalhadas, incluindo os componentes cliente e servidor, use:

docker version

Isso mostrará informações abrangentes da versão para o cliente e o servidor (daemon) do Docker, juntamente com outros detalhes, como a versão do Go usada para construir o Docker. A saída será algo como:

Client:
 Version:           20.10.21
 API version:       1.41
 Go version:        go1.18.1
 Git commit:        baeda1f
 Built:             Tue Oct 25 18:02:28 2022
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true

Server:
 Engine:
  Version:          20.10.21
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.18.1
  Git commit:       3056208
  Built:            Tue Oct 25 18:00:19 2022
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.6.10
  GitCommit:        770bd0108c32f3fb5c73ae1264f7e503fe7b2661
 runc:
  Version:          1.1.4
  GitCommit:        v1.1.4-0-g5fd4c4d
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

Se você receber um erro dizendo "docker: command not found", isso indica que o Docker não está instalado corretamente ou não está no seu PATH.

Verificar o Status do Daemon do Docker

Em seguida, vamos verificar se o daemon (serviço) do Docker está em execução. O daemon do Docker é o serviço em segundo plano responsável por gerenciar os contêineres Docker.

Execute o seguinte comando:

sudo systemctl status docker

Você deve ver uma saída indicando que o serviço Docker está ativo e em execução:

● docker.service - Docker Application Container Engine
     Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2023-05-10 12:34:56 UTC; 2h 15min ago
   Main PID: 1234 (dockerd)
      Tasks: 8
     Memory: 38.5M
        CPU: 25.102s
     CGroup: /system.slice/docker.service
             └─1234 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

Se o serviço Docker não estiver em execução, você pode iniciá-lo com:

sudo systemctl start docker

Para garantir que o Docker inicie automaticamente quando seu sistema inicializar, você pode habilitá-lo:

sudo systemctl enable docker

Verificar Informações do Docker

Para uma visão geral abrangente da sua instalação do Docker, use o comando docker info:

docker info

Isso exibirá informações detalhadas sobre sua instalação do Docker, incluindo:

  • Contagem de contêineres e imagens
  • Driver de armazenamento (Storage driver)
  • Diretório raiz do Docker
  • Informações de tempo de execução (Runtime information)
  • Configurações de rede
  • Configuração do registro (Registry configuration)

A saída será bastante extensa, mas fornece informações valiosas sobre sua configuração do Docker.

Executando um Contêiner de Teste

Agora que confirmamos que o Docker está instalado e em execução, vamos testá-lo executando um contêiner simples. Esta etapa verificará se o Docker pode baixar imagens e executar contêineres corretamente.

O Contêiner Hello World

O Docker fornece uma imagem "hello-world" simples, projetada especificamente para testar instalações do Docker. Este pequeno contêiner verifica se:

  • O cliente Docker pode se conectar ao daemon Docker
  • O daemon Docker pode extrair imagens do Docker Hub
  • O Docker pode criar e executar um contêiner

Vamos executar este contêiner de teste com o seguinte comando:

docker run hello-world

Quando você executa este comando pela primeira vez, o Docker irá:

  1. Verificar se a imagem hello-world existe localmente
  2. Se não, baixá-la do Docker Hub
  3. Criar um contêiner a partir desta imagem
  4. Iniciar o contêiner, que imprime uma mensagem e sai

Você deve ver uma saída semelhante a:

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
2db29710123e: Pull complete
Digest: sha256:ffb13da98453e0f04d33a6eee5bb8e46ee50d08ebe17735fc0779d0349e889e9
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

Esta mensagem confirma que sua instalação do Docker está funcionando corretamente.

Listando Contêineres

Após executar o contêiner hello-world, vamos verificar a lista de contêineres em seu sistema. O contêiner que acabamos de executar já foi encerrado, mas ainda podemos vê-lo na lista de todos os contêineres.

Para ver todos os contêineres (incluindo os parados), execute:

docker ps -a

Você deve ver uma saída semelhante a:

CONTAINER ID   IMAGE         COMMAND    CREATED         STATUS                     PORTS   NAMES
b7c33e8f6cb8   hello-world   "/hello"   2 minutes ago   Exited (0) 2 minutes ago           romantic_galileo

A flag -a mostra todos os contêineres, incluindo aqueles que foram parados. Sem esta flag, docker ps mostraria apenas os contêineres em execução.

Observe que a coluna STATUS mostra "Exited (0)", o que significa que o contêiner concluiu sua tarefa e saiu com um código de status 0 (indicando sucesso).

Listando Imagens Docker

A imagem hello-world foi baixada para sua máquina local. Vamos verificar isso listando todas as imagens Docker:

docker images

Você deve ver uma saída semelhante a:

REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
hello-world   latest    feb5d9fea6a5   6 months ago   13.3kB

Isso confirma que a imagem hello-world está armazenada localmente em seu sistema.

Explorando Comandos Básicos do Docker

Agora que verificamos que nossa instalação do Docker funciona corretamente, vamos explorar alguns comandos básicos do Docker que o ajudarão a gerenciar contêineres e imagens.

Executando um Contêiner Interativo

Ao contrário do contêiner hello-world que é executado e sai imediatamente, podemos executar contêineres de forma interativa. Vamos executar um contêiner Ubuntu e interagir com seu shell:

docker run -it ubuntu bash

Este comando:

  • -i mantém STDIN aberto
  • -t aloca um pseudo-TTY (terminal)
  • ubuntu é o nome da imagem
  • bash é o comando a ser executado dentro do contêiner

Assim que o contêiner for iniciado, você estará em um prompt bash dentro do contêiner:

root@3f4d92618a09:/#

O prompt mostra que você está logado como root no contêiner. A string alfanumérica é o ID do contêiner.

Tente executar alguns comandos Linux dentro do contêiner:

cat /etc/os-release

Isso exibirá informações sobre a versão do Ubuntu em execução no contêiner:

PRETTY_NAME="Ubuntu 24.04.1 LTS"
NAME="Ubuntu"
VERSION_ID="24.04"
VERSION="24.04.1 LTS (Noble Numbat)"
VERSION_CODENAME=noble
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=noble
LOGO=ubuntu-logo

Quando terminar de explorar, saia do contêiner digitando:

exit

Isso o retornará ao seu terminal host.

Gerenciamento do Ciclo de Vida do Contêiner

Vamos explorar como gerenciar o ciclo de vida de um contêiner. Primeiro, iniciaremos um contêiner no modo detached:

docker run -d --name web nginx

Este comando:

  • -d executa o contêiner no modo detached (em segundo plano)
  • --name web atribui o nome "web" ao contêiner
  • nginx é a imagem a ser usada

Você verá um longo ID de contêiner impresso na tela.

Agora, vamos verificar se o contêiner está em execução:

docker ps

Você deve ver o contêiner nginx em execução:

CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS     NAMES
7d3f8c1f8a3d   nginx     "/docker-entrypoint.…"   10 seconds ago   Up 10 seconds   80/tcp    web

Para parar o contêiner:

docker stop web

Verifique se ele foi parado:

docker ps

O contêiner não deve mais aparecer na lista de contêineres em execução. Para ver todos os contêineres, incluindo os parados:

docker ps -a

Você deve ver os contêineres nginx e hello-world no estado parado.

Para iniciar o contêiner novamente:

docker start web

E para remover um contêiner quando você não precisar mais dele:

docker stop web
docker rm web

Gerenciando Imagens Docker

Vamos explorar como gerenciar imagens Docker. Para listar todas as imagens:

docker images

Você deve ver pelo menos as imagens hello-world e nginx.

Para remover uma imagem quando você não precisar mais dela:

docker rmi hello-world

Observe que você não pode remover imagens que estão sendo usadas por contêineres (mesmo os parados). Você precisará remover esses contêineres primeiro.

Informações do Sistema Docker

Para verificar o espaço em disco usado pelo Docker (contêineres, imagens, volumes):

docker system df

Isso mostrará um resumo do uso do disco:

TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          2         1         187.8MB   187.8MB (99%)
Containers      2         0         0B        0B
Local Volumes   0         0         0B        0B
Build Cache     0         0         0B        0B

Para obter informações mais detalhadas:

docker system df -v

Isso mostrará uma análise de cada imagem e contêiner e seus tamanhos.

Solucionando Problemas Comuns do Docker

Mesmo com um ambiente Docker devidamente instalado, você pode encontrar problemas durante o uso regular. Vamos explorar alguns problemas comuns do Docker e suas soluções.

Problema: Daemon Docker Não Está em Execução

Você pode pular esta etapa se já tiver iniciado o serviço Docker na etapa anterior.

Se você tentar executar um comando Docker e receber um erro como este:

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

Isso significa que o daemon Docker não está em execução. Para resolver isso:

  1. Verifique o status do serviço Docker:
sudo systemctl status docker
  1. Se não estiver em execução, inicie-o:
sudo systemctl start docker
  1. Se o serviço não iniciar, verifique os logs em busca de erros:
sudo journalctl -u docker

Vamos simular este problema e sua resolução:

## Primeiro, pare o serviço Docker para simular o problema
sudo systemctl stop docker

## Tente executar um comando Docker
docker ps

## Você verá o erro "Cannot connect"
## Agora reinicie o serviço para corrigi-lo
sudo systemctl start docker

## Verifique se o Docker está funcionando novamente
docker ps

Problema: Permissão Negada

Se você vir um erro como:

Got permission denied while trying to connect to the Docker daemon socket

Isso geralmente significa que seu usuário não tem permissão para acessar o socket Docker. A solução é adicionar seu usuário ao grupo docker:

sudo usermod -aG docker $USER

Após executar este comando, você normalmente precisaria sair e fazer login novamente para que as alterações entrassem em vigor. Como estamos em um ambiente de laboratório com o usuário labex que já possui as permissões adequadas, não precisamos realizar esta etapa.

Problema: Problemas de Espaço em Disco

O Docker pode consumir espaço em disco significativo ao longo do tempo com imagens, contêineres e volumes não utilizados. Se seu sistema estiver com pouco espaço em disco:

  1. Verifique o uso do disco Docker:
docker system df
  1. Remova recursos não utilizados:
## Remova todos os contêineres parados
docker container prune

## Remova todas as imagens não utilizadas
docker image prune

## Remova todos os volumes não utilizados
docker volume prune

## Ou remova tudo o que não for usado em um comando
docker system prune

Vamos demonstrar o comando de poda:

## Crie alguns contêineres que sairão imediatamente
docker run hello-world
docker run ubuntu echo "This will exit immediately"

## Agora pode contêineres parados
docker container prune

Você será solicitado a confirmar a operação:

WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y

Digite y para confirmar. Você deve ver a saída mostrando os contêineres removidos.

Problema: Contêiner Não Iniciando

Se um contêiner não iniciar, você pode investigar verificando seus logs:

## Primeiro, tente iniciar um contêiner que pode falhar
docker run --name failing-container ubuntu apt-get update

## Verifique os logs
docker logs failing-container

Você pode ver erros nos logs que indicam por que o contêiner falhou.

Problema: Problemas de Rede

Se os contêineres não conseguem se comunicar entre si ou com o mundo exterior:

  1. Verifique a configuração da rede do Docker:
docker network ls
  1. Inspecione uma rede específica:
docker network inspect bridge
  1. Teste a conectividade de dentro de um contêiner:
## Inicie um contêiner com rede
docker run -it ubuntu bash

## De dentro do contêiner, instale o ping
apt-get update && apt-get install -y iputils-ping

## Tente fazer ping em um site
ping google.com

## Saia do contêiner
exit

Logs e Depuração do Docker

Para solução de problemas geral do Docker, verificar os logs do daemon Docker pode ser útil:

sudo journalctl -u docker

Para os logs de um contêiner específico:

docker logs <container_id>

Você também pode obter um fluxo de logs em tempo real:

docker logs -f <container_id>

Essas técnicas de solução de problemas o ajudarão a diagnosticar e resolver a maioria dos problemas comuns do Docker.

Resumo

Neste laboratório, você aprendeu habilidades essenciais para verificar e gerenciar sua instalação do Docker:

  • Verificando a versão do Docker e o status do daemon para confirmar a instalação adequada
  • Executando contêineres de teste para verificar a funcionalidade do Docker
  • Usando comandos básicos do Docker para gerenciar contêineres e imagens
  • Explorando o gerenciamento do ciclo de vida do contêiner
  • Solucionando problemas comuns do Docker

Essas habilidades fornecem uma base sólida para trabalhar com contêineres Docker. Agora você pode verificar com confiança se seu ambiente Docker está configurado corretamente e solucionar quaisquer problemas que possam surgir.

À medida que você continua sua jornada no Docker, pode construir sobre esses fundamentos para criar, implantar e gerenciar aplicativos em contêineres de forma eficiente.