Docker para o front-end. Parte 2. O que você é?


Continuo descriptografando meu relatório do Docker para o front-end da conferência FrontendConf 2019 .


Na parte anterior, tentei responder à pergunta de por que o desenvolvedor front-end pode precisar do Docker . Hoje vou tentar dizer em uma linguagem simples que tipo de ferramenta é, como funciona e compará-la com outros conceitos conhecidos no frontend.


Conteúdo


  1. Docker para o front-end. Parte 1. Por quê?
  2. Docker para o front-end. Parte 2. O que você é?
  3. Docker para o front-end. Parte 3. Algumas receitas

O que você é


Quem não sabe o que é o Docker, eles o imaginam de maneira diferente.



Alguém pensa que esse é um meio de instalar o contêiner na máquina.



Sob o anúncio no VK da parte anterior deste artigo, apareceram alguns comentários em quadrinhos.



E apenas os administradores de sistema parecem saber alguma coisa.



Os caras da Docker, Inc nos apresentam essa ferramenta através do slogan de marketing:


Depure seu aplicativo, não seu ambiente
Colete, compartilhe e execute com segurança qualquer aplicativo em qualquer lugar

Ela é um pouco astuta. É realmente possível coletar, compartilhar e iniciar. Mas com "seguro" e com "qualquer lugar" as coisas não são bem assim.


Você pode descobrir sobre problemas de segurança, por exemplo, neste artigo , mas sobre "qualquer lugar" falarei um pouco mais.


Virtualização


A possibilidade de virtualização apareceu há muito tempo.


Quando eu estava desenvolvendo em 2012, minha equipe fez projetos de Ruby on Rails. Eu precisava executar coisas como Ruby , MySQL , PostgreSQL no meu laptop. Tudo isso funcionou muito mal no Windows , então eu tive que usar a virtualização.


Depois, havia soluções como VirtualBox , VMware Workstation , Vagrant . Todo o ambiente de trabalho foi transferido para a máquina virtual, e apenas o IDE , Git e o navegador permaneceram no sistema host.



Este diagrama, retirado da documentação do Docker, apenas mostra como as máquinas virtuais ( VMs ) funcionam.


Temos infraestrutura (nosso computador) e hypervisor (VMWare, VirtualBox ou algo mais). E por tudo isso, executamos uma máquina virtual que inclui o sistema operacional convidado ( SO convidado ), as bibliotecas necessárias ( Bins / Libs ) e nosso aplicativo ( App ).


Naturalmente, as próprias máquinas virtuais acabaram sendo muito grandes e lentas. A sobrecarga para manter a máquina virtual foi alta. Meu laptop mal tirou tudo.



A Docker, Inc sugeriu que não puxássemos o sistema operacional convidado para um contêiner virtual, mas que usássemos o sistema host e obtivéssemos isolamento do processo usando o mecanismo cgroups no Linux .


Isso reduziu significativamente o tamanho das imagens. Por exemplo, uma imagem alpina: 3.11.0 (uma distribuição Linux focada em segurança, leveza e poucos recursos de recursos) pesa apenas 2,5 MB e uma imagem de janela de encaixe com node: alpine apenas 27 MB .


I.e. nosso site / aplicativo pode ser empacotado em uma imagem de 30 MB que será suficiente para ser executada no Docker e funcionará em qualquer lugar? Sim, mas existem nuances.


Instalar o Docker


O Docker é distribuído em duas edições: Community Edition (CE) e Enterprise Edition (EE) . Precisamos do Docker CE , porque É gratuito e resolve todos os problemas que precisamos.


E o Docker também é Desktop e Servidor .



Servidor


As versões do servidor foram projetadas para serem instaladas no Linux e suportam 4 distribuições e apenas algumas arquiteturas. Portanto, a declaração de que você pode executar o contêiner da janela de encaixe "em qualquer lugar" não está totalmente correta.


Área de trabalho


As versões para desktop destinam-se à instalação em computadores pelos desenvolvedores. E é isso que nos ajudará durante o desenvolvimento de nossos aplicativos interessantes. Em particular, eu uso o Docker Desktop for Mac .


A instalação em um computador parece o mais familiar possível para um usuário de Mac.



Ou, se você gosta de Homebrew.


brew cask install docker 

Depois disso, o aplicativo fica disponível na barra de status superior e no console.



A ressalva é que os grupos de controle do Linux ( cgroups ) estão ausentes no Mac e no Windows (surpresa, surpresa), então o Docker Desktop usa a estrutura do Mac OS Hypervisor e o Microsoft Hyper-V , respectivamente.



Ou seja, para dar suporte à virtualização, você precisará ceder cerca de 4 GB de RAM. Porém, os contêineres em funcionamento já ocuparão muito menos espaço do que se estivessem sendo executados em máquinas virtuais separadas.


A saída do docker stats do docker stats :


 CONTAINER ID NAME MEM USAGE e4941ea92ce7 nginx_1 3.16MiB 1b023bfff38f api_1 351.5MiB e07c6958e378 pg_1 18.64MiB 1fa783f5fdbc terminal-front_1 14.89MiB 72e9dfa0805a adminer_1 11.19MiB e9ce9f965867 admin-front_1 1.312MiB 3edacc59a77b certbot_1 1.547MiB 

Vemos que o banco de dados ocupou 19 MB e a API Java - 352 MB .


O que está incluído no Docker Desktop


O Docker foi desenvolvido como uma arquitetura modular; portanto, ao instalar o Docker Desktop , você obtém vários programas ao mesmo tempo.


Motor Docker


O Docker Engine inclui ferramentas de criação de contêineres, um registro de contêiner, ferramentas de orquestração, tempo de execução e muito mais. Este é um projeto de código aberto escrito em Go . Ele inicia como daemon , que fornece uma API RESTful para executar comandos.


Esta solução permite gerenciar contêineres de quase qualquer lugar, por exemplo, a partir de um navegador , Node.js ou até do Minecraft .



Cliente CLI do Docker


Cliente do console para a API do Docker Engine.


Também um projeto de código aberto escrito em Go .


Docker compor


Uma ferramenta para descrever e iniciar aplicativos com vários contêineres. Coisa extremamente útil no desenvolvimento.


Parece um SRE . Naturalmente escrito em Python.


Docker machine


Uma ferramenta para gerenciar hosts remotos nos quais o Docker está instalado. Não estamos acostumados no desenvolvimento, mas vem com o resto.


Kitematic


GUI da API do Open Docker Engine, escrita em JavaScript (Electron) .


Ideal para quem não gosta do console e até mesmo para o GIT, use a interface gráfica.


A ferramenta é bastante grosseira, mas está funcionando ( v0.17.9 , > 800 edições abertas ).



O Docker não é apenas para administradores


Agora, um pouco de analogia livre para os desenvolvedores front-end mostrarem que essa ferramenta tem muito em comum com coisas familiares para nós, desenvolvedores front-end, como Node.js e NPM.


Imagem


Imagem do Docker. Podemos publicá-lo em algum lugar, por exemplo, no DockerHub. Também podemos publicar um NPM- .


Dockerfile


A receita para uma imagem. Não temos receitas, mas há um manifesto de pacote / aplicativo - package.json .


docker build


Colocando a imagem da janela de encaixe. Bem, no front-end, estamos construindo nosso aplicativo - npm run build .


Dockerhub



Não deve ser confundido com outro hub popular. Este é um registro de imagens do Docker. Nós temos nosso próprio registro - NPM Registry .


docker run


O comando do console que inicia o contêiner. O analógico mais próximo do mundo do frontend é o comando npm start .


O projeto começou como um desenvolvimento proprietário


O projeto Docker começou em 2008 como um desenvolvimento proprietário interno do dotCloud e apenas em março de 2013 foi publicado em código aberto.


Temos o Node.js , que apesar de originalmente ser de código aberto, mas até fevereiro de 2015 e a história escandalosa do io.js foi gerenciada pela Joyent .


Usado para tudo


Todos sabemos que o NPM é o Node Package Manager . Antes, mas agora existem pacotes não apenas para o Node.js , mas também para o navegador .


E pode não haver pacotes lá. Se desejado, um conjunto de fontes ou mesmo um filme pode ser colocado lá.


A mesma coisa com o DockerHub . Você pode publicar qualquer coisa lá. Não há pré-moderação.


Existem alternativas projetadas para substituir


Todos sabemos que existem gerenciadores de pacotes alternativos que você pode usar se não gostar do NPM . Este é Yarn , pnpm , jspm .


O Docker também pode ser substituído por alternativas. Por exemplo, Podmad ou Buildah .


Algumas receitas


Espero ter conseguido descrever em termos gerais sobre esta ferramenta.


Na próxima parte, pretendo mostrar receitas e casos específicos de uso do Docker para o front-end.

Source: https://habr.com/ru/post/pt479018/


All Articles