03 de março de 2025

Introdução ao Docker

Se você já se frustrou ao tentar configurar um ambiente de desenvolvimento ou enfrentou problemas como "funciona na minha máquina", o Docker pode ser a solução que você procura. O Docker é uma ferramenta poderosa que permite criar, implantar e executar aplicações em ambientes isolados chamados containers.

Neste tutorial, vou te guiar pelos conceitos básicos do Docker, mostrando como ele pode facilitar sua vida como desenvolvedor.


O que é Docker?

O Docker é uma plataforma de virtualização que permite empacotar uma aplicação e suas dependências em um container. Diferente das máquinas virtuais tradicionais, que emulam um sistema operacional completo, os containers compartilham o kernel do sistema operacional do host, tornando-os mais leves e eficientes.

Por que usar Docker?

  1. Consistência: Com o Docker, você garante que sua aplicação funcione da mesma forma em qualquer ambiente (desenvolvimento, teste, produção).

  2. Isolamento: Cada container é independente, o que evita conflitos entre dependências de diferentes projetos.

  3. Portabilidade: Você pode criar um container em sua máquina e executá-lo em qualquer lugar que suporte Docker.

  4. Facilidade de Colaboração: Compartilhar ambientes de desenvolvimento com sua equipe fica muito mais simples.


Conceitos Básicos do Docker

Antes de mergulharmos na prática, é importante entender alguns conceitos-chave:

  • Imagem: Um modelo read-only que contém o sistema de arquivos, bibliotecas e dependências necessárias para executar uma aplicação.

  • Container: Uma instância executável de uma imagem. É onde sua aplicação realmente roda.

  • Dockerfile: Um arquivo de texto que contém instruções para criar uma imagem.

  • Docker Hub: Um repositório público de imagens Docker, onde você pode encontrar e compartilhar imagens prontas.


Como Começar com Docker

Passo 1: Instale o Docker

Primeiro, você precisa instalar o Docker no seu computador. Aqui estão os links para download:

Após a instalação, abra o terminal e execute docker --version para verificar se tudo está funcionando.


Passo 2: Execute seu Primeiro Container

Vamos começar com algo simples: executar um container com a imagem oficial do Hello World.

No terminal, execute:

docker run hello-world

O Docker vai baixar a imagem hello-world (se ainda não tiver) e executar o container. Você verá uma mensagem de boas-vindas, confirmando que o Docker está funcionando corretamente.

Vamos listar a imagem baixada utilizada para criar o container hello-world.

Execute:

docker images

Você deve ver uma lista de imagens docker parecida com:

REPOSITORY     TAG       IMAGE ID       CREATED        SIZE
hello-world    latest    f1f77a0f96b7   6 weeks ago    5.2kB

Vamos listar os containers:

docker ps

Você vai ver que nenhum container foi listado. Por que?

O que aconteceu é que o comando docker run hello-world subiu o container, executou os comandos que a imagem descrevia e por fim encerrou o container.

Para listar todos os containers, mesmo os encerrados devemos executar:

docker ps -a

Você deve ver uma lista como essa:

CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS                            PORTS                    NAMES
097c9116123b   hello-world    "/hello"                 13 minutes ago   Exited (0) 50 seconds ago                                  vigorous_driscoll

Passo 3: Crie uma Imagem Personalizada

Agora que você já sabe como rodar um container, vamos criar nossa própria imagem.

  1. Crie um diretório para o projeto:

    mkdir meu-app-node
    cd meu-app-node
  2. Inicialize um projeto Node.js:

    npm init -y
  3. Instale o Express:

    npm install express
  4. Crie um arquivo server.js com o seguinte código​:

    const express = require('express');
    const app = express();
    const PORT = process.env.PORT || 3000;
    
    app.get('/', (req, res) => {
        res.send('Olá, Docker!');
    });
    
    app.listen(PORT, () => {
        console.log('Servidor rodando em http://localhost:3000');
    });
  5. No diretório do projeto, crie um arquivo chamado Dockerfile com o seguinte conteúdo:

    # Usar a imagem oficial do Node.js
    FROM node:18
     
    # Definir o diretório de trabalho dentro do container
    WORKDIR /app
     
    # Copiar os arquivos do projeto para dentro do container
    COPY package.json package-lock.json ./
     
    # Instalar as dependências
    RUN npm install
     
    # Copiar todo o código fonte para o container
    COPY . .
     
    # Definir a porta que será exposta pelo container
    EXPOSE 3000
     
    # Comando para rodar a aplicação
    CMD ["node", "server.js"]

    Este Dockerfile cria uma imagem baseada no Node.js, copia os arquivos do projeto, instala as dependências e define o comando para iniciar a aplicação.

  6. Crie a imagem:
    No terminal, execute:

    docker build -t meu-app-node .

    Isso cria uma imagem chamada meu-app-node.

  7. Execute o container:
    Agora, execute o container com:

    docker run -p 3000:3000 meu-app-node

    A aplicação estará disponível em http://localhost:3000.

  8. Parando o container:
    Para parar o container abra um novo terminar e execute:

    docker ps
  9. Você vai ver uma lista como a seguinte:

    CONTAINER ID   IMAGE          COMMAND                  CREATED              STATUS              PORTS                    NAMES
    2b8452ce78b2   meu-app-node   "docker-entrypoint.s…"   About a minute ago   Up About a minute   0.0.0.0:3000->3000/tcp   loving_pascal
  10. Execute o comando substituindo o nome do container pelo nome gerado para seu container:

    docker stop loving_pascal

Passo 4: Use o Docker Compose para Multi-Container Apps.

  1. Para facilitar a inicialização, crie um arquivo docker-compose.yml:

    version: '3'
    services:
      app:
        build: .
        ports:
          - "3000:3000"
        volumes:
          - .:/app
        command: ["node", "server.js"]
  2. Inicie o container:

    docker-compose up
  3. Para parar o container basta digitar  cmd + C ou ctrl + C ou abrir um novo terminar e executar:

    docker-compose down

Próximos Passos

  • Aprenda comandos básicos do Docker: Explore outros comandos como docker logsdocker rm, e docker rmi.

  • Crie um Dockerfile simples: Pratique a criação de Dockerfiles para diferentes tipos de aplicações (ex: Python, Ruby, PHP).

  • Use imagens oficiais do Docker Hub: Experimente rodar containers com imagens populares, como nginxmysql, ou redis.

  • Monte volumes básicos: Aprenda a usar volumes para persistir dados, como arquivos de banco de dados ou logs.

  • Configure portas e variáveis de ambiente: Pratique expor portas e passar variáveis de ambiente para containers.

  • Explore o Docker Compose para aplicações simples: Crie um arquivo docker-compose.yml para rodar dois serviços (ex: uma aplicação web e um banco de dados).

  • Aprenda a limpar recursos: Use comandos como docker system prune para remover containers, imagens e volumes não utilizados.

  • Teste multi-container simples: Crie uma aplicação básica com um frontend e um backend, cada um em seu próprio container.

  • Pratique com projetos pequenos: Crie um projeto pessoal simples (ex: um blog ou uma API) e containerize-o.

  • Explore a documentação oficial do Docker: Leia as seções básicas para entender melhor os conceitos e funcionalidades.


Conclusão

O Docker é uma ferramenta incrivelmente poderosa para desenvolvedores, simplificando a criação e o gerenciamento de ambientes de desenvolvimento. Com ele, você pode garantir que sua aplicação funcione de forma consistente em qualquer lugar, desde sua máquina local até servidores de produção.

Se você gostou deste tutorial, compartilhe com seus amigos. E não se esqueça de explorar outros tutoriais aqui no blog para continuar aprendendo!

Visualizações: 77



Diversos

28 de março de 2025

Regex

Entendendo Expressões Regulares com Exemplos Práticos

23 de março de 2025

Segurança em Aplicações Web

Neste post, vamos explorar boas práticas de segurança que você pode implementar para proteger sua aplicação web de vulnerabilidades comuns.

21 de março de 2025

Domain-Driven Design

Atacando as Complexidades no Coração do Software

18 de março de 2025

Conceitos Básicos da Internet

Tudo o que Você Precisa Saber para Entender como a Internet Funciona

14 de março de 2025

Como Escrever Código Limpo e Fácil de Manter

Dicas Essenciais para Desenvolvedores.

27 de fevereiro de 2025

Introdução ao Git e GitHub para Iniciantes

Comece a versionar seu código hoje!

05 de abril de 2016

Inserir botão Doar do Pagseguro em seu Wordpress

Aprenda a inserir o botão Doar do Pagseguro em seu hospedado no Wordpress.com

Sérgio Toledo | Engenheiro de Software | LinkedIn | GitHub | YouTube

Todos os direitos reservados ©