[LINUX] J'ai fait des recherches sur Docker, donc je vais le résumer

introduction

Docker, k8s sortira dans le sujet de 42tokyo, alors je l'ai étudié et résumé.

Connaissances préalables

Il n'y a pas d'explication sur le concept de base, donc c'est bien d'avoir un peu touché docker.

Qu'est-ce que Docker

Logiciel de conteneur open source développé par Docker.

façon de penser de base

L'idée de base est la même que celle du "package" Linux.

À l'origine, lorsque Linux apportait un logiciel open source, il installait le code source, le compilait localement et l'utilisait. C'est comme apporter du code comme celui sur github maintenant, le créer et l'utiliser. (Référence: https://eng-entrance.com/linux-package-apt-2)

Le noyau Linux lui-même est également publié en tant que code source et doit être compilé. En outre, diverses bibliothèques sont nécessaires pour faire fonctionner les programmes d'application tels que les serveurs, les applications et les systèmes de fenêtres. Cependant, le travail de construction et d'exploitation d'un tel environnement à partir de zéro est extrêmement compliqué, il n'est donc pas réaliste pour les utilisateurs qui souhaitent utiliser Linux de l'exécuter un par un.

Pour cette raison, de nombreuses distributions Linux ont été créées. Une distribution Linux est une collection de noyaux Linux, de bibliothèques, de logiciels système, de logiciels d'application, etc. sous forme de «packages».

** distribution linux = noyau linux + diverses bibliothèques **

De cette manière, l'idée d'un "package" qui peut être utilisé immédiatement après l'installation de l'état compilé avec les dépendances, s'est répandue. La commande linux apt est une commande du système de gestion de paquets

L'image du conteneur est empaquetée au niveau du système d'exploitation. Si vous apportez une image et construisez (créez un conteneur), vous pouvez créer un environnement dans lequel l'application que vous souhaitez exécuter s'exécutera immédiatement.

Que résoudre?

Jusque-là, des problèmes s'étaient produits dans les environnements de développement, les environnements de test et les environnements de production en raison de petites différences telles que des différences dans les versions d'environnement, mais maintenant l'environnement peut être empaqueté et partagé au niveau du système d'exploitation. C'est devenu plus facile.

Étant donné que l'environnement (système d'exploitation et bibliothèques dépendantes) dans lequel l'application s'exécute est empaqueté, il est pratique qu'il n'y ait pas de dépendances et qu'il n'y ait pas besoin de l'installer ailleurs.

Il existe également un service appelé Dockerhub comme github qui partage des images.

Technologie des conteneurs

Tout d'abord, qu'est-ce que la virtualisation?

La "virtualisation" divise le processeur et la mémoire installés dans le matériel en petits morceaux et les fait fonctionner comme plusieurs serveurs indépendants individuels. Le serveur apparent créé de cette manière est appelé une "machine virtuelle". Il devient un environnement d'exécution d'application complètement isolé.

Il existe deux types de virtualisation: la virtualisation de type OS hôte, la virtualisation de type hyperpaiser effectuée à l'aide d'un logiciel appelé hyperviseur et la virtualisation de type conteneur.

Différence entre la virtualisation et le conteneur

空白の図 - 2ページ.png

L'avantage de la virtualisation basée sur des conteneurs est qu'elle partage le noyau du système d'exploitation, mais les processus et les ressources sont complètement isolés. Il semble que les fonctions suivantes soient utilisées dans le moteur de conteneur.

--namelary ・ ・ ・ Une fonction fournie par le noyau Linux qui divise logiquement les ressources système. --cgroup ・ ・ ・ Technologie pour contrôler l'utilisation des ressources du processus --chroot ・ ・ ・ Une fonction qui sépare les fichiers en modifiant le répertoire racine afin que les répertoires de niveaux supérieurs ne puissent pas être utilisés.

Référence: Docker à comprendre en principe

Pourquoi le conteneur semble-t-il avoir un autre système d'exploitation alors qu'il n'en a pas?

En premier lieu, la seule image du système d'exploitation que docker peut apporter est la distribution Linux.

Contrairement à VM, il n'y a pas de système d'exploitation invité dans le conteneur. Alors comment réaliser cet OS? ??

En fait, cela fonctionne comme ça tout en utilisant le noyau du système d'exploitation hôte. Référence: https://thinkit.co.jp/article/17301

Le système inux a le même noyau, la seule différence est la bibliothèque (= compatibilité linux) Ainsi, en installant simplement la bibliothèque, vous pouvez la faire fonctionner comme si le système d'exploitation était installé. ** ** Les systèmes d'exploitation qui sont complètement différents, tels que Unix et Windows, ont des parties de noyau complètement différentes, vous ne pouvez donc pas apporter d'image.

スクリーンショット 2020-11-11 18.32.01.png

À partir de la méthode de fabrication ci-dessus

e? Mais vous pouvez développer avec docker même sur Mac ou Windows, non? Tu ne penses pas Vous pouvez l'utiliser en installant une application appelée Docker pour mac ou Docker pour Windows.

En fait, il semble que ce soit ** un moteur docker au-dessus de ** Linux VM **. Donc, inévitablement, l'environnement de production sera Linux.

Vous pouvez désormais transporter un environnement basé sur Linux dans n'importe quel environnement et développer et tester dans n'importe quel environnement.

空白の図 - ページ 1.png

Qu'est-ce qu'un conteneur encore?

Un conteneur est juste un ** processus contrôlé par un moteur de conteneur sur le système d'exploitation hôte **. (Un processus est un programme en cours d'exécution.)

Par conséquent, il sera terminé dès que le travail sera terminé. C'est pourquoi le démon est désactivé ou continue de fonctionner dans une boucle infinie, tout comme le conteneur continue de fonctionner.

Comme il ne s'agit que d'un processus, il est très léger et peut gérer plusieurs conteneurs (= processus) en même temps comme un processus Unix.

C'est pourquoi la commande est ps ou kill.

Il a été réalisé comme un processus en séparant et en gérant les processus, les ressources système, les privilèges, etc. en utilisant pleinement les fonctions de Linux, et il n'a pas utilisé autant de nouvelles technologies.

Comprendre l'image

Depuis que j'ai expliqué le mécanisme du conteneur, le mécanisme de l'image est également facile.

Une image n'est pas réellement un fichier

L'image est un concept abstrait avec seulement la définition de «se comporter comme ça». En termes de programmation, la relation entre une image et un conteneur est similaire à une classe et une instance. Lorsque vous exécutez l'image, un conteneur est créé et en partageant l'image, vous pouvez créer le même environnement à différents endroits.

Les images ne sont pas constituées de fichiers, mais ** d'une structure en couches d'images avec de multiples «différences» **.

Il semble que UFS (Union File System), une technologie qui empile plusieurs fichiers et répertoires sous forme de couches et les traite pratiquement comme un seul système de fichiers, est utilisée.

Réécrivez l'image et voyez la structure du calque

La commande docker history est facile à comprendre pour comprendre la structure de l'image. À titre de test, apportons l'image de centos, réécrivons-la et voyons-la avec deux changements (couches) ajoutés.

スクリーンショット 2020-11-12 2.30.23.png

J'essaye d'imaginer le chiffre ci-dessus. J'ai apporté des modifications telles que la saisie de centos et la création d'un fichier, la saisie et la création d'un fichier, et je les ai sauvegardées sous forme d'image. (Commande omise)

Vérifiez la structure des calques de l'image avec la commande docker history! Certes, on peut voir que ceux qui partagent le calque d'image et apportent des modifications deux fois ont un calque de plus.

$ docker image history centos-1
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
f83fd832b2b7        21 minutes ago      bash                                            13B
0d120b6ccaa8        3 months ago        /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B
<missing>           3 months ago        /bin/sh -c #(nop)  LABEL org.label-schema.sc…   0B
<missing>           3 months ago        /bin/sh -c #(nop) ADD file:538afc0c5c964ce0d…   215MB

$ docker image history centos-2
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
7318feb4e1e5        20 minutes ago      bash                                            26B
f83fd832b2b7        21 minutes ago      bash                                            13B
0d120b6ccaa8        3 months ago        /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B
<missing>           3 months ago        /bin/sh -c #(nop)  LABEL org.label-schema.sc…   0B
<missing>           3 months ago        /bin/sh -c #(nop) ADD file:538afc0c5c964ce0d…   215MB

Vous pouvez voir comment le registre gère l'image en la poussant vers dockerhub. Je l'ai changé parce que je dois changer le nom comme username / image-name: tag pour pousser. De cette façon, vous pouvez voir que seules les informations citées à partir d'autres référentiels et la différence entre eux sont transmises.

$ docker image push momokahori124/mycentos
d61c8d8ef622: Pushed
e955d24fd305: Pushed
291f6e44771a: Mounted from library/centos
v1: digest: sha256:ae16ff8c612176dd9314c61cb906d9d6ebaa29ce0aff49fbc090f57b1c8af1dc size: 943

Le bon point est que vous pouvez enregistrer beaucoup de données en faisant de l'image une structure en couches de différences. J'ai l'impression que git a également été géré par la différence, mais est-ce la même méthode?

Référence: Tutoriel visant à comprendre les images Docker

Créer une image

Expliquez les avantages de Docker et créez une image qui ne compromet pas les avantages.

Image d'opération du docker

J'ai expliqué le mécanisme du conteneur et le mécanisme de l'image. Ensuite, nous résumerons de l'opération docker à docker-compose et k8s.

Cycle de vie du conteneur

Il existe trois façons de créer une image Docker.

  1. Tirez depuis Dockerhub
  2. Créez le Dockerfile
  3. Validez le conteneur arrêté sur lequel vous travailliez pour en faire une image

Une fois que vous avez une image de votre application en cours d'exécution pendant le développement, vous pouvez la pousser vers Dockerhub et la partager. À ce stade, il est important de créer une image afin de ne pas nuire aux avantages de docker.

スクリーンショット 2020-11-11 21.41.53.png

Avantages de Docker et ses précautions

En résumé, partagez-le dans un Dockerfile, rendez le conteneur jetable et utilisez autant que possible des conteneurs séparés.

Pour créer une image indépendante de l'environnement

Il est important de bien utiliser les variables d'environnement et de créer une image qui ne dépend pas de l'environnement.

continue...

référence

Recommended Posts

J'ai fait des recherches sur Docker, donc je vais le résumer
Je n'ai pas compris le comportement d'argsort de numpy, donc je vais le résumer
Je l'ai personnalisé avec Visual Studio Code (principalement pour python), je vais donc le résumer
J'ai lu un article d'enquête sur la détection d'anomalies dans les séries chronologiques, je vais donc le résumer.
Je suis resté coincé alors je l'ai examiné
Je veux Airpods Pro donc j'informerai LINE quand il arrivera
D'une manière ou d'une autre, le code que j'ai écrit a fonctionné et j'ai été impressionné, alors je vais le poster
J'ai pu me moquer d'AWS-Batch avec python, moto, donc je vais le laisser
J'ai commencé Docker
Docker x Visualization ne fonctionnait pas et j'en étais accro, alors je l'ai résumé!
Je n'ai pas compris le redimensionnement de TensorFlow, alors je l'ai résumé visuellement.
Les débutants en Python ont créé un chat BOT alors j'ai essayé de résumer comment le faire
J'ai pensé "Qu'est-ce que Linux?", Alors je l'ai recherché.
J'aime la notation d'inclusion de Python, donc je l'ai comparée avec map
AWS Lambda prend désormais en charge Python, je l'ai donc essayé
[Streamlit] Je l'ai installé
[Acquisition de la qualification] J'ai réussi le niveau LinuC 1, donc j'écrirai sur la façon d'étudier et comment c'était.
mypy le fera
Le livre de PyTorch était difficile à comprendre, alors je l'ai complété