Blog Desmistificando o Docker: Uma Jornada Detalhada pelo Mundo dos Contêineres

Desmistificando o Docker: Uma Jornada Detalhada pelo Mundo dos Contêineres

Desmistificando o Docker: Uma Jornada Detalhada pelo Mundo dos Contêineres post thumbnail image

No universo da tecnologia, a gestão eficiente de ambientes de desenvolvimento, teste e produção é crucial. O Docker, uma plataforma de contêineres de código aberto, se destaca como uma ferramenta essencial nesse cenário. Este artigo visa desmistificar o Docker, explorando desde seus conceitos fundamentais até exemplos práticos de uso.

Docker é uma plataforma de código aberto que permite a automação, criação, gerenciamento e provisionamento de ambientes por meio de contêineres. Os contêineres são unidades leves e autossuficientes que encapsulam todos os elementos necessários para executar um aplicativo, incluindo código, bibliotecas, dependências e configurações do ambiente.

Docker simplifica o processo de desenvolvimento, teste e implantação de aplicativos, garantindo que eles funcionem consistentemente em diferentes ambientes. Basicamente encapsulamos em uma imagem tudo que é necessário para que nossa solução funcione, por exemplo: uma API desenvolvida em Delphi que acesse um banco de dados em Firebird, precisa do cliente do FB para acessar o banco, seja local ou externamente. Em uma imagem docker distribuiremos nosso executável da API juntamente com o client do Firebird. Com base nesse exemplo, podemos entender como poderíamos fazer para distribuir nossas apis em diferentes cenários.

Componentes Principais:

  1. Imagens Docker: São modelos de sistemas de arquivos que contêm o código-fonte, as bibliotecas, as dependências e outros elementos necessários para executar uma aplicação. As imagens são a base para a criação de contêineres.
  2. Contêineres Docker: São instâncias em tempo de execução de uma imagem Docker. Eles isolam e executam aplicativos de forma consistente, independentemente do ambiente subjacente. Cada contêiner compartilha o mesmo kernel do sistema operacional, mas é isolado do restante do sistema, proporcionando consistência e portabilidade.
  3. Dockerfile: É um arquivo de configuração que contém instruções passo a passo para construir uma imagem Docker. Define o ambiente, as dependências e os comandos necessários para configurar o contêiner.
  4. Docker Hub: É um repositório público de imagens Docker, onde os desenvolvedores podem compartilhar, armazenar e distribuir suas imagens. O Docker Hub simplifica o processo de descoberta e utilização de imagens prontas para uso.

Funcionamento:

  • Isolamento: Docker utiliza recursos do kernel do sistema operacional para fornecer isolamento entre os contêineres e o ambiente hospedeiro, garantindo que as dependências não entrem em conflito.
  • Eficiência: Ao compartilhar o kernel do sistema operacional, os contêineres são mais leves e iniciam mais rapidamente do que máquinas virtuais tradicionais, tornando o processo de desenvolvimento e implantação mais eficiente.

Principais Conceitos:

  • Portabilidade: Contêineres garantem que um aplicativo funcione de maneira consistente em diferentes ambientes, desde o desenvolvimento até a produção.
  • Consistência: As imagens Docker encapsulam todas as dependências, garantindo que a aplicação se comporte da mesma forma em diferentes estágios do ciclo de vida.
  • Escalabilidade: Docker facilita a escalabilidade horizontal, permitindo a execução de várias instâncias de aplicativos de forma rápida e eficiente.

Docker oferece uma abordagem inovadora para o desenvolvimento e implantação de aplicativos, fornecendo consistência, portabilidade e eficiência. Ao encapsular aplicações em contêineres, os desenvolvedores podem garantir que seus aplicativos funcionem de maneira confiável em diversos ambientes, simplificando o processo de desenvolvimento, teste e produção.

Quando usar o Docker é a melhor opção? Docker é ideal em situações onde a consistência, portabilidade e eficiência na implantação são cruciais. É particularmente útil em arquiteturas de microsserviços, ambientes de desenvolvimento e implantações em nuvem.

Costumo citar sempre a Amazon em meus artigos e vídeos, mas a pedido de leitores e seguidores:

Serviços Cloud além do Amazon AWS para Docker: Além da AWS, você pode utilizar o Docker em serviços de nuvem como Google Cloud Platform (GCP), Microsoft Azure, IBM Cloud, e diversos provedores de serviços especializados em contêineres, como o Docker Hub, Google Container Registry, e Azure Container Registry.

Sendo mais detalhista e específico, vejamos um pouco sobre Docker:

Imagens Docker:

  • Imagens são a espinha dorsal do Docker, contendo o sistema de arquivos com o código, bibliotecas, dependências e configurações necessárias.
  • Exemplo: docker pull ubuntu:18.04

O comando acima fará o download de uma imagem docker do Ubuntu versão 18:04 para ser usada localmente em um equipamento Windows ou Linux. O comando, evidentemente, é executado no Terminal e necessita da instalação prévia do Docker. Veremos mais a seguinte um pouco sobre instalação.

Contêineres Docker:

  • Contêineres são instâncias em tempo de execução de uma imagem Docker, oferecendo isolamento e eficiência. Isso quer dizer que podemos ter várias instâncias da mesma imagem docker no ar para realizar diferentes teste ou simular diferentes cenários.

    É comum comparar uma imagem docker a uma máquina virtual (Veremos mais adiante as diferenças), mas o conceito é bastante diferente.
  • Exemplo: docker run -it ubuntu:18.04 /bin/bash

No como acima estamos executando a instância docker que baixamos anteriormente e quando iniciada o /bin/bash, terminal no Linux, será executado.

Dockerfile:

O Dockerfile é o arquivo que criamos e definimos as configurações, requisitos e tudo que precisa ser executado em um conteiner.

  • Um arquivo de configuração que define passo a passo como construir uma imagem Docker.
  • Exemplo:

No exemplo acima estamos construindo uma imagem baseada em Übuntu 18.04, fazendo update no Linux e instalando o NGINX (Caso não saiba o que é NGINX leia esse artigo) e em seguida executando o NGINX.

Vantagens e Casos de Uso:

  • Portabilidade e Consistência:
    • Docker garante que o ambiente de desenvolvimento seja idêntico ao de produção, eliminando problemas de “funciona na minha máquina”.
    • Exemplo: Desenvolver em um ambiente local e implantar em um servidor sem surpresas.
  • Eficiência e Escalabilidade:
    • Contêineres compartilham o mesmo kernel, economizando recursos e permitindo a rápida escalabilidade horizontal.
    • Exemplo: Escalar um serviço web para suportar aumento de tráfego.
  • Facilidade de Manutenção:
    • Atualizações e correções são aplicadas nas imagens, garantindo consistência em todo o ciclo de vida do aplicativo.
    • Exemplo: Aplicar patches de segurança sem impactar outras partes do sistema.

Exemplos Práticos

Existem milhares de exemplos que poderia citar aqui para que ficasse fácil o entendimento de onde utilizar o docker. Vejamos um deles. Nesse caso vamos executar um um conteiner nginx.

Executando um Contêiner Nginx:

  • docker run -d -p 8080:80
  • Acesse http://localhost:8080 para ver o servidor Nginx em execução.

A partir da execução do primeiro comando, run, teremos um conteiner NGINX em execução pronto para responder a comandos. Nesse caso ele apenas sobe uma instância do NGINX que por sua vez fica disponível na porta 8080, ou seja, a partir do momento que tentarmos acessar o endereço http://localhost:8080, bateremos diretamente na porta de entrada do NGINX exibindo a página de boas vindas.

Um fato interessante aqui. A imagem docker do nginx é baixada para o computador onde o comando foi realizado usando docker pull nginx. Caso não tenha executado esse comando antes, o docker fará uma verificação e baixará a image no momento do docker run caso ela não exista localmente.

Construindo e Executando uma Aplicação Node.js

Como mencionado, podemos e devemos criar nossas iamgems docker. Para isso escrevemos um arquivo chamado Dockerfile (sem extensão) e definimos nesse arquivo o que desejamos na imagem que posteriormente se transformará em nosso conteiner.

  • Crie um arquivo Dockerfile:

No código acima estamos criando uma imagem partindo do node 14. Definimos um diretório de trabalho e copiamos os pacotes necessários para ./ a pasta raiz. em seguida instalamos o node usando o comando npm. Se não está familiarizado com isso, não se preocupe, apenas concentre-se em entender os princípios da criação da imagem. Em seguida nós expomos a porta 3000, onde o Node.js estará rodando, e executamos o CMD.

Uma vez criado arquivo, basta que façamos o build, a construção da imagem.

O comando build constrói a imagem com o nome definido e o comando run a executa.

Diferenças entre Máquinas Virtuais (VMs) e Docker:

Ambas as máquinas virtuais (VMs) e contêineres Docker são tecnologias que visam virtualizar e isolar ambientes de execução, mas há diferenças significativas em suas abordagens e características. Vamos explorar essas diferenças:

  1. Arquitetura:
    • VMs: Cada VM inclui um sistema operacional completo, com seu próprio kernel, drivers e recursos. Virtualizadores (como VMware, VirtualBox) gerenciam várias VMs, criando uma camada de virtualização completa.
    • Docker: Compartilha o kernel do sistema operacional hospedeiro, eliminando a necessidade de múltiplos sistemas operacionais completos. Contêineres compartilham o kernel, mas isolam os processos e recursos, proporcionando uma abordagem mais leve.
  2. Isolamento:
    • VMs: Oferecem isolamento completo, já que cada VM possui seu próprio sistema operacional. Isso pode levar a uma utilização mais intensiva de recursos.
    • Docker: Usa namespaces e cgroups do kernel para isolar processos, redes e sistemas de arquivos. Embora os contêineres sejam isolados, eles compartilham o mesmo kernel, tornando-os mais eficientes.
  3. Desempenho:
    • VMs: Tendem a ter maior sobrecarga de recursos, devido à necessidade de executar múltiplos sistemas operacionais completos.
    • Docker: Por compartilhar o kernel, contêineres são mais leves e iniciam mais rapidamente. Isso os torna mais eficientes em termos de recursos e tempo de inicialização.
  4. Tamanho e Velocidade:
    • VMs: Requerem um tamanho considerável de armazenamento para a imagem do sistema operacional completo. O tempo de inicialização pode ser mais longo.
    • Docker: As imagens são menores e mais rápidas de baixar, pois contêm apenas o necessário para executar o aplicativo. Os contêineres iniciam rapidamente.
  5. Implantação e Escalabilidade:
    • VMs: Tendem a ser mais lentas para implantar e escalar devido à sobrecarga adicional do sistema operacional completo.
    • Docker: Facilita a implantação rápida e a escalabilidade horizontal, permitindo a execução de vários contêineres em um host.
  6. Gerenciamento de Recursos:
    • VMs: Alocam recursos fixos, mesmo que não estejam sendo totalmente utilizados, levando a possível subutilização.
    • Docker: Usa cgroups para alocar recursos dinamicamente, permitindo um melhor aproveitamento e adaptação às demandas do aplicativo.

As VMs e os contêineres Docker são ferramentas poderosas, cada uma com suas vantagens e casos de uso específicos. Enquanto as VMs oferecem isolamento mais robusto, os contêineres Docker se destacam pela eficiência, velocidade e facilidade de implantação. A escolha entre eles dependerá das necessidades específicas do projeto e dos requisitos de recursos. Em muitos casos, a combinação de ambas as tecnologias é adotada para tirar o melhor proveito de suas características individuais.

Instalando o Docker Desktop no Windows: Um Guia Passo a Passo

O Docker Desktop é uma ferramenta poderosa que permite executar contêineres Docker em sistemas Windows de maneira fácil e eficiente. Siga este guia passo a passo para instalar o Docker Desktop no seu ambiente Windows:

Devo alertá-lo de que o Docker Desktop é uma execelente alternativa para se estudar docker no Windows, mas infelizmente há um custo. O Docker Desktop pode causar lentidão no equipamento, portanto levante o Docker Destkop somente durante os estudos e depois feche a aplicação e pare no serviço no gerenciador de serviços do Windows. Uma alternativa é instalar o WSL (Windows Subsistema para Linux) no seu Windows 10 ou 11 e nele instalar o Docker, é muito mais leve.

Requisitos do Sistema:

Antes de começar, certifique-se de que seu sistema atenda aos requisitos mínimos para instalação do Docker Desktop:

  • Um sistema operacional Windows 10 com suporte a Hyper-V (Pro, Enterprise ou Education).
  • Virtualização habilitada no BIOS/UEFI.
  • No mínimo, 4 GB de RAM.

Passo 1: Faça o Download do Docker Desktop:

Acesse o site oficial do Docker para baixar o instalador do Docker Desktop. Abra o navegador e vá para: https://www.docker.com/products/docker-desktop

Passo 2: Baixe o Instalador:

Clique no botão “Get Docker Desktop” para iniciar o download do instalador. Aguarde até que o download seja concluído.

Passo 3: Execute o Instalador:

Após o download, execute o arquivo de instalação (normalmente chamado “Docker Desktop Installer.exe”).

Passo 4: Configure as Opções de Instalação:

Durante o processo de instalação, você será apresentado a algumas opções de configuração:

  • Ative o Hyper-V: O Docker Desktop requer a ativação do Hyper-V. Se ainda não estiver ativado, o instalador solicitará permissões para fazer isso. Reinicie o computador, se necessário.
  • Instalação do WSL 2: O Docker Desktop usa o Windows Subsystem for Linux 2 (WSL 2). O instalador oferecerá a opção de instalar automaticamente a última versão do WSL 2.
  • Ative o Windows Features: O instalador pode solicitar a ativação de recursos do Windows necessários para o Docker Desktop. Concordar com essas solicitações é essencial.

Passo 5: Conclua a Instalação:

Aguarde até que o instalador conclua a instalação do Docker Desktop. Isso pode levar alguns minutos, dependendo da configuração do seu sistema.

Passo 6: Inicie o Docker Desktop:

Após a conclusão da instalação, o Docker Desktop será iniciado automaticamente. Um ícone do Docker aparecerá na barra de tarefas.

Passo 7: Verifique a Instalação:

Para garantir que a instalação foi bem-sucedida, abra o PowerShell ou o prompt de comando e execute o seguinte comando para verificar a versão do Docker:

Se a instalação foi bem-sucedida, você verá a versão do Docker instalada no seu sistema.

Agora você está pronto para começar a usar o Docker Desktop no seu ambiente Windows. Explore as capacidades do Docker, crie e execute contêineres para facilitar o desenvolvimento e implantação de suas aplicações.

Você pode aprender mais no meu canal do YouTube especificamente nesse vídeo:

Instalando o Docker no WSL (Windows Subsystem for Linux) no Windows 10 ou 11:

Se você deseja utilizar o Docker no WSL. Como mencionei anteriormente é mais leve e rápido. E um fato importante é que nesse caso usará 100% de comandos no terminal o que é bastante recomendado.

Ativando o WSL:

  • Certifique-se de que o WSL esteja ativado no Windows. Você pode ativar o recurso WSL nas configurações do Windows ou usando o PowerShell com privilégios elevados:
  1. Instalando uma Distribuição Linux no WSL:
    • Baixe uma distribuição Linux da Microsoft Store, como o Ubuntu.
    • Instale a distribuição e configure um usuário e senha durante a instalação.
  2. Atualizando o WSL 2:
    • Certifique-se de estar usando o WSL 2 para obter melhor desempenho e suporte ao Docker. Você pode atualizar para o WSL 2 seguindo as instruções na documentação oficial da Microsoft.
  3. Instalando o Docker no WSL:
    • Baixe e instale o Docker Desktop no Windows como mencionado anteriormente.
    • Durante a instalação do Docker Desktop, certifique-se de habilitar a integração com o WSL e selecione a distribuição Linux instalada.
  4. Testando a Instalação no WSL:
    • No terminal do WSL, execute o comando docker run hello-world para testar a instalação do Docker no ambiente Linux do WSL.

Com esses passos, você terá o Docker Desktop instalado no Windows e configurado para uso no ambiente Windows Subsystem for Linux (WSL). Essa combinação oferece uma experiência de desenvolvimento eficiente e consistente em ambientes Windows com a flexibilidade e poder do Docker.

Conclusão

Ao longo deste artigo, exploramos detalhadamente o Docker, uma ferramenta revolucionária que simplifica o desenvolvimento e a implantação de aplicativos por meio de contêineres. Compreendemos os fundamentos do Docker, destacando suas principais vantagens, como portabilidade, eficiência e consistência, tornando-o uma escolha valiosa para desenvolvedores e equipes de operações.

Demos passos práticos desde a instalação do Docker Desktop no Windows, uma experiência amigável e acessível para usuários do sistema operacional da Microsoft. Através de exemplos simples, demonstramos como executar contêineres Nginx e construir uma aplicação Node.js, ilustrando a facilidade de uso e a flexibilidade oferecida pelo Docker.

Além disso, exploramos a integração do Docker com o Windows Subsystem for Linux (WSL), destacando como essa combinação proporciona um ambiente de desenvolvimento poderoso e coeso. A instalação do Docker no WSL abre portas para um ecossistema que harmoniza as vantagens do Windows e as características robustas do Linux, proporcionando uma experiência integrada e eficiente.

Ao considerar a instalação do Docker no Windows, seja nativamente ou através do WSL, os desenvolvedores têm em mãos uma ferramenta que transcende barreiras de ambientes, garantindo que as aplicações se comportem de maneira consistente desde o desenvolvimento até a produção. A escalabilidade, a manutenção simplificada e a gestão eficiente de recursos são apenas alguns dos benefícios que o Docker oferece a desenvolvedores e equipes de operações.

Portanto, ao embarcar nesta jornada com o Docker no ecossistema Windows, abraçamos uma abordagem inovadora e eficiente para o desenvolvimento e a implantação de aplicativos. Que essa compreensão aprofundada e os exemplos práticos fornecidos sirvam como guia para maximizar o potencial do Docker em suas iniciativas de desenvolvimento, capacitando você a enfrentar os desafios modernos da tecnologia com confiança e eficiência.

Comente o que achou e o que gostaria de aprender mais 😉

Comunidade no Telegram

🚀Comente no campo abaixo 👇👇👇 o que achou e qual sua dúvida.

Te vejo na próxima

Te vejo por ai

Adriano Santos

1 thought on “Desmistificando o Docker: Uma Jornada Detalhada pelo Mundo dos Contêineres”

Deixe sua resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Posts Relacionados