Ir para o conteúdo

Docker para a criação e gerenciamento de contêineres

De Wikiversidade

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]

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]
  1. Documentação do Docker https://docs.docker.com/
  2. Docker Hub https://hub.docker.com/