Docker para a criação e gerenciamento de contêineres
O que é Docker?
editarDocker é uma plataforma open-source criada para automatizar o deployment, scaling e gerenciamento de aplicações usando conteinerização. A ferramenta permite que desenvolvedores empacotem suas aplicações juntas de todas suas respectivas dependências em unidades padronizadas chamadas de contêineres, garantindo que o software roda uniformemente em vários ambientes.
A engine do Docker funciona como uma aplicação cliente-servidor, com:
- Um servidor rodando um processo daemon
dockerd
- APIs que especificam interfaces que programas podem usar para instruir e conversar com o daemon do Docker
- Uma interface de linha de comando (CLI) cliente chamada de
docker
[1]
O que são contêineres?
editarContêineres são pacotes leves, independentes e executáveis que incluem tudo aquilo que a aplicação precisará para ser executada: código, ferramentas do sistema, bibliotecas, configurações, etc. Diferentemente de máquinas virtuais, contêineres compartilham o kernel do sistema host e não precisam de um sistema operacional inteiro para cada aplicação, tornando-os mais eficientes e velozes para iniciar.
Porque usar Docker?
editar- Portabilidade: Contêineres do Docker podem ser rodados em qualquer sistema que suporta Docker, garantindo ambientes consistentes desde o desenvolvimento até a produção.
- Eficiência: Contêineres são mais eficientes em recurso do que as tradicionais máquinas virtuais, uma vez que compartilham o kernel do sistema operacional host.
- Isolamento: As aplicações em Docker são executadas de maneira isolada, o que reduz possíveis conflitos e garante mais segurança.
- Escalabilidade: Docker torna escalar aplicações horizontalmente mais fácil ao adicionar mais contêineres.
Principais conceitos de Docker
editarImagens
editarUma imagem é um template imutável que é utilizado para criar contêineres. Imagens são criadas a partir de uma série de camadas, cada uma contendo um conjunto de mudanças no sistema de arquivo, como adições, deleções e modificações.
Contêineres
editarUm contêiner é uma instância executável de uma imagem. É possível criá-los, iniciá-los, pará-los, movê-los ou deletá-los utilizando a API do Docker ou sua interface de linha de comando.
Dockerfile
editarUm Dockerfile é um documento de texto que contém todos os comandos que o usuário pode chamar para gerar uma imagem. Utilizando o comando docker build
, é possível que usuários criem uma build automática que executa diversas instruções em sequência.
Docker Hub
editarDocker Hub é um repositório baseado em nuvem onde usuários de Docker criam, testam, armazenam e distribuem imagens.[2]
Docker Volumes
editarVolumes são usados para um armazenamento de dados persistente e para compartilhar dados entre contêineres ou entre um contêiner o sistema host.
Instalação do Docker
editarEm sistemas Linux:
sudo apt-get update
sudo apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] \
https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
Verificando se a instalação foi bem-sucedida
editarsudo docker run hello-world
Comandos básicos de Docker
editar- Listar os comandos de CLI do Docker
docker
- Listar informações sobre comandos específicos do Docker
docker [comando] --help
- Executar uma imagem
docker run [imagem]
- Listar os contêineres em execução
docker ps
- Listar todos os contêineres, incluindo aqueles executando e aqueles interrompidos
docker ps -a
- Interromper um contêiner em execução
docker stop [id_conteiner]
- Remover um contêiner
docker rm [id_conteiner]
- Listar imagens
docker images
- Remover uma image
docker rmi [id_imagem]
Criando um Dockerfile
editarUm Dockerfile automatiza o processo de criação de imagens. Um exemplo para a criação de uma aplicação em Node.js simples ficaria da seguinte forma:
# Usar uma imagem oficial do Node como imagem base
FROM node:14
# Definir o diretório de trabalho
WORKDIR /usr/src/app
# Copiar package.json e package-lock.json
COPY package*.json ./
# Instalar dependências
RUN npm install
# Copiar o restante do código da aplicação
COPY . .
# Expor a porta da aplicação
EXPOSE 8080
# Definir o comando para executar a aplicação
CMD [ "node", "app.js" ]
Buildando a imagem
editardocker build -t my-node-app .
Executando o contêiner
editardocker run -p 8080:8080 -d my-node-app
O comando acima mapeia a porta 8080 dentro do contêiner para a porta 8080 da máquina host.
Gerenciamento de contêineres
editar- Iniciando um contêiner
docker start [id_conteiner]
- Interrompendo um contêiner
docker stop [id_conteiner]
- Observando os detalhes de um contêiner
docker inspect [id_conteiner]
- Observando os logs de um contêiner
docker logs [id_conteiner]
- Removendo um contêiner
docker rm [id_conteiner]
Tópicos Avançados de Docker
editarDocker Compose
editarDocker Compose é uma ferramenta usada para definir e executar aplicações de Docker com diversos contêineres. Usando o comando Compose, é possível utilizar um arquivo do tipo YAML para configurar os serviços da aplicação.
version: '3.8'
services:
web:
build: .
ports:
- "8080:8080"
volumes:
- .:/usr/src/app
depends_on:
- db
db:
image: postgres:13
environment:
POSTGRES_PASSWORD: example
Executando Docker Compose
editarPara iniciar a aplicação, utilize:
docker-compose up
Docker Swarm
editarÉ a ferramenta que oferece uma plataforma para gerenciamento de clusters, transformando uma seleção de hosts de Docker em um único host virtual.
Iniciando um Swarm
editardocker swarm init
Boas práticas em Docker
editar- Utilizar .dockerignore: Similar ao
.gitignore
, esse arquivo informa ao Docker quais são os arquivos e diretórios que devem ser ignorados ao construir uma imagem - Rebuildar suas imagens com frequência: É importante rebuildar imagens com uma boa frequência, a fim de garantir que elas estarão atualizadas e seguras, com suas dependências em versões recentes.
- Criar contêineres efêmeros: A imagem definida pelo Dockerfile deve, no geral, gerar contêineres que são os mais efêmeros possível. Isso significa que os contêineres devem pode ser interrompidos e destruídos, e depois serem reconstruídos e substituídos com o mínimo de configurações e setup necessários.
Bibliografia
editar- ↑ Documentação do Docker https://docs.docker.com/
- ↑ Docker Hub https://hub.docker.com/