Docker: tudo o que você precisa saber

Neste artigo você vai ver:

À medida que a abordagem de nuvem está ganhando popularidade, muitas empresas começaram a adotar práticas e conceitos de nuvem como a conteinerização. Com isso, ferramentas DevOps, como o Docker, estão em alta demanda.

Neste artigo, você vai descobrir o que é Docker, o que precisa saber para usá-lo e qual a sua função no universo de desenvolvimento, além de conhecer mais sobre contêineres e suas imagens.

A relevância disso? 

Meme com uma cena de De Volta para o Futuro com Doc, um homem branco, idoso, de cabelos brancos e segurando um controle remoto; e do seu lado está Marty, um homem branco, jovem, de cabelos castanhos escuros e segurando uma filmadora dos anos 80. Na imagem está escrito “In the future, everything is dockerized”.
Meme com uma cena de De Volta para o Futuro brincando com a ideia que no futuro tudo será “dockerizado”.

De acordo com uma pesquisa do Gartner, mais de 75% das organizações globais estarão executando contêineres em produção em 2022. Atualmente, o Docker Hub contém mais de um milhão de imagens de contêiner, incluindo imagens certificadas e fornecidas pela comunidade.

Agora vamos aprender mais sobre esse universo.

Mas o que é Docker?

É uma ferramenta Open Source para desenvolvimento, envio e execução de aplicativos. Ele permite que você separe os aplicativos de sua infraestrutura, para que você possa entregar um software rapidamente. 

Se Docker se tornou uma ferramenta padrão para pessoas desenvolvedoras de software e administradoras de sistemas é porque é uma maneira elegante de iniciar aplicativos rapidamente sem afetar o resto do seu sistema, pois permite gerenciar sua infraestrutura da mesma forma que gerencia seus aplicativos, usando o conceito de contêineres.

Meme da animação Toy Story com dois brinquedos em primeiro plano, em um quarto. Woody, de roupa de cowboy, está ao lado de Buzz, com traje espacial, que aponta para cima. Por escrito está: “Container, container… everywhere”, dando a ideia de que os contêineres estão em todos os lugares.
Meme de Toy Story falando sobre os contêineres estarem em todos os lugares.

O conceito de contêineres

Um contêiner fornece um ambiente isolado semelhante a uma máquina virtual (VM). Mas ao contrário das VMs, os contêineres do Docker não executam um sistema operacional completo. Eles compartilham o kernel do seu host e o hardware da máquina host com, aproximadamente, a mesma sobrecarga dos processos iniciados diretamente na máquina host.

Observação: A ferramenta utiliza, na verdade, o kernel subjacente e não o sistema operacional. Portanto, mesmo que a máquina na qual o Docker está instalado use Ubuntu, Docker ainda pode instalar contêineres baseados no Fedora, etc., pois o kernel subjacente é o mesmo (neste caso, Linux).

Os contêineres encapsulam tudo o que é necessário para executar um aplicativo, desde as dependências do pacote do Sistema Operacional (SO), até seu próprio código-fonte. 

Docker permite automatizar a implantação de aplicativos no ambiente do contêiner. Para isso, a pessoa usuária define as etapas de criação de um contêiner como instruções em um Dockerfile e Docker usa ele para construir uma imagem.

Tá, e o que são imagens?

As imagens definem o software disponível nos contêineres. Uma imagem do Docker contém código de aplicativo, bibliotecas, ferramentas, dependências e outros arquivos necessários para executar um aplicativo. Quando alguém executa uma imagem, ela pode se tornar uma ou várias instâncias de um contêiner. 

Em outras palavras, se você criar uma imagem, qualquer user do poderá iniciar seu aplicativo através de um comando (docker run).

Vantagens de usar contêineres

Uma das principais vantagens de usar contêineres é a garantia de que todos os ambientes são idênticos:

  • Uma nova pessoa na equipe poderia usar o Docker para configurar sua própria instância de desenvolvimento;
  • É possível usar a mesma imagem do Docker para implantar localmente e em produção. Assim, o ambiente corresponderá exatamente à sua instância local, evitando cenários “funciona na minha máquina”.
Meme de uma cena do filme Em Busca da Terra do Nunca, com um homem e um menino brancos com cabelos castanhos, ambos estão sentados em um banco em meio a um parque usando casacos de inverno. Aparecem três cenas: com ênfase no menino, no homem e nos dois se abraçando. As frases do meme aparecem na ordem: “It works on my machine. Then we’ll ship your machine. And that is how docker was born”.
Meme de uma cena do filme Em Busca da Terra do Nunca que brinca com o conceito.

Hoje, sem contêineres, as organizações entram em algo chamado “Matrix from Hell“, onde você tem diferentes tipos de aplicativos, dependências e ambientes, e todos esses elementos precisam trabalhar juntos para que seu software funcione com eficiência. Isso realmente é um inferno.

Em outras palavras, Docker permite que você economize muito tempo no processo de configuração, que em alguns casos pode ser muito longo e caro, tanto em termos de tempo quanto em termos de pessoal dedicado (consequentemente, também em nível econômico).

Usar Docker também pode ser mais conveniente do que usar uma máquina virtual completa. As VMs são ferramentas projetadas para oferecer suporte a todas as cargas de trabalho possíveis. 

Por outro lado, os contêineres são leves, autossuficientes e mais adequados para casos de usos descartáveis. Como o Docker compartilha o kernel do host, os contêineres têm um impacto insignificante no desempenho do sistema. O tempo de inicialização do contêiner é quase instantâneo, pois você está apenas iniciando processos, não um sistema operacional inteiro.

Desafios de usar contêineres

Apesar das suas inúmeras vantagens, a ferramenta não é uma bala de prata. Ele também tem seus desafios, vamos abordar alguns deles aqui.

1. Foi projetado como solução para implantação de aplicativos de servidores, que não requerem uma interface gráfica. Embora existam algumas estratégias para poder executar um aplicativo GUI dentro de um contêiner, essas soluções são, na melhor das hipóteses, desajeitadas.

2. Persistir dados é complicado. Por design, todos os dados dentro de um contêiner desaparecem para sempre quando o contêiner é encerrado, a menos que você os salve em outro lugar primeiro. Contudo, existem maneiras de fazer isso no Docker, como usando o Docker Data Volumes, por exemplo.

3. Com o uso adequado, Docker pode aumentar o nível de segurança (em comparação com a execução de aplicativos diretamente no host). Por outro lado, algumas configurações incorretas podem levar ao downgrade do nível de segurança ou até mesmo introduzir novas vulnerabilidades.

Quer saber mais como manter sua operação com contêineres segura? Então assista a palestra “Vulnerabilidades em Imagens de Containers” retirada da trilha da Zup no TDC Connections 2021.

Orquestração de contêineres

Hoje em dia, é comum usar uma plataforma de orquestração como o Kubernetes ou Docker Swarm para usar Docker em produção. Essas ferramentas são projetadas para lidar com várias réplicas de contêiner, o que melhora a escalabilidade e a confiabilidade.

Meme com o ator Keanu Reeves, homem branco com cabelos castanhos, com expressão assustada. Na imagem está escrito “So my code is in a container, now what?”.
Meme com o ator Keanu Reeves relacionando códigos e contêineres.

Docker se tornou um componente. Os orquestradores utilizam as mesmas tecnologias de tempo de execução de contêiner para fornecer um ambiente mais adequado à produção. O uso de várias instâncias de contêiner permitem atualizações contínuas, bem como distribuição entre máquinas, tornando sua implantação mais resiliente à mudanças e interrupções.

Resumindo a terminologia do Docker


Contêiner
: ambiente isolado e leve que pode ter seus próprios processadores, interfaces de rede, etc., mas compartilham o mesmo kernel do sistema operacional. Criado a partir de uma versão de imagem específica.

Imagem
: uma imagem é basicamente um pacote executável que possui tudo o que é necessário para executar aplicativos, o que inclui um arquivo de configuração, variáveis ​​de ambiente, tempo de execução e bibliotecas.

Dockerfile: contém todas as instruções para criar uma imagem do Docker. É basicamente um arquivo de texto simples com instruções para construir uma imagem. Você também pode se referir a isso como a automação da criação de imagens do Docker.

Tag: versão de uma imagem. Cada imagem terá uma tag.

Docker Hub: repositório de imagens onde podemos encontrar diferentes tipos de imagens.

Docker Engine: o sistema que permite criar e executar contêineres.

Docker Registry: o registro do Docker é uma solução que armazena suas imagens. Este serviço é responsável por hospedar e distribuir as imagens. O registro padrão é o Docker Hub.

Docker CLI: interface de linha de comando (CLI) que permite à pessoa executar ações interagindo com Docker. É executado em uma arquitetura cliente-servidor, o que significa que clientes podem se conectar a hosts do Docker localmente ou remotamente. Tanto cliente quanto host do Docker (Daemon) podem ser executados no mesmo host, ou podem ser executados em hosts diferentes e se comunicar por meio de soquetes ou de uma API RESTful.

Uma plataforma poderosa para contêineres

Docker foi criado com pessoas desenvolvedoras, administradoras de sistemas, engenheiras de teste, de operações e arquitetas de TI em mente. Ele oferece tudo o que você precisa para trabalhar com contêineres. 

Hoje em dia, é uma ferramenta chave para o desenvolvimento de software e administração de sistemas. Ele requer uma compreensão dos conceitos básicos de contêiner para criar suas imagens e ambientes especializados, para diminuir suas cargas de trabalho.

E aí? O que achou do nosso artigo? Esperamos que tenha curtido! Aproveite para continuar navegando no nosso blog e conhecendo mais conceitos de desenvolvimento.

Referências

Capa do artigo sobre Docker, com um homem negro programando.
foto Guillaume Falourd
Back-end Developer
Zupper tentando transformar o complexo em simples através de conteúdos diversificados, com intuito de impactar o mercado de TI e as pessoas ao seu redor da melhor forma possível.

Artigos relacionados

Este site utiliza cookies para proporcionar uma experiência de navegação melhor. Consulte nossa Política de Privacidade.