Gerenciamento de Contêineres com Docker: Comandos Essenciais e Práticas Avançadas

Docker é uma plataforma de virtualização leve que empacota aplicações e suas dependências em unidades isoladas chamadas contêineres — garantindo portabilidade, consistência e eficiência entre ambientes de desenvolvimento, teste e produção.

  1. Operações com Imagens

1.1 Listagem de Imagens

Para visualizar as imagens disponíveis localmente:

docker image ls

Equivalente a docker images. Para obter apenas os IDs das imagens:

docker image ls -q

E para incluir imagens intermediárias (não utilizadas diretamente):

docker image ls -a

1.2 Busca por Imagens no Registro Público

Localize imagens oficiais ou de terceiros com filtros específicos:

docker search --filter is-official=true --filter stars=50 nginx

O parâmetro --no-trunc exibe descrições completas, enquanto --filter permite filtrar por oficialidade, número de estrelas ou outras propriedades.

1.3 Download de Imagens

Baixe uma imagem específica (exemplo com versão explícita):

docker pull redis:7.2-alpine

A tag latest é assumida se não for especificada. O comando docker image pull é sinônimo funcional.

1.4 Remoção de Imagens

Exclua imagens pelo nome ou ID:

docker rmi redis:7.2-alpine

Para remover todas as imagens não referenciadas por contêineres ativos ou parados:

docker image prune -a
  1. Gerenciamento de Contêineres

2.1 Criação e Execução

Inicie um contêiner interativo com terminal:

docker run --name dev-env -it ubuntu:22.04 /bin/bash

Para execução em segundo plano com mapeamento de portas:

docker run -d --name web-server -p 8080:80 nginx

Flags úteis:

  • -d: modo desanexado (background)
  • --rm: remove automaticamente ao encerrar
  • --network host: usa rede do hospedeiro

2.2 Visualização de Contêineres

Liste apenas contêineres em execução:

docker ps

Para incluir contêineres parados:

docker ps -a

Obtenha apenas os IDs dos últimos três contêineres criados:

docker ps -n=3 -q

2.3 Encerramento e Reinício

Interrompa suavemente um contêiner em execução:

docker stop web-server

Reinicie-o posteriormente:

docker start web-server

Para reinício imediato:

docker restart web-server

2.4 Exclusão de Contêineres

Remova contêineres parados:

docker rm dev-env

Force a remoção mesmo se estiver ativo:

docker rm -f web-server

Limpe todos os contêineres parados de uma vez:

docker container prune
  1. Comandos Avançados

3.1 Acesso Interativo a Contêineres em Execução

Abra um novo shell dentro de um contêiner ativo sem interromper seu processo principle:

docker exec -it web-server /bin/sh

Compare com docker attach, que se conecta à sessão principal — útil para depuração, mas menos flexível.

3.2 Monitoramento e Diagnóstico

Visualize logs em tempo real com carimbo de data/hora:

docker logs -t -f --tail 50 web-server

Verifique processos em execução dentro do contêiner:

docker top web-server

Inspeccione metadados detalhados (rede, volumes, estado):

docker inspect web-server

3.3 Transferência de Arquivos

Copie arquivos entre o host e o contêiner:

# Do contêiner para o host
docker cp web-server:/var/log/nginx/access.log ./nginx-access.log

# Do host para o contêiner
docker cp ./config.conf web-server:/etc/nginx/conf.d/default.conf
  1. Persistência de Dados com Volumes

4.1 Montagem de Diretórios

Use -v para vincular diretórios locais a caminhos dentro do contêiner:

docker run -d -v $(pwd)/data:/app/data -p 3000:3000 my-app

Essa abordagem garante que dados sobrevivam à exclusão do contêiner.

4.2 Volumes Nomeados

Crie volumes gerenciados pelo Docker para maior portabilidade:

docker volume create app-data

Monte-o em contêineres:

docker run -v app-data:/app/storage my-app

Consulte detalhes com docker volume inspect app-data.

4.3 Compartilhamento entre Contêineres

Contêineres podem compartilhar volumes usando --volumes-from:

docker run -d --name db -v /var/lib/mysql mysql:8.0
docker run -d --volumes-from db --name backup alpine tar -cf /backup/db.tar /var/lib/mysql
  1. Construção Personalizada com Dockerfile

5.1 Estrutura Básica

Um Dockerfile define camadas sequenciais de construção:

FROM golang:1.22-alpine
LABEL maintainer="dev-team@example.com"

WORKDIR /src
COPY go.mod go.sum ./
RUN go mod download

COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o /app .

EXPOSE 8080
CMD ["/app"]

5.2 Construção e Etiquetagem

Gere uma imagem personalizada:

docker build -t api-service:v1.2 .

Publique-a em um repositório remoto:

docker tag api-service:v1.2 registry.example.com/api-service:v1.2
docker push registry.example.com/api-service:v1.2

5.3 CMD vs ENTRYPOINT

CMD define o comando padrão, substituível na linha de comando do docker run. Já ENTRYPOINT fixa o executável principal, permitindo argumentos adicionais:

ENTRYPOINT ["./entrypoint.sh"]
CMD ["--verbose"]

Executando docker run my-image --debug resulta em ./entrypoint.sh --debug.

  1. Casos Reais de Uso

6.1 Servidor Web com Nginx Personalizado

Substitua a página inicial padrão via volume:

docker run -d \
  -p 8080:80 \
  -v $(pwd)/custom-html:/usr/share/nginx/html:ro \
  --name custom-nginx \
  nginx:alpine

6.2 Banco de Dados com Persistência

Configure MySQL com configuração externa e dados duráveis:

docker run -d \
  --name mysql-prod \
  -e MYSQL_ROOT_PASSWORD=secure123 \
  -v ./mysql-conf:/etc/mysql/conf.d \
  -v ./mysql-data:/var/lib/mysql \
  -p 3307:3306 \
  mysql:8.0

6.3 Ambiente de Desenvolvimento C++

Construa um contêiner com ferramentas essenciais:

FROM ubuntu:22.04
RUN apt-get update && \
    apt-get install -y build-essential cmake libboost-all-dev gdb && \
    rm -rf /var/lib/apt/lists/*

WORKDIR /workspace
VOLUME ["/workspace"]
CMD ["/bin/bash"]

Execute com montagem de projeto local:

docker run -it -v $(pwd):/workspace cpp-dev-env

Tags: Docker Containerization devops Linux ci-cd

Publicado em 8-9 05:47