Docker para a criação e gerenciamento de contêineres
O que é Docker?
[editar | editar código]Docker é 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?
[editar | editar código]Contê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 | editar código]- 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
[editar | editar código]Imagens
[editar | editar código]Uma 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
[editar | editar código]Um 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
[editar | editar código]Um 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
[editar | editar código]Docker Hub é um repositório baseado em nuvem onde usuários de Docker criam, testam, armazenam e distribuem imagens.[2]
Docker Volumes
[editar | editar código]Volumes 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
[editar | editar código]Em 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
[editar | editar código]sudo docker run hello-world
Comandos básicos de Docker
[editar | editar código]- 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
[editar | editar código]Um 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
[editar | editar código]docker build -t my-node-app .
Executando o contêiner
[editar | editar código]docker 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 | editar código]- 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
[editar | editar código]Docker Compose
[editar | editar código]Docker 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
[editar | editar código]Para iniciar a aplicação, utilize:
docker-compose up
Docker Swarm
[editar | editar código]É 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
[editar | editar código]docker swarm init
Boas práticas em Docker
[editar | editar código]- 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 | editar código]- ↑ Documentação do Docker https://docs.docker.com/
- ↑ Docker Hub https://hub.docker.com/