Como Instalar e Configurar o Docker no Ubuntu

DockerBeginner
Pratique Agora

Introdução

Os Dockerfiles são a base para a criação de imagens Docker, e compreender os comandos Entrypoint e Cmd é crucial para configurar e executar contêineres de forma eficaz. Este tutorial aprofundará as diferenças entre esses dois comandos, seus casos de uso e as melhores práticas para combiná-los a fim de alcançar a configuração e implantação ótimas de contêineres.

Conceitos Básicos do Docker

Introdução ao Docker

Docker é uma poderosa tecnologia de contentores que revoluciona o desenvolvimento e a implantação de software. Como uma plataforma de código aberto, o Docker permite que os desenvolvedores empacotem, distribuam e executem aplicações de forma consistente em diferentes ambientes computacionais.

Conceitos Centrais da Contenção

A contenção é uma alternativa leve à virtualização completa de máquinas, permitindo que as aplicações funcionem em ambientes isolados. O Docker utiliza a tecnologia de contentores para criar soluções de implantação de software portáteis e eficientes.

graph TD
    A[Código da Aplicação] --> B[Contêiner Docker]
    B --> C[Implantação Consistente]
    B --> D[Ambiente Isolado]

Componentes Principais do Docker

Componente Descrição Função
Docker Engine Núcleo de Tempo de Execução Gerencia o ciclo de vida do contêiner
Imagem Docker Modelo Leve Define a configuração do contêiner
Contêiner Docker Instância Executável Executa a aplicação

Instalação no Ubuntu 22.04

## Atualizar o índice de pacotes
sudo apt update

## Instalar dependências
sudo apt install apt-transport-https ca-certificates curl software-properties-common

## Adicionar a chave GPG oficial do Docker
curl -fsSL | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

## Configurar o repositório Docker
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg]  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

## Instalar o Docker Engine
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io

Comandos Básicos do Docker

## Verificar a versão do Docker
docker --version

## Extrair uma imagem do Docker Hub
docker pull ubuntu:latest

## Listar imagens locais
docker images

## Executar um contêiner
docker run -it ubuntu:latest /bin/bash

Gerenciamento do Ciclo de Vida do Contêiner

O Docker fornece ferramentas abrangentes para gerenciar o ciclo de vida do contêiner, incluindo criação, execução, parada e remoção. Os contêineres podem ser facilmente iniciados, pausados e terminados com comandos simples.

Desempenho e Eficiência

Os contêineres oferecem vantagens significativas sobre a virtualização tradicional:

  • Sobrecarga mínima de recursos
  • Tempos de inicialização rápidos
  • Implantação consistente em diferentes ambientes
  • Utilização eficiente de recursos

Domínio dos Dockerfiles

Compreendendo o Dockerfile

Um Dockerfile é um documento de texto que contém instruções sequenciais para a construção de uma imagem Docker. Ele define o ambiente, as dependências e a configuração necessárias para criar um contêiner consistente e repetível.

graph LR
    A[Dockerfile] --> B[Construção Docker]
    B --> C[Imagem Docker]
    C --> D[Contêiner Docker]

Comandos Essenciais do Dockerfile

Comando Finalidade Exemplo
FROM Seleção da imagem base FROM ubuntu:22.04
RUN Executar comandos de shell RUN apt-get update
COPY Copiar arquivos para a imagem COPY app/ /application
WORKDIR Definir o diretório de trabalho WORKDIR /application
ENV Definir variáveis de ambiente ENV APP_VERSION=1.0
EXPOSE Definir portas do contêiner EXPOSE 8080
CMD Comando padrão do contêiner CMD ["python", "app.py"]

Exemplo de Dockerfile para Aplicação Python

## Imagem base
FROM python:3.9-slim

## Definir o diretório de trabalho
WORKDIR /application

## Copiar arquivos do projeto
COPY . /application

## Instalar dependências
RUN pip install --no-cache-dir -r requirements.txt

## Expor a porta da aplicação
EXPOSE 5000

## Executar a aplicação
CMD ["python", "app.py"]

Construindo Imagens Docker

## Construir imagem com tag
docker build -t myapp:v1 .

## Listar imagens criadas
docker images

## Inspecionar detalhes da imagem
docker inspect myapp:v1

Estratégia de Construção Multi-Fase

## Fase de construção
FROM maven:3.8.1-openjdk-11 AS build
WORKDIR /app
COPY pom.xml .
COPY src ./src
RUN mvn package

## Fase de tempo de execução
FROM openjdk:11-jre-slim
COPY --from=build /app/target/app.jar /application.jar
ENTRYPOINT ["java", "-jar", "/application.jar"]

Boas Práticas

  • Minimizar camadas de imagem
  • Usar tags de imagem específicas
  • Aproveitar o cache de construção
  • Remover arquivos desnecessários
  • Evitar a instalação de pacotes desnecessários

Configuração de Tempo de Execução do Docker

Parâmetros de Execução do Contêiner

O Docker oferece extensas opções de configuração para controlar o comportamento do tempo de execução do contêiner, permitindo um gerenciamento preciso da alocação de recursos, rede e ambientes de execução.

graph LR
    A[Configuração de Tempo de Execução do Docker]
    A --> B[Limites de Recursos]
    A --> C[Configurações de Rede]
    A --> D[Mapeamento de Volumes]
    A --> E[Variáveis de Ambiente]

Opções de Configuração de Tempo de Execução

Parâmetro Descrição Exemplo
-m, --memory Limite de memória docker run -m 512m image
--cpus Alocação de recursos CPU docker run --cpus=2 image
-p, --publish Mapeamento de portas docker run -p 8080:80 image
-v, --volume Montagem de volumes docker run -v /host:/container image
--env Variáveis de ambiente docker run --env KEY=value image

Gerenciamento de Recursos do Contêiner

## Executar contêiner com limites de CPU e memória
docker run -d \
  --name webapp \
  --memory=512m \
  --cpus=1.5 \
  --restart=always \
  myapp:latest

Configuração de Rede

## Criar rede personalizada
docker network create mynetwork

## Executar contêiner em rede específica
docker run -d \
  --network mynetwork \
  --network-alias webapp \
  myapp:latest

Volumes e Armazenamento Persistente

## Criar volume nomeado
docker volume create appdata

## Montar volume no contêiner
docker run -v appdata:/app/data \
  -d myapp:latest

Estratégias Avançadas de Execução

## Exemplo CMD vs ENTRYPOINT
FROM python:3.9
WORKDIR /app
COPY . .
ENTRYPOINT ["python"]
CMD ["app.py"]

Otimização de Parâmetros de Tempo de Execução

## Inspeção do tempo de execução do contêiner
docker inspect container_name

## Monitoramento de recursos em tempo real
docker stats container_name

Resumo

Neste guia abrangente, exploramos os comandos Entrypoint e Cmd em Dockerfiles, suas diferenças e como utilizá-los em conjunto para uma configuração e implantação de contêineres otimizadas. Ao compreender o papel de cada comando e seguir as melhores práticas, você poderá criar imagens Docker mais eficientes e confiáveis que atendam às necessidades da sua aplicação.