O desenvolvimento de aplicativos, frequentemente envolve o gerenciamento de bancos de dados complexos, linguagens de programação, frameworks, dependências e muito mais. Além disso, você pode enfrentar problemas de compatibilidade ao trabalhar com diferentes Sistemas Operacionais (SO). Cada uma destas variáveis pode impactar negativamente o seu fluxo de trabalho.

Para resolver estes problemas, você pode começar a usar o Docker. Esta ferramenta permite que você construir e gerenciar aplicativos em ambientes de contêineres. Finalmente, o Docker pode remover muitas tarefas de configuração complicadas e tornar o desenvolvimento mais fácil e eficiente.

Neste artigo, vamos responder à pergunta: “O que é Docker?” e explicar como funciona. Depois, mostraremos alguns dos seus principais casos de uso e como começar como um iniciante. Vamos começar!

O que é Docker?

Então, o que é exatamente o Docker? É uma plataforma de código aberto (open-source) para o desenvolvimento de aplicativos em uma caixa de areia. Seus ambientes virtualizados e leves são conhecidos como contêineres:

Docker
Docker

Enquanto os contêineres existem desde 1979, a Docker os tornou mais acessíveis. Usando o Docker, os desenvolvedores podem construir, testar e implantar seus aplicativos localmente ou em um servidor de produção.

Desde o lançamento do Docker 1.0 em 2014, ele padronizou o uso de contêineres tanto para desenvolvedores individuais quanto para empresas. Agora, ele tem mais de 13 milhões de usuários, incluindo grandes empresas como Netflix, Target, e Adobe:

Empresas usando Docker
Empresas usando Docker

Além disso, a adoção do Docker está aumentando a cada ano. De acordo com a Datadog, quase 25% das empresas começaram a usar o Docker para monitorar seus aplicativos. Desde 2015, esta porcentagem cresceu de 3 a 5 pontos percentuais a cada ano:

Aumento do uso do Docker pelas empresas
Aumento do uso do Docker pelas empresas (Fonte: Datadog)

Como podemos ver, o Docker se tornou uma plataforma popular para o desenvolvimento e implantação de aplicativos. Para entender melhor sua popularidade, vamos verificar a forma como o software Docker funciona.

Docker vs Máquinas Virtuais

No Docker, você pode criar pacotes de um aplicativo em uma unidade padronizada, que pode ser usada para o desenvolvimento de software. Esta unidade, ou contêiner, inclui a codificação do aplicativo e dependências para que ele possa ser facilmente executado em qualquer ambiente de computação.

Antes do Docker, às empresas frequentemente utilizavam máquinas virtuais (VMs) para executar aplicativos. Estas podem emular computadores físicos, permitindo aos desenvolvedores transformar um servidor em múltiplos servidores. No entanto, esta abordagem pode vir com alguns pontos negativos.

Cada Máquina Virtual contém uma cópia completa do SO e do aplicativo, assim como os binários e bibliotecas necessários. Estes arquivos podem ocupar dezenas de GBs em um computador. Além disso, virtualizar o hardware para um sistema operacional convidado pode exigir uma sobrecarga substancial.

Ao invés de virtualizar o hardware, os contêineres virtualizam o sistema operacional. No Docker, os contêineres são abstrações na camada do aplicativo que podem conter tanto o código quanto as dependências. Na mesma máquina, vários contêineres podem funcionar como processos isolados:

Comparação de Docker e Máquinas Virtuais
Comparação de Docker e Máquinas Virtuais (Fonte: ResearchGate)

Como resultado, os contêineres Docker normalmente ocupam menos espaço. Eles também podem conter mais aplicativos sem tantas Máquinas virtuais e Sistemas Operacionais.

Como funciona o Docker?

Imagine que você está tentando transportar uma carga de um lugar para outro. Na era moderna, você pode fazer isso facilmente com os contêineres. Estes irão manter certos itens juntos em um ambiente selado, permitindo que sejam transportados por navios, trens ou aviões.

Docker funciona de uma maneira muito similar. Simplificando, o Docker padronizou o método de desenvolvimento e implantação de software.

O Docker trabalha com contêineres. Estes podem ter componentes reutilizáveis, como Python, Node, dependências e muito mais. Então, você pode implantar os contêineres em qualquer lugar sem se preocupar com problemas de compatibilidade.

Docker pode ser complicado no início, então vamos discutir todos os principais componentes envolvidos neste software. Uma vez que você entender essas funcionalidades-chave, você conseguirá acelerar o desenvolvimento de seus aplicativos!

Docker Engine

Docker Engine é a tecnologia cliente-servidor para construção e aplicativos de contêineres no Docker. Essencialmente, ele suporta todas às tarefas envolvidas na execução do seu aplicativo baseada em contêineres:

Diagrama do Docker Egine
Diagrama do Docker Egine (Fonte: Docker)

Estes são os principais componentes no Docker Engine:

  • Docker Daemon: Gerencia imagens do Docker, contêineres, redes e volumes. Ele também escuta as solicitações e os processos do Docker API.
  • Docker Engine REST API: Uma API desenvolvida pelo Docker que interage com o daemon.
  • Docker CLI: A interface de linha de comando para a comunicação com o daemon Docker.

Com o Docker Engine, você pode executar aplicativos em contêineres em qualquer infraestrutura. Esta configuração contribui para o tempo de execução de contêineres do Docker, líder da indústria.

Docker Image

Uma imagem Docker é um pacote executável de software que inclui todo o código-fonte, dependências e ferramentas necessárias para executar um aplicativo. As imagens são modelos apenas de leitura que fornecem instruções para a criação de um contêiner.

Você pode entender melhor as imagens do Docker pensando nelas como diagramas. Elas contêm instantâneos do que um contêiner incluirá quando ele funcionar.

Em uma imagem, há múltiplas camadas empilhadas. Se você quiser construir uma imagem de servidor web, por exemplo, você pode incluir o Ubuntu Linux no início. Em seguida, você pode colocar o Apache e a codificação PHP no topo.

Ao fazer uma imagem Docker, é melhor colocar às camadas mais variáveis mais altas na pilha. Então, se você precisar fazer uma mudança, você não precisará reconstruir a imagem inteira.

Docker Container

Como discutimos anteriormente, os contêineres são partes vitais do Docker. Dito de forma simples, um Docker Container é uma área isolada para um aplicativo funcionar sem afetar o resto do sistema. Esta unidade de software irá empacotar todo o código e dependências para que ela possa ser facilmente transferida de um aplicativo para outra.

Aqui estão alguns benefícios do uso de contêineres Docker:

  • Padrão: Embora existam contêineres há décadas, o Docker criou o padrão da indústria para seu uso. Os contêineres do Docker são incrivelmente portáteis e fáceis de usar.
  • Leve: Como os contêineres compartilham o kernel do sistema operacional, você não precisa de um sistema operacional diferente para cada aplicativo. Como resultado, seu aplicativo pode ser executado com mais eficiência e reduzir os custos de servidor e licenciamento.
  • Seguro: Ao contrário das Máquinas Virtuais, os contêineres isolam os aplicativos, o que as torna mais seguras. Com o Docker, seus contêineres terão capacidade padrão de isolamento.

Os contêineres do Docker oferecem mais vantagens do que as Máquinas Virtuais. Embora eles isolam e alocam recursos de maneira similar, os contêineres são normalmente mais portáteis, eficientes e seguros.

Docker Compose

Docker Compose é uma ferramenta projetada para operar múltiplos contêineres como um único serviço. Caso o seu aplicativo requer ambos NGINX e MySQL, Docker Compose permite que você crie um arquivo que inicia ambos os contêineres. Isto evita a necessidade de iniciar cada um deles separadamente.

Aqui estão os três passos básicos ao usar o Docker Compose:

  1. Crie um Dockerfile para definir o ambiente do aplicativo para que ele possa ser reproduzido.
  2. Defina cada um dos serviços do seu aplicativo em um arquivo docker-compose.yml para que eles possam rodar em um ambiente isolado.
  3. Use o comando Docker Compose para iniciar e rodar seu aplicativo.

Essencialmente, o Docker Compose permite que múltiplos contêineres funcionem isoladamente. Entretanto, eles podem interagir uns com os outros quando necessário.

Por exemplo, Compose pode ajudá-lo a criar e configurar as dependências de serviço do seu aplicativo, tais como bancos de dados, caches, ou APIs de serviços web.

Dockerfile

Um Dockerfile é um documento de texto que inclui instruções para a construção de imagens Docker. Ao ler este arquivo, o Docker irá automaticamente construir novas imagens.

O comando docker build irá criar uma imagem a partir de um Dockerfile e um contexto. Este contexto é um conjunto de arquivos que se encontra em um caminho ou URL especificado.

Primeiramente, digite o seguinte comando:

docker build

Isto enviará todo o contexto para o daemon do Docker. Para apontar para um Dockerfile em seu sistema de arquivos, use este comando:

docker build -f /path/to/a/Dockerfile

Se a construção for bem sucedida, você pode especificar um repositório e uma tag onde você quer salvar a nova imagem:

docker build -t shykes/myapp

Então, o daemon Docker fará uma validação do Dockerfile. Caso houver um problema com a sintaxe, ele retornará um erro.

Docker Desktop

Para começar a usar o Docker em seu ambiente Mac, Linux ou Windows, você pode instalar o Docker Desktop. Ele fornece uma interface simples e fácil de usar para gerenciar contêineres, aplicativos e imagens em seu computador pessoal:

Docker Desktop
Docker Desktop

Com o Docker Desktop, você não terá que usar a linha de comando para realizar tarefas essenciais. Isto pode acelerar o fluxo de trabalho de desenvolvimento:

Painel de controle do Docker Desktop
Painel de controle do Docker Desktop

Ele também vem com um Mercado de Extensões integrado que facilita começar a usar ferramentas de desenvolvimento de terceiros. Estas incluem software para depuração, teste e segurança de seus aplicativos:

Mercado de Extensões do Docker Desktop
Mercado de Extensões do Docker Desktop

Além disso, o Docker Desktop é gratuito para uso pessoal e de pequenas empresas. Entretanto, tenha em mente que as empresas maiores precisarão comprar uma assinatura, a partir de $5 por mês.

Docker Hub

O Docker Hub é uma plataforma onde você pode encontrar e compartilhar imagens de contêineres. É o maior repositório de imagens de contêineres do mundo, com recursos de desenvolvedores comunitários, projetos open-source e Independent Software Vendors (ISV):

Docker Hub images
Docker Hub images

Aqui estão algumas funcionalidades incluídas no Docker Hub:

  • Repositórios para mover e baixar imagens do contêiner
  • Criar equipes e organizações com acesso a repositórios privados
  • Docker Imagens oficiais
  • Imagens do Docker Verified Publisher
  • Criar imagens de contêineres do GitHub ou Bitbucket e movê-las para o Docker Hub
  • Ações de gatilho com webhooks

Para começar a usar o Docker Hub, você precisará criar seu primeiro repositório. Você simplesmente terá que nomeá-lo e especificar sua visibilidade:

Criar um repositório Docker Hub
Criar um repositório Docker Hub

Então, você pode baixar o Docker Desktop e começar a baixar e mover imagens de contêineres do Docker Hub. Você verá estes empurrões sob a última tag em seu novo repositório.

Para que é usado o Docker?

O Docker é projetado principalmente para DevOps e desenvolvedores. Esta ferramenta permite que os desenvolvedores criem, customizem e implementem aplicativos como contêineres portáteis e leves. Esta configuração empacota todas às suas dependências em uma única unidade, que pode ser executada em praticamente qualquer sistema operacional.

Aqui está um caso típico de uso para o Docker:

  1. Os desenvolvedores escrevem o código localmente, depois o compartilham com suas equipes usando contêineres do Docker.
  2. Eles movem o aplicativo para um ambiente de testes onde é fácil realizar testes automáticos e manuais.
  3. Quando os bugs são localizados, os desenvolvedores resolvem os problemas no ambiente de desenvolvimento. Para testar às mudanças, eles os redistribuem no ambiente de teste.
  4. Após os desenvolvedores corrigirem o bug, a imagem atualizada é enviada para o ambiente de produção.

Usando este fluxo de trabalho, você pode testar novos softwares sem realizar uma instalação manual. Por exemplo, você pode achar difícil e entediante configurar um servidor MySQL. Ao invés disso, você pode usar o Docker CLI para executar esta tarefa em apenas um comando.

Como Docker tem seu próprio CLI, iniciantes podem usá-lo para aprender a operar uma linha de comando. Após configurar o Docker em um ambiente Linux, você pode começar a usar os comandos Linux. Então, você pode executar tarefas administrativas do sistema mais rápida e eficientemente.

Além disso, se você quiser começar a desenvolver sites WordPress locais e off-line, você pode usar o Docker para instalar o DevKinsta. Nossa suíte de desenvolvimento é baseada no Docker, permitindo que você crie e gerencie sites como contêineres individuais:

Os sites WordPress do DevKinsta
Os sites WordPress do DevKinsta

Em comparação com outras ferramentas de desenvolvimento local, a DevKinsta usa menos recursos enquanto mantém um desempenho quase nativo. Com um site DevKinsta com Docker, você pode desenvolver o WordPress de forma rápida e segura. Além disso, DevKinsta facilita o envio de e-mails de teste e a realização de outras tarefas administrativas.

Prós e contras do uso do Docker

Agora que você entende os componentes principais do Docker, vamos discutir suas principais vantagens e desvantagens. Então você pode decidir se ele será útil para gerenciar seus aplicativos de software.

Prós

Como desenvolvedor, alguns de seus trabalhos podem se tornar tediosos e repetitivos quando realizados manualmente. Com os contêineres Docker, você pode programar a automação destas tarefas. O uso de cron jobs pode reduzir significativamente sua carga de trabalho e otimizar seu tempo.

Além disso, o Docker é altamente portátil. Ele permite que cada membro da sua equipe de desenvolvimento trabalhe em aplicativos, mesmo com servidores, máquinas ou sistemas operacionais diferentes. Esta configuração pode eliminar muitos dos problemas que surgem das incompatibilidades da plataforma.

Quando comparado com às Máquinas Virtuais, os contêineres do Docker podem economizar mais espaço. Embora Docker e Máquinas Virtuais trabalhem de forma similar, Docker é muito mais leve.

Além disso, a Docker tem uma comunidade robusta. Ao se juntar aos eventos da comunidade Docker, você pode se encontrar e se conectar com outros usuários Docker tanto presencialmente quanto on-line:

Comunidade Docker
Comunidade Docker

Você também poderá navegar pelos extensos fóruns comunitários do Docker. Se você é um iniciante, estas discussões podem ajudá-lo a obter conselhos sobre o uso desta plataforma.

Contras

Como mencionamos anteriormente, o Docker pode ser mais eficiente que às Máquinas Virtuais. Entretanto, rodar aplicativos em um servidor físico normalmente é significativamente mais rápido.

O Docker também pode envolver uma curva de aprendizado íngreme. Ele não é projetado para executar aplicativos com uma Interface Gráfica de Usuário (GUI). Isto significa que você precisará aprender a linha de comando, o que pode ser um desafio para iniciantes.

Finalmente, os contêineres do Docker funcionarão no sistema operacional de um provedor de hospedagem de sites. A máquina pode ficar comprometida se algum software malicioso estiver escondido nesses contêineres.

Como começar a usar o Docker

Para começar a usar o Docker, você terá que visitar o site principal. Depois, baixe a versão compatível para o sistema operacional do seu computador.

Se você tem um computador Mac, você precisará escolher a versão Docker para um chip Intel ou para um chip Apple. Há também opções para usuários Windows e Linux.

Uma vez que você abra o arquivo baixado, ele instalará o Docker Desktop no seu computador. Em seguida, abra o Docker Hub e crie uma nova conta:

Criando uma conta no Docker
Criando uma conta no Docker

Agora você pode abrir o Docker Desktop e realizar o login. Então, abra sua linha de comando ou janela de bash e execute este comando:

docker run -d -p 80:80 docker/getting-started

Assim que você fizer isso, você verá um novo contêiner no painel do seu Docker Desktop. Seu nome será gerado aleatoriamente para sua conta:

Novo contêiner Docker
Novo contêiner Docker

Você também terá uma nova imagem do Docker. Se você navegar para a aba Images, você verá que uma imagem de docker/getting-started está em uso:

Nova imagem do Docker
Nova imagem do Docker

Agora você tem tudo o que precisa para começar a gerenciar seus contêineres locais!

Resumo

Se você tem que gerenciar múltiplos aplicativos, Docker pode ser uma ferramenta eficaz para organizá-las independentemente. Como ele usa contêineres, Docker pode ajudá-lo a desenvolver cada aplicativo sem o risco de conflito de linguagens de programação, bibliotecas ou frameworks.

Embora o Docker seja frequentemente mais eficiente que uma Máquina Virtual (VM), trabalhar em um servidor físico pode ser mais rápido. Como ele também depende de uma interface de linha de comando, Docker também pode não ser uma grande escolha para iniciantes absolutos.

Como um desenvolvedor WordPress, você provavelmente precisará criar ambientes de teste locais rapidamente. Usando o DevKinsta, você pode construir sites WordPress baseados em Docker. Então você pode começar a desenvolver temas e plugins sem conflitos!