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
- Docker para o front-end. Parte 1. Por quê?
- Docker para o front-end. Parte 2. O que você é?
- 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.