Docker pour le front-end. Partie 2. Que faites-vous?


Je continue de déchiffrer mon rapport Docker pour le front-end de la conférence FrontendConf 2019 .


Dans la partie précédente, j'ai essayé de répondre à la question de savoir pourquoi le développeur front-end pourrait avoir besoin de Docker . Aujourd'hui, je vais essayer de dire dans un langage simple de quel type d'outil il s'agit, comment il fonctionne et le comparer avec d'autres concepts connus dans le frontend.


Table des matières


  1. Docker pour le front-end. Partie 1. Pourquoi?
  2. Docker pour le front-end. Partie 2. Que faites-vous?
  3. Docker pour le front-end. Partie 3. Quelques recettes

Tu es quoi


Qui ne sait pas ce qu'est Docker, ils l'imaginent différemment.



Quelqu'un pense que c'est un moyen d'installer le conteneur sur la machine.



Sous l' annonce dans le VK de la partie précédente de cet article, quelques commentaires comiques sont apparus.



Et seuls les administrateurs système semblent savoir quelque chose.



Les gars de Docker, Inc nous présentent cet outil à travers le slogan marketing:


Déboguez votre application, pas votre environnement
Collectez, partagez et exécutez n'importe quelle application en toute sécurité, où que vous soyez

Elle est un peu rusée. Il est vraiment possible de collecter, partager et lancer. Mais avec "sûr" et avec "n'importe où" les choses ne sont pas tout à fait ainsi.


Vous pouvez vous renseigner sur les problèmes de sécurité, par exemple, dans cet article , mais sur "n'importe où", je parlerai un peu plus loin.


Virtualisation


La possibilité de virtualisation est apparue il y a longtemps.


Lorsque je développais en 2012, mon équipe a réalisé des projets Ruby on Rails. J'avais besoin d'exécuter des choses comme Ruby , MySQL , PostgreSQL sur mon ordinateur portable. Tout cela fonctionnait assez mal sous Windows , j'ai donc dû utiliser la virtualisation.


Ensuite, il y avait des solutions telles que VirtualBox , VMware Workstation , Vagrant . L'ensemble de l'environnement de travail a été transféré sur la machine virtuelle, et seuls l' IDE , Git et le navigateur sont restés dans le système hôte.



Ce diagramme, extrait de la documentation Docker, montre simplement le fonctionnement des machines virtuelles ( VM ).


Nous avons une infrastructure (notre ordinateur) et un hyperviseur (VMWare, VirtualBox ou autre). Et pour tout cela, nous exécutons une machine virtuelle qui comprend le système d'exploitation invité ( OS invité ), les bibliothèques nécessaires ( Bins / Libs ) et notre application ( App ).


Naturellement, les machines virtuelles elles-mêmes se sont avérées très grandes et lentes. La surcharge pour la maintenance de la machine virtuelle était élevée. Mon ordinateur portable a à peine tout enlevé.



Docker, Inc a suggéré que nous ne tirions pas le système d'exploitation invité dans un conteneur virtuel, mais que nous utilisions le système hôte et obtenions l'isolement des processus à l'aide du mécanisme cgroups sous Linux .


Cela a considérablement réduit la taille des images. Par exemple, une image alpine: 3.11.0 (une distribution Linux axée sur la sécurité, la légèreté et les faibles besoins en ressources) ne pèse que 2,5 Mo , et une image docker avec nœud: alpin seulement 27 Mo.


C'est-à-dire notre site / application peut être emballé dans une image de 30 Mo qui sera suffisante pour fonctionner dans Docker , et cela fonctionnera n'importe où? Oui, mais il y a des nuances.


Installer Docker


Docker est distribué en deux éditions: Community Edition (CE) et Enterprise Edition (EE) . Nous avons besoin de Docker CE , car Il est gratuit et résout tous les problèmes dont nous avons besoin.


Et Docker est également Desktop et Server .



Serveur


Les versions de serveur sont conçues pour être installées sur Linux et prennent en charge 4 distributions et seulement certaines architectures. Par conséquent, la déclaration selon laquelle vous pouvez exécuter le conteneur Docker "n'importe où" n'est pas entièrement correcte.


Bureau


Les versions de bureau sont destinées à être installées sur les ordinateurs par les développeurs. Et c'est ce qui va nous aider lors du développement de nos applications cool. En particulier, j'utilise Docker Desktop pour Mac .


L'installation sur un ordinateur semble aussi familière que possible à un utilisateur Mac.



Ou, si vous aimez Homebrew.


brew cask install docker 

Après cela, l'application devient disponible dans la barre d'état supérieure et à partir de la console.



La mise en garde est que les groupes de contrôle Linux ( cgroups ) sont manquants sur Mac et Windows (surprise, surprise), donc Docker Desktop utilise le framework Hypervisor Mac OS et Microsoft Hyper-V , respectivement.



Autrement dit, pour prendre en charge la virtualisation devra renoncer à environ 4 Go de RAM. Mais alors, les conteneurs de travail prendront déjà beaucoup moins d'espace que s'ils fonctionnaient sur des machines virtuelles distinctes.


La sortie de la 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 

Nous voyons que la base de données a pris 19 Mo , et l'API Java - 352 Mo.


Ce qui est inclus dans Docker Desktop


Docker est conçu comme une architecture modulaire, donc lorsque vous installez Docker Desktop , vous obtenez plusieurs programmes à la fois.


Moteur Docker


Le moteur Docker comprend des outils de création de conteneurs, un registre de conteneurs, des outils d'orchestration, un runtime et bien plus encore. Il s'agit d' un projet open source écrit en Go . Il démarre en tant que démon , qui fournit une API RESTful pour l'exécution des commandes.


Cette solution vous permet de gérer des conteneurs de presque n'importe où, par exemple, à partir d'un navigateur , Node.js ou même à partir de Minecraft .



Client Docker CLI


Client de console pour l'API Docker Engine.


Également un projet open source écrit en Go .


Docker compose


Un outil pour décrire et lancer des applications multi-conteneurs. Chose extrêmement utile en développement.


Se sent comme un SRE . Naturellement écrit en Python.


Machine Docker


Un outil pour gérer les hôtes distants sur lesquels Docker est installé. Nous ne sommes pas habitués au développement, mais vient avec le reste.


Kitematic


Interface graphique de l'API Open Source Docker Engine écrite en JavaScript (Electron) .


Idéal pour ceux qui n'aiment pas la console et même pour GIT utiliser l'interface graphique.


L'outil est assez grossier, mais fonctionne ( v0.17.9 , > 800 problèmes ouverts ).



Docker n'est pas seulement réservé aux administrateurs


Maintenant, un peu d'analogie gratuite pour les développeurs frontaux pour montrer que cet outil a beaucoup en commun avec des choses qui nous sont familières, les développeurs frontaux, tels que Node.js et NPM.


Image


Image Docker. Nous pouvons le publier quelque part, par exemple, dans DockerHub. Nous pouvons également publier un NPM- .


Dockerfile


La recette d'une image. Nous n'avons pas de recettes, mais il y a un manifeste package / application - package.json .


construction de docker


Assemblage de l'image docker. Eh bien, à l'avant, nous construisons notre application - npm run build .


Dockerhub



À ne pas confondre avec un autre hub populaire. Il s'agit d'un registre d'images Docker. Nous avons notre propre registre - NPM Registry .


docker run


La commande de console qui lance le conteneur. L'analogue le plus proche du monde du frontend est la commande npm start .


Le projet a commencé comme un développement propriétaire


Le projet Docker a commencé en 2008 en tant que développement propriétaire interne de dotCloud, et ce n'est qu'en mars 2013 qu'il a été publié en open source.


Nous avons Node.js , qui bien qu'il était à l'origine open source, mais jusqu'en février 2015 et l'histoire scandaleuse avec io.js a été gérée par Joyent .


Utilisé pour tout


Nous savons tous que NPM est le Node Package Manager . Auparavant , il existe maintenant des packages non seulement pour Node.js , mais aussi pour le navigateur .


Et il n'y a peut-être pas de colis là-bas. Si vous le souhaitez, vous pouvez y mettre un ensemble de polices ou même un film.


Même chose avec DockerHub . Vous pouvez y publier n'importe quoi. Il n'y a pas de modération préalable.


Il existe des alternatives conçues pour remplacer


Nous savons tous qu'il existe d'autres gestionnaires de packages que vous pouvez utiliser si vous n'aimez pas NPM . Il s'agit de Yarn , pnpm , jspm .


Docker peut également être remplacé par des alternatives. Par exemple, Podmad ou Buildah .


Quelques recettes


J'espère avoir pu décrire en termes généraux cet outil.


Dans la partie suivante, je prévois de montrer des recettes et des cas spécifiques d'utilisation de Docker pour le front-end.

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


All Articles