O Docker revolucionou a forma como aplicações são desenvolvidas, distribuídas e executadas.

Com containers, tornou-se possível empacotar aplicações junto com todas as suas dependências, garantindo que funcionem da mesma maneira em diferentes ambientes.

Essa abordagem simplificou:

  • deploy de aplicações;
  • criação de ambientes de desenvolvimento;
  • testes automatizados;
  • escalabilidade;
  • integração contínua.

Neste artigo vamos explorar os principais conceitos do Docker utilizando exemplos práticos e comandos essenciais.


O que é Docker?

Docker é uma plataforma de virtualização baseada em containers.

Os containers permitem executar aplicações em ambientes isolados, compartilhando o kernel do sistema operacional hospedeiro.

Isso torna os containers muito mais leves do que máquinas virtuais tradicionais.

Docker e containers

flowchart LR
    Host[Sistema Operacional]
    Docker[Docker Engine]
    C1[Container 1]
    C2[Container 2]
    C3[Container 3]

    Host --> Docker
    Docker --> C1
    Docker --> C2
    Docker --> C3

Instalação do Docker

Debian/Ubuntu

su
apt-get update
apt-get install curl
curl -fsSL https://get.docker.com | bash

Documentação oficial:


Testando a instalação

Após instalar o Docker, podemos executar um container de teste.

docker container run -ti hello-world

Se tudo estiver correto, o Docker exibirá uma mensagem confirmando que o ambiente está funcionando.


Conferindo a versão do Docker

docker version

Containers

Containers são ambientes isolados utilizados para execução de aplicações.

Eles agrupam:

  • bibliotecas;
  • dependências;
  • aplicações;
  • arquivos de configuração.

Executando um container CentOS

docker container run -ti centos

Explicando os parâmetros

ParâmetroFunção
runCria e executa um container
-tTerminal interativo
-iMantém entrada padrão aberta

Acessando containers

Attach

docker container attach id-container

O comando attach permite acessar um container já em execução.


Exec

docker container exec -ti id-container ls /

O comando exec executa comandos dentro de um container já em execução.


Containers em segundo plano

Executando Nginx

docker container run -d nginx

O parâmetro -d executa o container em modo daemon (background).


Fluxo básico do Docker

flowchart LR
    Imagem[Imagem Docker]
    Container[Container]
    Aplicacao[Aplicacao em execucao]

    Imagem --> Container
    Container --> Aplicacao

Listando containers

Containers ativos

docker container ls

Todos os containers

docker container ls -a

Inspecionando containers

docker container inspect id-container

Estatísticas do container

docker container stats id-container

Processos em execução

docker container top id-container

Pause e unpause

Pausando container

docker container pause id-container

Retornando execução

docker container unpause id-container

Start, stop e restart

Parando container

docker container stop id-container

Iniciando container

docker container start id-container

Reiniciando container

docker container restart id-container

Removendo containers

Remoção simples

docker container rm id-container

Remoção forçada

docker container rm -f id-container

Limitação de recursos

Memória

docker container run -d -m 128M nginx

CPU

docker container run -d -m 128M --cpus 0.5 nginx

Atualizando memória

docker container update --memory 64M id-container

Atualizando CPU

docker container update --cpus 0.2 id-container

Volumes

Volumes permitem persistir dados mesmo após remoção de containers.

Sem volumes, dados armazenados no container são perdidos.


Criando volumes

docker volume create nome_volume

Listando volumes

docker volume ls

Inspecionando volumes

docker volume inspect nome_volume

Bind mount

docker container run -ti \
--mount type=bind,src=documentos/projeto,dst=/projeto debian

Volume mount

docker container run -ti \
--mount type=volume,src=nome_volume,dst=/projeto debian

Persistência de dados

flowchart LR
    Container[Container]
    Volume[Volume]
    Dados[Dados persistentes]

    Container --> Volume
    Volume --> Dados

Imagens Docker

Imagens funcionam como modelos para criação de containers.

Uma imagem pode conter:

  • sistema base;
  • dependências;
  • bibliotecas;
  • aplicações.

Criando projeto Docker

mkdir projeto-docker
cd projeto-docker
nano Dockerfile

Exemplo de Dockerfile

FROM debian

LABEL app="nome_app"
ENV Docker="nome_env"

RUN apt-get update && \
    apt-get install -y stress && \
    apt-get clean

CMD stress --cpu 1 --vm-bytes 64M --vm 1

Build da imagem

docker image build -t nome_imagem:1.0 .

Listando imagens

docker image ls

Inspecionando imagens

docker image inspect id_image

Removendo imagens

Remoção simples

docker image rm id_image

Remoção forçada

docker image rm -f id_image

Dockerfile Apache

FROM debian

RUN apt-get update && \
    apt-get install -y apache2 && \
    apt-get clean

EXPOSE 80

CMD ["apachectl", "-D", "FOREGROUND"]

Build da imagem Apache

docker image build -t meu_apache:1.0.0 .

Executando Apache

docker container run -d -p 8080:80 meu_apache:1.0.0

Mapeamento de portas

flowchart LR
    Usuario[Usuario]
    Porta8080[Porta 8080]
    Container[Container Apache]
    Porta80[Porta 80 interna]

    Usuario --> Porta8080
    Porta8080 --> Container
    Container --> Porta80

Testando Apache

curl localhost:8080

PostgreSQL com Docker

Executando PostgreSQL

docker container run -d \
--name postgres \
-e POSTGRES_PASSWORD=123456 \
-p 5432:5432 \
postgres

Acessando PostgreSQL

docker container exec -ti postgres bash

Entrando no banco

psql -U postgres

Docker Hub

Docker Hub é um repositório online de imagens.


Login Docker Hub

docker login

Tag da imagem

docker image tag id_image usuario/meu_apache:1.0.0

Enviando imagem

docker push usuario/meu_apache:1.0.0

Registry local

Executando registry

docker container run -d \
-p 5000:5000 \
--restart=always \
--name registry \
registry:2

Criando tag local

docker image tag imagem localhost:5000/minha_imagem

Enviando imagem local

docker push localhost:5000/minha_imagem

Backup de volumes

Criando diretório

mkdir /opt/backup

Criando backup

docker container run -ti \
--mount type=volume,src=dbdados,dst=/data \
--mount type=bind,src=/opt/backup/,dst=/backup \
debian tar -cvf /backup/bkp-banco.tar /data

Removendo recursos não utilizados

Containers parados

docker container prune

Imagens não utilizadas

docker image prune

Volumes não utilizados

docker volume prune

Limpeza geral

docker system prune

Vantagens do Docker

Docker trouxe diversas vantagens para desenvolvimento moderno.

VantagemDescrição
PortabilidadeFunciona em diferentes ambientes
IsolamentoContainers independentes
EscalabilidadeFácil replicação
Deploy rápidoInicialização rápida
PadronizaçãoAmbientes consistentes
DevOpsIntegração contínua facilitada

Docker vs máquinas virtuais

DockerMáquina Virtual
Compartilha kernelSistema operacional completo
Mais leveMais pesada
Inicialização rápidaInicialização lenta
Menor consumoMaior consumo
Escalabilidade rápidaMais isolamento

Quando utilizar Docker?

Docker é muito utilizado para:

  • desenvolvimento local;
  • microsserviços;
  • CI/CD;
  • ambientes de testes;
  • aplicações em nuvem;
  • automação de deploy.

Conclusão

Docker se tornou uma das ferramentas mais importantes da computação moderna.

Através dos containers, é possível criar ambientes leves, isolados e portáveis para desenvolvimento e deploy de aplicações.

Além de facilitar testes e distribuição de software, Docker também contribui para automação, escalabilidade e integração entre equipes.

Compreender conceitos como containers, imagens, volumes e Dockerfiles é essencial para trabalhar com DevOps, cloud computing e infraestrutura moderna.


Referências