O Docker revolucionou a forma como desenvolvemos, implantamos e gerenciamos aplicações. Sendo uma plataforma de virtualização baseada em contêineres, nos permite facilmente criar, empacotar, distribuir e executar aplicações em ambientes isolados com todas as dependências necessárias para funcionar, garantindo consistência e portabilidade.
Neste artigo, vamos te apresentar o Docker e orientar em seus primeiros passos, desde a instalação até a criação e gerenciamento de seus primeiros contêineres. Bora?
Conceitos Básicos do Docker
Imagens e Contêineres
Uma imagem Docker é um pacote que contém uma aplicação e todas as dependências necessárias. Um contêiner é uma instância em execução de uma imagem. Cada contêiner é isolado dos outros e compartilha o kernel do sistema operacional onde está sendo executado.
Dockerfile
Um Dockerfile é um arquivo de configuração que descreve como construir uma imagem Docker. Nele, você especifica a imagem base, as dependências, os comandos de configuração e as etapas para preparar o ambiente da sua aplicação.
Versões do Docker
Se você está estudando ou desenvolvendo um projeto pessoal, é do Docker Community Edition (CE) que você precisa, pois ele é destinado a desenvolvedores individuais, equipes pequenas e projetos de código aberto. É gratuito e oferece recursos suficientes para criar, distribuir e executar contêineres, além de ser atualizado regularmente, proporcionando acesso às mais recentes melhorias e recursos.
Para uso empresarial, é recomendado o Docker Enterprise Edition (EE), que é a versão voltada para empresas e ambientes de produção, pois oferece funcionalidades avançadas como gerenciamento de clusters e integração com ferramentas de orquestração, como Kubernetes. O Docker EE é uma opção paga e é adequado para organizações que precisam de maior controle e escalabilidade.
Docker Hub
O Docker Hub é um serviço de registro de imagens Docker que permite que você compartilhe e acesse imagens publicamente ou em modo privado. Embora seja opcional, criar uma conta no Docker Hub facilita o compartilhamento e a colaboração em projetos Docker.
Instalação do Docker
Antes de começar, é preciso instalar o Docker em sua máquina. Os procedimentos de instalação variam de acordo com o sistema operacional, então veremos a seguir o procedimento nos principais.
Instalação no Linux
Atualize o gerenciador de pacotes:
sudo apt-get update
Instale o Docker:
sudo apt-get install docker-ce
Instalação no macOS
Baixe o instalador do Docker Desktop correspondente ao macOS no site oficial do Docker e execute-o. O processo de instação é bem simples e basta seguir as instruções do instalador
Instalação no Windows com WSL
A instalação no Windows pode ser feita também baixando o instalador pelo site oficial, mas é importante instalar antes o WSL 2 em seu sistema.
O WSL (Windows Subsystem for Linux) é uma tecnologia da Microsoft que permite executar distribuições Linux diretamente no Windows, sem a necessidade de virtualização completa ou de um sistema operacional separado. O WSL 2 utiliza uma máquina virtual leve que executa um kernel Linux completo, fornecendo um ambiente mais autêntico que melhora significativamente o desempenho e a compatibilidade.
Abra como Administrador o PowerShell ou o Prompt de Comando do Windows e execute o comando a seguir para habilitar os recursos necessários para executar o WSL e instalar por padrão a distribuição Ubuntu do Linux, que pode ser alterada seguindo as instruções aqui. Pode ser necessário reiniciar a máquina.
wsl --install
Ao executar o comando acima, se você ver o texto de ajuda é porque o WSL já está instalado com a distribuição Linux padrão Ubuntu, então execute wsl --list --online
para ver uma lista de distros disponíveis e depois wsl --install -d <NomeDaDistro>
para instalar uma delas.
Testando a Instalação
Após a instalação, você pode testar se o Docker está funcionando corretamente executando o comando a seguir. Se mostrar a versão do Docker, quer dizer que a instalação foi bem-sucedida.
docker --version
Criando seu Primeiro Projeto com Docker
Vamos criar um projeto simples para entender como o Docker funciona na prática.
- Escolha um Local e Crie um Diretório para o Projeto: Abra um terminal e navegue até o diretório onde deseja criar o projeto. Em seguida, crie um diretório para o projeto e acesse-o:
mkdir meu-projeto-docker cd meu-projeto-docker
- Crie o Arquivo Dockerfile: Crie um arquivo chamado
Dockerfile
(sem extensão) e adicione o conteúdo a seguir:
# Usa uma imagem base do Node.js
FROM node:14
# Define o diretório de trabalho no contêiner
WORKDIR /app
# Copia o arquivo package.json para o contêiner
COPY package.json .
# Instala as dependências
RUN npm install
# Copia o restante dos arquivos
COPY . .
# Comando a ser executado ao iniciar o contêiner
CMD ["node", "app.js"]
- Crie uma Aplicação Simples para Exemplo: Crie um arquivo chamado
app.js
que será uma simples aplicação JavaScript que apenas exibe um log. Usaremos essa aplicação para criar nossa imagem Docker de exemplo e executar em um contêiner.
console.log("Olá, Docker!");
- Construa a Imagem Docker: Agora, no terminal, execute o seguinte comando para construir a imagem Docker com base no Dockerfile que você criou:
docker build -t meu-projeto-docker .
O comando docker build
é utilizado para criar uma imagem Docker com base nas instruções fornecidas no Dockerfile. A opção -t
permite que você dê um nome à imagem. Neste exemplo, estamos nomeando a imagem como “meu-projeto-docker”.
- Execute um Contêiner a Partir da Imagem: Com a imagem construída, você pode executar um contêiner a partir dela usando o seguinte comando:
docker run meu-projeto-docker
O comando docker run
inicia um contêiner baseado na imagem fornecida. Se tudo ocorrer corretamente, você verá no terminal a mensagem “Olá, Docker!”, que é exatamente a saída do console.log
da sua aplicação de exemplo. Ou seja, a aplicação que você criou está sendo executada em um contêiner a partir de uma imagem com tudo que é necessário para funcionar, e sendo assim, pode rodar de forma idêntica em qualquer ambiente e sistema operacional que possa executar contêiners Docker. Bom demais, né?
Executando e Gerenciando Contêineres
Gerenciar contêineres é uma parte fundamental do uso do Docker. Veja a seguir alguns comandos úteis:
docker ps
: Lista os contêineres em execução.docker ps -a
: Lista todos os contêineres (incluindo os parados).docker stop <container_id>
: Para um contêiner específico.docker start <container_id>
: Inicia um contêiner específico.docker rm <container_id>
: Remove um contêiner.docker images
: Lista as imagens disponíveis.docker rmi <image_id>
: Remove uma imagem.docker exec -it <container_id> bash
: Acessa o terminal de um contêiner em execução.
Dicas para Utilização Eficiente do Docker
Além de entender os conceitos fundamentais do Docker, é importante conhecer e aplicar boas práticas e estratégias para otimizar sua experiência e maximizar os benefícios dessa tecnologia. Segue algumas dicas:
Mantenha os Contêineres Leves
Ao construir imagens e executar contêineres, é crucial manter o foco na simplicidade e no minimalismo. Certifique-se de incluir apenas os componentes essenciais necessários para a execução da sua aplicação. Quanto mais leve for o contêiner, menor será o tempo de inicialização e menor será o consumo de recursos. Evite adicionar pacotes e dependências não utilizados, pois isso pode aumentar desnecessariamente o tamanho da imagem.
Utilize Volumes para Persistência de Dados
Os volumes são mecanismos do Docker que permitem persistir dados além do ciclo de vida de um contêiner. Isso é especialmente útil para armazenar informações que precisam ser mantidas mesmo quando o contêiner é interrompido ou recriado. Utilize volumes para armazenar bancos de dados, arquivos de configuração ou qualquer outra forma de dados que sua aplicação manipule. Isso facilita a atualização e o gerenciamento de contêineres sem perder informações importantes.
Para criar um volume, você pode usar a opção -v
no momento de executar um contêiner. Por exemplo:
docker run -v nome_do_volume:/caminho/no/contêiner -it minha-imagem
Neste comando, estamos utilizando o docker run
para iniciar um novo contêiner com algumas configurações específicas.
-v nome_do_volume:/caminho/no/contêiner
: Essa opção-v
indica que estamos criando um volume dentro do contêiner. Um volume é uma forma de persistência de dados que permite compartilhar informações entre o sistema hospedeiro (a máquina onde o Docker está rodando) e o contêiner. O formatonome_do_volume:/caminho/no/contêiner
indica que estamos mapeando um volume chamadonome_do_volume
para um caminho específico dentro do contêiner, representado por/caminho/no/contêiner
. Isso significa que qualquer dado escrito nesse caminho dentro do contêiner será armazenado no volumenome_do_volume
.-it
: Essas opções combinadas (-i
e-t
) permitem que você interaja com o terminal do contêiner, ou seja, você terá acesso a um terminal interativo do contêiner.minha-imagem
: Substitua isso pelo nome da imagem que você deseja executar como um contêiner.
Utilize Redes para Comunicação entre Contêineres
Em muitos cenários, suas aplicações precisarão se comunicar entre contêineres. Em vez de usar IPs estáticos ou depender de portas expostas diretamente, crie redes personalizadas no Docker. Isso permite que você atribua nomes aos contêineres e se comunique com eles usando esses nomes. As redes isoladas também oferecem um nível extra de segurança. Para criar uma rede você pode usar o comando docker network
, como no exemplo abaixo:
docker run meu-projeto-docker
Ao executar um novo contêiner, você pode atribuí-lo a essa rede usando a opção --network
:
docker run --network=minha-rede -it minha-imagem
Neste comando, estamos utilizando o docker run
para iniciar um novo contêiner com uma configuração específica de rede.
--network=minha-rede
: Essa opção--network
permite que você associe o contêiner a uma rede específica. No caso, estamos usando o valorminha-rede
, que é o nome da rede que você criou anteriormente no Docker.-it
: Essas opções combinadas (-i
e-t
) permitem que você interaja com o terminal do contêiner, ou seja, você terá acesso a um terminal interativo do contêiner.minha-imagem
: Substitua isso pelo nome da imagem que você deseja executar como um contêiner.
Conclusão
Com este artigo você já entendeu que o Docker oferece uma maneira poderosa e eficiente de desenvolver, implantar e gerenciar aplicações, aprendendo os conceitos básicos, a instalação e até a criação e gerenciamento de um contêiner simples. Você acaba de dar seu primeiro passo para começar a aproveitar os benefícios da tecnologia de contêineres, então considere continuar experimentando e desbloqueie o potencial do Docker para otimizar seu fluxo de trabalho de desenvolvimento. Lembre-se de sempre consultar a documentação oficial para obter informações atualizadas e detalhadas.
Quer saber mais sobre ferramentas de desenvolvimento de software? Acesse a nossa página de artigos na categoria Ferramentas. Até logo!