Docker para el front-end. Parte 2. ¿Qué eres?


Continúo descifrando mi informe Docker para el front-end de la conferencia FrontendConf 2019 .


En la parte anterior, traté de responder la pregunta de por qué el desarrollador front-end podría necesitar Docker . Hoy trataré de decir en un lenguaje simple qué tipo de herramienta es, cómo funciona y compararlo con otros conceptos conocidos en la interfaz.


Contenido


  1. Docker para el front-end. Parte 1. ¿Por qué?
  2. Docker para el front-end. Parte 2. ¿Qué eres?
  3. Docker para el front-end. Parte 3. Algunas recetas

Que eres


Quien no sabe qué es Docker, lo imagina de manera diferente.



Alguien piensa que este es un medio para instalar el contenedor en la máquina.



Bajo el anuncio en el VK de la parte anterior de este artículo, aparecieron un par de comentarios cómicos.



Y solo los administradores de sistemas parecen saber algo.



Los chicos de Docker, Inc nos presentan esta herramienta a través del eslogan de marketing:


Depure su aplicación, no su entorno
Recopile, comparta y ejecute de forma segura cualquier aplicación en cualquier lugar

Ella es un poco astuta. Es realmente posible recopilar, compartir y lanzar. Pero con "seguro" y con "en cualquier lugar" las cosas no son así.


Puede encontrar información sobre problemas de seguridad, por ejemplo, en este artículo , pero sobre "cualquier lugar" hablaré un poco más.


Virtualización


La posibilidad de virtualización apareció hace mucho tiempo.


Cuando estaba desarrollando en 2012, mi equipo hizo proyectos Ruby on Rails. Tenía la necesidad de ejecutar cosas como Ruby , MySQL , PostgreSQL en mi computadora portátil. Todo esto funcionó bastante mal en Windows , así que tuve que usar la virtualización.


Luego había soluciones como VirtualBox , VMware Workstation , Vagrant . Todo el entorno de trabajo se transfirió a la máquina virtual, y solo el IDE , Git y el navegador permanecieron en el sistema host.



Este diagrama, tomado de la documentación de Docker, solo muestra cómo funcionan las máquinas virtuales ( VM ).


Tenemos infraestructura (nuestra computadora) e hipervisor (VMWare, VirtualBox u otra cosa). Y para todo esto, ejecutamos una máquina virtual que incluye el sistema operativo invitado ( Guest OS ), las bibliotecas necesarias ( Bins / Libs ) y nuestra aplicación ( App ).


Naturalmente, las máquinas virtuales resultaron ser muy grandes y lentas. La sobrecarga para mantener la máquina virtual era alta. Mi laptop apenas lo sacó todo.



Docker, Inc sugirió que no extraigamos el sistema operativo invitado a un contenedor virtual, sino que usemos el sistema host y obtengamos el aislamiento del proceso usando el mecanismo cgroups en Linux .


Esto redujo significativamente el tamaño de las imágenes. Por ejemplo, una imagen alpina: 3.11.0 (una distribución de Linux centrada en la seguridad, la ligereza y los requisitos de bajos recursos) pesa solo 2.5 MB , y una imagen acoplable con nodo: alpina solo 27 MB .


Es decir nuestro sitio / aplicación se puede empaquetar en una imagen de 30 MB que será suficiente para ejecutarse en Docker y funcionará en cualquier lugar. Sí, pero hay matices.


Instalar Docker


Docker se distribuye en dos ediciones: Community Edition (CE) y Enterprise Edition (EE) . Necesitamos Docker CE , porque Es gratis y resuelve todos los problemas que necesitamos.


Y Docker también es Escritorio y Servidor .



Servidor


Las versiones de servidor están diseñadas para instalarse en Linux y admiten 4 distribuciones y solo algunas arquitecturas. Por lo tanto, la afirmación de que puede ejecutar el contenedor acoplable "en cualquier lugar" no es del todo correcta.


Escritorio


Las versiones de escritorio están destinadas a la instalación en computadoras por desarrolladores. Y esto es lo que nos ayudará durante el desarrollo de nuestras aplicaciones geniales. En particular, uso Docker Desktop para Mac .


La instalación en una computadora parece lo más familiar posible para un usuario de Mac.



O, si te gusta Homebrew.


brew cask install docker 

Después de eso, la aplicación estará disponible en la barra de estado superior y desde la consola.



La advertencia es que faltan grupos de control de Linux ( cgroups ) en Mac y Windows (sorpresa, sorpresa), por lo que Docker Desktop utiliza el marco del hipervisor Mac OS y Microsoft Hyper-V , respectivamente.



Es decir, para admitir la virtualización tendrá que renunciar a unos 4 GB de RAM. Pero los contenedores de trabajo ya ocuparán mucho menos espacio que si se estuvieran ejecutando en máquinas virtuales separadas.


El resultado del 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 la base de datos tomó 19 MB , y la API de Java - 352 MB .


Lo que se incluye en Docker Desktop


Docker está diseñado como una arquitectura modular, por lo que cuando instala Docker Desktop , obtiene varios programas a la vez.


Motor acoplable


Docker Engine incluye herramientas de creación de contenedores, un registro de contenedores, herramientas de orquestación, un tiempo de ejecución y mucho más. Este es un proyecto de código abierto escrito en Go . Comienza como daemon , que proporciona una API RESTful para ejecutar comandos.


Esta solución le permite administrar contenedores desde casi cualquier lugar, por ejemplo, desde un navegador , Node.js o incluso desde Minecraft .



Cliente CLI de Docker


Cliente de consola para la API de Docker Engine.


También un proyecto de código abierto escrito en Go .


Docker componer


Una herramienta para describir y lanzar aplicaciones de contenedores múltiples. Cosa extremadamente útil en el desarrollo.


Se siente como un SRE . Escrito naturalmente en Python.


Máquina acoplable


Una herramienta para administrar hosts remotos en los que está instalado Docker. No estamos acostumbrados al desarrollo, pero viene con el resto.


Kitematic


GUI de API de Docker Engine de código abierto escrito en JavaScript (Electron) .


Ideal para quienes no les gusta la consola e incluso para GIT utilizan la interfaz gráfica.


La herramienta es bastante burda, pero funciona ( v0.17.9 , > 800 números abiertos ).



Docker no es solo para administradores


Ahora, un poco de analogía gratuita para los desarrolladores front-end para mostrar que esta herramienta tiene mucho en común con cosas que nos son familiares, desarrolladores front-end, como Node.js y NPM.


Imagen


Imagen de Docker. Podemos publicarlo en algún lugar, por ejemplo, en DockerHub. También podemos publicar un NPM- .


Dockerfile


La receta de una imagen. No tenemos recetas, pero hay un paquete / manifiesto de aplicación - package.json .


Docker Build


Poniendo la imagen del acoplador juntos. Bueno, en el front end estamos construyendo nuestra aplicación - npm run build .


Dockerhub



No debe confundirse con otro centro popular. Este es un registro de imágenes acoplables. Tenemos nuestro propio registro - NPM Registry .


Docker Run


El comando de consola que inicia el contenedor. El análogo más cercano del mundo de la interfaz es el comando npm start .


El proyecto comenzó como un desarrollo propietario.


El proyecto Docker comenzó en 2008 como un desarrollo interno propietario de dotCloud, y solo en marzo de 2013 se publicó en código abierto.


Tenemos Node.js , que aunque originalmente era de código abierto, pero hasta febrero de 2015 y Joyent manejó la escandalosa historia con io.js.


Usado para todo


Todos sabemos que NPM es el Administrador de paquetes de nodos . Solía ​​ser, pero ahora hay paquetes no solo para Node.js , sino también para el navegador .


Y puede que no haya paquetes allí. Si lo desea, puede colocar un conjunto de fuentes o incluso una película allí.


Lo mismo con DockerHub . Puedes publicar cualquier cosa allí. No hay moderación previa.


Hay alternativas diseñadas para reemplazar


Todos sabemos que hay administradores de paquetes alternativos que puede usar si no le gusta NPM . Esto es Yarn , pnpm , jspm .


Docker también se puede reemplazar con alternativas. Por ejemplo, Podmad o Buildah .


Algunas recetas


Espero haber podido resumir en términos generales sobre esta herramienta.


En la siguiente parte, planeo mostrar recetas y casos específicos de uso de Docker para el front-end.

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


All Articles