O que é Docker?
O Docker é uma plataforma de containerização de código aberto, desenvolvida em Go e licenciada sob Apache 2.0. Funciona como uma ferramenta leve de virtualização que permite executar aplicações em containers Linux isolados, proporcionando portabilidade e independência do ambiente host.
A filosofia do Docker é "Construir, Enviar e Executar Qualquer Aplicação em Qualquer Lugar". Isso significa encapsular componentes de software - desde uma única aplicação até um sistema operacional completo - garantindo que funcionem de forma consistente em qualquer infraestrutura.
Vantagens da Containerização
- Versatilidade: Aplicações compllexas podem ser encapsuladas
- Eficiência: Compartilhamento do kernel do host reduz overhead
- Modularidade: Atualizações e upgrades podem ser aplicados instantaneamente
- Portabilidade: Containers podem ser construídos localmente e executados em qualquer ambiente
- Escalabilidade: Réplicas podem ser criadas e distribuídas automaticamente
Containers vs Máquinas Virtuais
Containers executam nativamente no Linux, compartilhando o kernel do host e operando como procesos isolados com consumo mínimo de recursos. Em contraste, máquinas virtuais executam sistemas operacionais completos através de hypervisors, exigindo consideravelmente mais recursos computacionais.
Tecnologias Nucleares
O Docker fundamenta-se em três tecnologias-chave do kernel Linux:
- Namespaces: Isolamento de recursos entre containers
- Cgroups: Limitação e controle de uso de recursos
- Copy-on-Write: Otimização de operações de arquivos
Componentes Essenciais do Docker
Imagem: Template somente leitura contendo o código, bibliotecas e configurações necessárias para executar uma aplicação.
Container: Instância em execução criada a partir de uma imagem, encapsulando um ambiente Linux minimalista com a aplicação.
Repositório: Serviço de armazenamento centralizado para imagens, podendo ser público ou privado. Os dados do Docker são armazenados em /var/lib/docker.
Instalação do Docker
Preparação do Ambiente
# Desativar firewall e SELinux
systemctl disable firewalld
setenforce 0
# Instalar dependências necessárias
yum install -y yum-utils device-mapper-persistent-data lvm2
Configuração e Instalação
# Adicionar repositório Alibaba Cloud
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Instalar Docker Community Edition
yum install -y docker-ce
# Iniciar serviço e configurar inicialização automática
systemctl start docker
systemctl enable docker
# Verificar instalação
docker version
Operações com Imagens
Busca de Imagens
# Pesquisar imagens disponíveis
docker search nginx
Download de Imagens
# Baixar imagem (latest por padrão)
docker pull nginx
Configuração de Acelerador de Download
# Criar arquivo de configuração
mkdir -p /etc/docker
cat > /etc/docker/daemon.json << 'CONFIG'
{
"registry-mirrors": ["https://anx0by6z.mirror.aliyuncs.com"]
}
CONFIG
# Recarregar configurações
systemctl daemon-reload
systemctl restart docker
Visualização de Imagens
# Listar imagens locais
docker images
# Inspecionar detalhes de uma imagem
docker inspect 3964ce7b8458
Gerenciamento de Tags
# Adicionar nova tag a uma imagem
docker tag nginx:latest nginx:web
Remoção de Imagens
# Remover por tag (remove apenas a tag específica)
docker rmi nginx:web
# Remover por ID (remove completamente)
docker rmi 3964ce7b8458
Exportação e Importação
# Salvar imagem em arquivo
docker save -o nginx_backup nginx:latest
# Carregar imagem de arquivo
docker load -i nginx_backup
Upload para Repositório
# Autenticar no Docker Hub
docker login
# Marcar imagem para upload
docker tag nginx:web usuario/nginx:web
# Enviar imagem
docker push usuario/nginx:web
Operações com Containers
Criação de Container
# Criar container interativo
docker create -it nginx:latest /bin/bash
Visualização de Status
# Listar todos os containers
docker ps -a
Inicialização de Container
# Iniciar container existente
docker start a72736a1b1b7
# Criar e iniciar container
docker run centos:7 /usr/bin/bash -c "ls /"
# Executar em background
docker run -d centos:7 /usr/bin/bash -c "while true; do echo hello; done"
# Criar container nomeado em background
docker run -itd --name app1 centos:7 /bin/bash
Parada de Container
# Parada graciosa
docker stop 9c08e89c75c1
# Parada forçada
docker kill 9c08e89c75c1
Acessso ao Container
# Acessar shell do container
docker exec -it 731cf8b160da /bin/bash
Transferência de Arquivos
# Copiar arquivo do host para container
docker cp arquivo.txt 731cf8b160da:/opt
Migração de Containers
# Exportar container para arquivo
docker export 2592d3fad0fb > backup.tar
# Importar container de arquivo
cat backup.tar | docker import - minha_imagem:v1
Remoção de Containers
# Remover container parado
docker rm 2592d3fad0fb
# Forçar remoção de container em execução
docker rm -f 2592d3fad0fb
# Remover todos os containers parados
docker container prune