Aprenda o suficiente Docker para ser útil

Parte 1: A paisagem conceitual

Jeff Hale Blocked Unblock Seguir Seguindo 9 de janeiro

Os contêineres são extremamente úteis para melhorar a segurança, a reprodutibilidade e a escalabilidade no desenvolvimento de software e na ciência de dados. Sua ascensão é uma das tendências mais importantes na tecnologia hoje.

O Docker é uma plataforma para desenvolver, implantar e executar aplicativos dentro de contêineres. O Docker é essencialmente sinônimo de conteinerização. Se você é um desenvolvedor de software atual ou aspirante ou cientista de dados, o Docker está no seu futuro.

Não se preocupe se você ainda não estiver preparado – este artigo ajudará você a entender o cenário conceitual – e você conseguirá fazer uma pizza ao longo do caminho.

Nos próximos quatro artigos desta série, abordaremos os termos do Docker, Dockerfiles, armazenamento de dados e comandos comuns do Docker. No final (e com um pouco de prática) você deve saber o Docker suficiente para ser útil ?!

Metáforas do Docker

Primeiro, vou lançar alguma luz sobre as metáforas do Docker.

Eles estão em todo lugar! Basta verificar este livro.

A segunda definição do Google para a Metaphor é o que queremos:

uma coisa considerada como representativa ou simbólica de outra coisa, especialmente algo abstrato.

Metáforas nos ajudam a entender coisas novas. Por exemplo, a metáfora de um contêiner físico nos ajuda a entender rapidamente a essência de um contêiner virtual.

Um contêiner físico

Recipiente

Como um recipiente de plástico físico, um contêiner Docker:

  1. Mantém as coisas – Algo está dentro do contêiner ou fora do contêiner.
  2. É portátil – pode ser usado em sua máquina local, na máquina de seu colega de trabalho ou nos servidores de um provedor de nuvem (por exemplo, AWS). Mais ou menos como aquela caixa de bugigangas infantis que você continua se movendo com você de casa em casa.
  3. Tem interfaces claras para acesso – Nosso contêiner físico tem uma tampa para abrir e colocar coisas e tirar as coisas. Da mesma forma, um contêiner Docker possui vários mecanismos para interagir com o mundo externo. Tem portas que podem ser abertas para interagir através do navegador. Você pode configurá-lo para interagir com os dados através da linha de comando.
  4. Pode ser obtido a partir de um local remoto – Você pode obter outro recipiente de plástico vazio da Amazon.com quando precisar. A Amazon recebe seus recipientes de plástico de fabricantes que os eliminam aos milhares a partir de um único molde. No caso de um contêiner Docker, um registro externo mantém uma imagem, que é como um molde, para seu contêiner. Então, quando você precisar de um contêiner, você pode criar um a partir da imagem.

Ao contrário de um contêiner virtual do Docker, um novo contêiner de plástico da Amazon vai lhe custar dinheiro e não virá com uma cópia de seus produtos. Desculpe ?.

Instância viva

Uma segunda maneira de pensar em um contêiner Docker é como uma instância de uma coisa viva . Uma instância é algo que existe de alguma forma. Não é só código. É o código que trouxe algo para a vida. Como outras coisas vivas, a instância acabará por morrer – o que significa que o contêiner será desligado.

Uma instância de um monstro

Um contêiner do Docker é uma imagem do Docker que ganhou vida.

Programas

Além da metáfora do contêiner e da metáfora da instância viva, você pode pensar em um contêiner Docker como um programa de software . Afinal, é software. Em seu nível mais básico, um container é um conjunto de instruções que manipulam outros bits.

Recipientes são código

Enquanto um contêiner do Docker está em execução, ele geralmente possui programas em execução dentro dele. Os programas em um contêiner executam ações para que seu aplicativo faça alguma coisa.

Por exemplo, o código em um contêiner Docker pode ter enviado o conteúdo que você está lendo nesta página da Web agora. Ou pode levar seu comando de voz para o Amazon Alexa e decodificá-lo em instruções que outro programa em um contêiner diferente usará.

Com o Docker, você pode executar vários contêineres simultaneamente em uma máquina host. E, como outros programas de software, os contêineres do Docker podem ser executados, inspecionados, interrompidos e excluídos.

Conceitos

Máquinas virtuais

Máquinas virtuais são os precursores dos contêineres do Docker. Máquinas virtuais também isolam um aplicativo e suas dependências. No entanto, os contêineres do Docker são superiores às máquinas virtuais porque usam menos recursos, são muito portáteis e são mais rápidos de acelerar. Confira este artigo para uma grande discussão sobre as semelhanças e diferenças.

Imagem do Docker

Eu mencionei as imagens acima. O que é uma imagem? Estou feliz que você tenha perguntado! O significado do termo imagem no contexto do Docker não mapeia tudo isso bem para uma imagem física.

Imagens

As imagens do Docker são mais parecidas com blueprints, cortadores de biscoito ou moldes. As imagens são o modelo mestre imutável usado para distribuir contêineres exatamente iguais.

Molde para bolachas

Uma imagem contém o Dockerfile, bibliotecas e código que seu aplicativo precisa executar, todos juntos.

Dockerfile

Um Dockerfile é um arquivo com instruções de como o Docker deve configurar e construir seu aplicativo.

O primeiro item do Dockerfile contém o código que o Docker usa para criar um contêiner a partir de camadas somente leitura básicas. Imagens de base oficiais populares incluem python , ubuntu e alpine .

Camadas adicionais podem ser empilhadas em cima dessa camada base, de acordo com as instruções do Dockerfile. Por exemplo, um Dockerfile para um aplicativo de aprendizado de máquina poderia dizer ao Docker para adicionar o NumPy, Pandas e Scikit-learn em uma camada intermediária.

Finalmente, uma camada fina e gravável é empilhada sobre as outras camadas, de acordo com o código do Dockerfile. (Você entende que uma camada fina é pequena em tamanho porque você intuitivamente entende a fina metáfora, certo?)

Vamos explorar mais detalhadamente os Dockerfiles em um artigo futuro desta série.

Recipiente Docker

Uma imagem do Docker mais o docker run image_name comando docker run image_name cria e inicia um contêiner a partir de uma imagem.

Registro de Contêiner

Se você quiser que outras pessoas possam criar contêineres a partir de sua imagem, envie a imagem para um registro de contêiner. O Docker Hub é o maior registro e o padrão.

Ufa! Isso é um monte de peças. Vamos juntar tudo isso em termos de fazer uma pizza.

Cozinhando com Docker

Metáfora paisagem

  • A receita é como o Dockerfile . Diz-lhe o que fazer para chegar ao seu objetivo final.
  • Os ingredientes são as camadas . Você tem crosta, molho e queijo para esta pizza.

Pense na receita e nos ingredientes combinados como um kit para fazer pizza tudo em um. É a imagem do Docker .

A receita (Dockerfile) nos diz o que vamos fazer. Aqui está o plano:

  • A crosta é pré-formada e imutável, é como uma imagem básica do Ubuntu. É a camada de base e é construída primeiro.
  • Então você adicionará um pouco de queijo. Adicionar essa segunda camada ao pizza é como instalar uma biblioteca externa – por exemplo, NumPy.
  • Então você vai polvilhar um pouco de manjericão. O manjericão é como o código de um arquivo que você escreveu para executar seu aplicativo.

Tudo bem, vamos cozinhar.

Forno

  • O forno que assa a pizza é como a plataforma Docker. Você instalou o forno em sua casa quando você se mudou para que você pudesse fazer coisas com ele. Da mesma forma, você instalou o Docker no seu computador para que você pudesse preparar os contêineres.
  • Você começa seu forno girando um botão. O comando docker run [] é como o seu botão – inicia o contêiner.
  • A pizza cozida é como um recipiente Docker.
  • Comer a pizza é como usar seu aplicativo.

Como fazer uma pizza, criar um aplicativo em um contêiner Docker requer algum trabalho, mas no final você tem algo ótimo. Aproveite ?!

Embrulho

Esse é o quadro conceitual. Na Parte 2 desta série, vamos esclarecer alguns dos termos que você verá no ecossistema do Docker. Siga-me para se certificar de que você não perca!

Espero que esta visão geral tenha ajudado você a entender melhor o cenário do Docker. Também espero que também tenha aberto os olhos para o valor das metáforas na compreensão de novas tecnologias.

Se você achou isso útil, compartilhe-o no Twitter, Facebook, LinkedIn e seus fóruns favoritos. Obrigado pela leitura!