Guia Completo para Criar e Gerenciar Imagens Docker no Ubuntu | Instalação, Otimização e Solução de Problemas

目次

1. Introdução

O que é Docker?

Docker é uma plataforma que utiliza tecnologia virtualização baseada em contêineres para desenvolver, distribuir e executar aplicações de forma eficiente. Ao contrário das máquinas virtuais tradicionais (VMs), os contêineres compartilham o kernel do sistema operacional host, permitindo tempos de inicialização mais rápidos e menor consumo de recursos.

Benefícios de Usar Docker no Ubuntu

Ubuntu é uma das distribuições Linux altamente compatíveis com Docker. Os principais benefícios incluem:

  • Suporte Oficial : Docker oferece suporte oficial ao Ubuntu, e a instalação é simples via repositório oficial.
  • Gerenciamento de Pacotes Estável : O gerenciador de pacotes APT do Ubuntu facilita a administração das versões do Docker.
  • Amplo Suporte da Comunidade : Ubuntu possui uma grande base de usuários global, facilitando a busca por soluções ao solucionar problemas.

O que Você Aprenderá Neste Artigo

Este artigo guiará você pelos seguintes tópicos passo a passo:

  1. Como instalar Docker no Ubuntu
  2. Operações básicas com imagens Docker
  3. Criação de imagens personalizadas usando Dockerfile
  4. Configuração do ambiente de idioma japonês em um contêiner Ubuntu
  5. Otimização e redução do tamanho de imagens Docker
  6. Desenvolvimento de aplicações em um contêiner Ubuntu
  7. Erros comuns e soluções de solução de problemas

Este guia é útil tanto para iniciantes quanto para usuários avançados, portanto sinta‑se à vontade para usá‑lo como referência.

2. Instal Docker no Ubuntu

Instalando Docker Usando o Repositório Oficial

No Ubuntu, você pode instalar Docker facilmente usando o repositório oficial. Siga os passos abaixo para configurá‑lo.

1. Remover Pacotes Docker Existentes

O Ubuntu fornece por padrão, um pacote chamado docker.io, mas ele pode ser uma versão desatualizada. Recomenda‑se removê‑lo primeiro.

sudo apt remove docker docker-engine docker.io containerd runc
  1. Instalar Pacotes Necessários

Antes de instalar o Docker, instale os pacotes de dependência necessários.

sudo apt update
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common

3. Adicionar o Repositório Oficial do Docker

Adicione a chave GPG oficial do Docker e configure o repositório.

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

4. Instalar Docker

Com o repositório adicionado, instale o Docker.

sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io

5. Verificar a Instalação

Para conferir se o Docker foi instalado corretamente, exiba as informações de versão.

docker --version

Configuração Inicial Após a Instalação

1 Iniciar e Habilitar o Serviço Docker

Inicie o serviço Docker e configure‑o para iniciar automaticamente na inicialização do sistema.

sudo systemctl start docker
sudo systemctl enable docker

2. Permitir que Usuários Não‑Root Usem Docker

Por padrão, apenas o usuário root pode executar Docker. Para permitir que um usuário comum use os comandos Docker, adicione‑o ao grupo docker.

sudo usermod -aG docker $USER

Para aplicar as alterações, faça logout e login novamente.

3. Testar Docker

Execute o contêiner hello‑world para verificar se o Docker está funcionando corretamente.

docker run hello-world

Se você vir a mensagem “Hello from Docker!”, a instalação foi bem‑sucedida.

3. Operações Básicas com Imagens Docker

O que é uma Imagem Docker?

Uma imagem Docker serve como modelo para a criação de contêineres. Ao usar uma imagem Docker baseada em Ubuntu, você pode configurar rapidamente um ambiente Ubuntu dentro de um contêiner.

Baixando Imagens Ubuntu do Docker Hub

O Docker Hub hospeda uma vasta coleção de imagens Docker oficiais. Para baixar uma imagem Ubuntu, use o comando a seguir:

docker pull ubuntu

Iniciando e Parando Contêineres

Você pode iniciar um contêiner usando a imagem Ubuntu baixada com o seguinte comando:

docker run -it ubuntu bash

Este comando abre um shell dentro do contêiner Ubuntu, permitindo que você interaja diretamente com ele.

Listando Contêineres em Execução

Para verificar quais contêineres estão atualmente em execução, use este comando:

docker ps

Para exibir todos os contêineres, incluindo os parados, adicione a opção -a:

docker ps -a

Parando e Removendo Contêineres

Para parar um contêiner em execução, use o seguinte comando:

docker stop [container ID or name]

Para remover um contêiner desnecessário, use este comando:

docker rm [container ID or name]

Gerenciando Imagens Docker

Para listar todas as imagens Docker baixadas, use o seguinte comando:

docker images

Para remover uma imagem não utilizada, use este comando:

docker rmi [image ID]

4. Criando Imagens Docker Personalizadas com Dockerfile

O que é um Dockerfile?

Um Dockerfile é um arquivo de configuração usado para criar imagens Docker. Ao definir instruções específicas em um Dockerfile, você pode construir imagens Docker personalizadas adaptadas às suas necessidades. Isso ajuda a padronizar ambientes de desenvolvimento e incluir pacotes necessários na imagem.

Sintaxe Básica de um Dockerfile

Um Dockerfile tipicamente inclui os seguintes comandos principais:

CommandDescription
FROMSpecifies the base image
RUNExecutes commands to build the image
COPYCopies files into the container
WORKDIRSets the working directory
CMDDefines the default command to run when the container starts
ENTRYPOINTSpecifies the main command executed when the container runs

Criando uma Imagem Docker Personalizada Baseada em Ubuntu

Siga estes passos para criar uma imagem Docker personalizada baseada em Ubuntu.

1. Crie um Diretório de Trabalho

Primeiro, crie um novo diretório de projeto e navegue para ele.

mkdir my-ubuntu-image
cd my-ubuntu-image

2. Crie um Dockerfile

Dentro do diretório, crie um Dockerfile e adicione o seguinte conteúdo:

# Use the official Ubuntu base image
FROM ubuntu:latest

# Maintainer information (optional)
LABEL maintainer="your-email@example.com"

# Update package lists and install basic tools
RUN apt update && apt install -y curl vim git

# Set the working directory
WORKDIR /workspace

# Default command executed when the container starts
CMD ["bash"]

3. Construa a Imagem Docker

Use o seguinte comando para construir a imagem personalizada a partir do Dockerfile.

docker build -t my-ubuntu-image .

A opção -t atribui um nome à imagem.

4. Verifique a Imagem Construída

Verifique a lista de imagens disponíveis para garantir que a nova imagem foi criada com sucesso.

docker images

5. Execute um Contêiner a Partir da Imagem Personalizada

Inicie um contêiner usando a imagem personalizada recém-criada.

docker run -it my-ubuntu-image

Este contêiner deve incluir ferramentas como curl e vim, conforme especificado no Dockerfile.

5. Configurando o Ambiente de Idioma Japonês em um Contêiner Ubuntu

Por padrão, a imagem Docker Ubuntu está configurada para inglês. Se você precisar usar japonês, configurações adicionais são necessárias.

Configurando o Locale Japonês

Para habilitar a exibição e entrada em japonês em um contêiner Ubuntu, instale os pacotes de idioma necessários.

1. Instale os Pacotes Necessários

apt update
apt install -y language-pack-ja locales

2. Configure o Locale

Defina o locale e aplique as configurações.

locale-gen ja_JP.UTF-8
update-locale LANG=ja_JP.UTF-8

3. Aplique as Configurações

export LANG=ja_JP.UTF-8

Configurando a Entrada em Japonês

Para habilitar a entrada de texto em japonês no terminal, instale o ibus-mozc.

apt install -y ibus-mozc

Se você estiver usando um ambiente GUI, adicione as seguintes variáveis de ambiente:

export GTK_IM_MODULE=ibus
export XMODIFIERS=@im=ibus
export QT_IM_MODULE=ibus

Usando Aplicações GUI

Para executar aplicações GUI dentro de um contêiner Docker, você pode usar um servidor X.

Instale um servidor X na máquina host e execute o contêiner com X11 habilitado.

docker run -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix my-ubuntu-image

6. Otimizando e Reduzindo o Tamanho das Imagens Docker

Otimizar imagens Docker melhora a velocidade de inicialização do contêiner e reduz o uso de armazenamento. Esta seção apresenta métodos para criar imagens leves.

Criando uma Imagem Baseada em Ubuntu Leve

A imagem padrão ubuntu:latest é relativamente grande. Para reduzir o tamanho do contêiner, considere usar uma alternativa menor como ubuntu:minimal.

FROM ubuntu:minimal

Alternativamente, você pode usar Alpine Linux, que é significativamente menor que o Ubuntu.

FROM alpine:latest
RUN apk add --no-cache bash curl

Este método pode reduzir o tamanho da imagem em várias centenas de megabytes.

Removendo Arquivos Desnecessários para Reduzir o Tamanho da Imagem

Após instalar pacotes com apt-get, você pode remover arquivos de cache desnecessários para minimizar o tamanho da imagem.

RUN apt update && apt install -y curl vim 
    && apt clean 
    && rm -rf /var/lib/apt/lists/*

O comando rm -rf /var/lib/apt/lists/* exclui a lista de pacotes, reduzindo dados desnecessários.

Usando Builds Multi-Estágio

Com builds multi-estágio, você pode usar um contêiner temporário para construir dependências enquanto mantém a imagem final leve.

FROM ubuntu as builder
RUN apt update && apt install -y gcc

FROM ubuntu:minimal
COPY --from=builder /usr/bin/gcc /usr/bin/gcc

Essa técnica permite excluir ferramentas de desenvolvimento desnecessárias da imagem final, tornando-a significativamente menor.

7. Guia Prático: Desenvolvendo Aplicações em um Contêiner Ubuntu

Nesta seção, configuraremos um ambiente de desenvolvimento dentro de um contêiner Ubuntu e demonstraremos como desenvolver aplicações usando Docker.

Configurando um Ambiente de Desenvolvimento Python

Para criar um ambiente de desenvolvimento Python dentro de um contêiner Docker, use o seguinte Dockerfile.

FROM ubuntu:latest
RUN apt update && apt install -y python3 python3-pip
CMD ["python3"]

Construa a imagem e execute o contêiner.

docker build -t python-dev .
docker run -it python-dev

Dentro do contêiner, você pode executar o comando python3 para rodar scripts Python e desenvolver aplicações.

Configurando um Ambiente de Desenvolvimento Node.js

Para desenvolvimento Node.js, use o seguinte Dockerfile.

FROM ubuntu:latest
RUN apt update && apt install -y nodejs npm
CMD ["node"]

Construa e execute o contêiner.

docker build -t node-dev .
docker run -it node-dev

Com essa configuração, você pode usar o comando node para executar código JavaScript e desenvolver aplicações em um ambiente controlado.

8. FAQ & Solução de Problemas

Ao usar Docker, você pode encontrar vários problemas. Esta seção fornece soluções para problemas comuns e perguntas frequentes.

Diferença Entre Docker e Máquinas Virtuais

  • Docker: Compartilha o kernel do SO do host, tornando-o leve e permitindo inicialização rápida do contêiner.
  • Máquinas Virtuais (VMs): Cada VM tem seu próprio SO, consumindo mais recursos e levando mais tempo para iniciar.

O Docker é mais eficiente no uso de recursos, tornando-o ideal para ambientes de desenvolvimento e implantações automatizadas.

Persistindo Dados em um Contêiner Ubuntu

Para reter dados mesmo após o contêiner ser parado, use montagem de volume.

docker run -v my_data:/data ubuntu

O volume my_data armazena dados de forma persistente, permitindo acesso mesmo após o contêiner ser removido.

Erros Comuns e Soluções

1. Erro permission denied

Se você vir um erro permission denied ao executar comandos Docker, seu usuário pode não estar no grupo docker.

Adicione seu usuário ao grupo docker com o seguinte comando:

sudo usermod -aG docker $USER

Após executar este comando, faça logout e login novamente para aplicar as alterações.

2. Erro image not found

Se uma imagem foi removida do Docker Hub, especifique uma tag diferente para puxar uma versão válida.

docker pull ubuntu:22.04

Ao especificar uma versão, você pode garantir que baixe uma imagem funcional.