Principes de base de Docker

Pourquoi utiliser Docker

"Faciliter la construction de l'environnement" Vous pouvez facilement créer un environnement avec un docker tel que des packages, des bibliothèques, la construction d'un environnement de développement, la construction d'un environnement d'exécution, etc.

Si vous mettez python etc. sur l'hôte, il sera difficile de le désinstaller ou cela provoquera un conflit avec d'autres packages. En créant l'environnement dans le conteneur au lieu de l'hôte et en supprimant le conteneur en cas d'erreur, il peut être créé à un endroit où l'hôte n'est pas du tout affecté.

Vous pouvez créer et supprimer l'environnement plusieurs fois tant que vous écrivez la méthode de construction d'environnement dans le fichier docker. Vous pouvez également créer exactement le même environnement en donnant le fichier docker ou l'image à quelqu'un d'autre.

Puisque l'environnement est construit dans un endroit qui n'a rien à voir avec l'hôte, il n'y a pas d'erreurs spécifiques à cette personne.

Pas de docker

  1. Téléchargez le programme d'installation
  2. Lancez le programme d'installation
  3. J'obtiens une erreur
  4. Dépannage
  5. Démarrez le programme d'installation ...

Un dépannage est rarement réussi

avec docker

  1. Démarrez le conteneur

C'est juste fini.

Caractéristiques de Docker

L'indépendance des conteneurs

Même si vous configurez deux conteneurs à partir de la même image Docker, les systèmes de fichiers de chaque conteneur sont indépendants. Travailler à l'intérieur d'un conteneur n'affecte pas les autres conteneurs ou hôtes.

Connaissances préliminaires pour apprendre Docker

coquille

bash, zsh, sh ・ ・ ・

L'application pour exécuter le shell est le terminal. Le shell est un outil de connexion au noyau

Variable d'environnement

Variables utilisées par les processus exécutés sur le système d'exploitation pour partager des informations

※processus (Terminal, navigateur Chrome ...)

Vérification des variables d'environnement du shell

Commande "echo $ SHELL" $ ・ ・ ・ Quelque chose comme un marqueur pour les variables environnementales

Comment créer des variables d'environnement

Commande "export AGE = 20"

Termes de base

Dockerfile ・ Dessin de conception d'image Docker ·fichier texte

Il décrit comment créer une image Docker. Il est facile à comprendre car il décrit quel type de conteneur et quel type d'image Docker il s'agira

Docker image Qu'est-ce qui rend le conteneur Il existe une fonction pour gérer les versions appelées balises.

L '"image docker" se compose de plusieurs "calques d'image". Lorsque le conteneur Docker est créé, un nouveau "calque d'image" est ajouté à "l'image Docker".

récipient

"Un ensemble d'environnement de développement, d'environnement d'exécution, etc."

Vous pouvez placer plusieurs conteneurs sur votre ordinateur ou serveur. Installez l'environnement de développement, l'environnement d'exécution, les packages et les bibliothèques nécessaires dans le conteneur. Vous pouvez ensuite travailler à l'intérieur du conteneur, utiliser le conteneur pour exécuter des scripts et exécuter du code.

Si vous créez un conteneur, vous pouvez l'utiliser dans d'autres membres, environnement de développement, environnement de test et environnement de production.

Le conteneur est réalisé à partir d'une "image Docker". Vous pouvez également créer une "image Docker" à partir d'un conteneur. Une «image Docker» est créée à partir d'un fichier texte appelé «fichier Docker».

Docker hub Un des registres Docker Il existe différents référentiels (boîtes) et un type d'image Docker est géré pour chaque référentiel. (Plusieurs images de docker avec différentes balises sont incluses)

Registre Docker

Emplacement de stockage de "l'image Docker"

commander

docker login Vous pourrez accéder au hub docker.

docker pull [image] Apportez l'image localement (hôte, votre ordinateur) depuis le hub docker

docker run -it [image] bash Créer un conteneur à partir d'une image Docker

Exemple) docker run -it ubuntu bash Créez un conteneur à partir de l'image de "ubuntu".

-Qu'Est-ce que c'est

Il existe deux options, -i et -t. -i
Option pour ouvrir le canal pour l'entrée. Le canal d'entrée est un canal appelé stdin Lorsque vous ouvrez un canal appelé stdin, ce que vous tapez à partir du clavier arrive à Linux. Un canal qui ouvre le canal stdin du conteneur à partir de l'hôte. Si vous omettez le "-i" et le docker run (start bash), les informations de la commande que vous avez tapée dans le conteneur ne sont pas transmises.

-t Nettoyez le résultat de sortie. (Faites-le joli). Une commande pour afficher une jolie sortie.

docker run hello-world Créer un conteneur à partir de l'image de "hello-world"

exit Sortez du conteneur

docker ps -a Vérifiez l'état du conteneur

docker images Afficher une liste d'images sur l'hôte

docker restart Mettez le conteneur en place

docker exec -it [container] bash Exécuter le programme spécifié (bash) pour le conteneur

docker commit [container] [image] Passer du conteneur à l'image (Créer une nouvelle image)

docker tag [source] [target] Redéfinissez l'image avec un nouveau nom. L'ancienne image reste et vous pouvez nommer la nouvelle image.

[source] ・ ・ ・ Nom de l'image actuelle [cible] ・ ・ ・ nouveau nom d'image

docker push [image] Push to docker hub

docker rmi [image] Supprimer l'image rmi ・ ・ ・ supprimer l'image

docker create Faire un contenant

docker start Exécutez le conteneur

※run = create + start

docker run [image] [command] Remplacement de commande par défaut Si vous tapez une commande supplémentaire après "docker run", cette commande par défaut sera écrasée et cette [commande] sera exécutée.

docker rm

Supprimer le conteneur Si le conteneur est en cours d'exécution, il ne peut pas être supprimé. (Arrêtez avec docker stop)

docker system prune Supprimez tous les conteneurs sortis. Vous pouvez également effacer les images pendantes inutilisées (images qui n'ont encore rien utilisé) et les caches.

docker run --name [container_name] [image] Spécifier le nom du conteneur Vous pouvez nommer et démarrer le conteneur. Lorsque vous souhaitez que le conteneur continue de fonctionner en arrière-plan, ou lorsque vous utilisez un serveur partagé, plusieurs personnes y installent le conteneur. À ce moment-là, vous avez besoin d'un nom. Lorsque vous accédez à un conteneur depuis un autre programme ou utilisez un conteneur, vous pouvez l'appeler immédiatement en lui donnant un nom.

docker run -d [image] "-D" est le cas où le conteneur s'exécute toujours en arrière-plan. Lorsque vous l'utilisez dans un environnement de développement, il est nécessaire de toujours démarrer le conteneur en arrière-plan, utilisez donc la commande "-d" pour passer en mode détaché. -d ・ ・ ・ détaché

mode détaché

Démarrez le conteneur et détachez-le immédiatement de l'hôte. Le conteneur se déplace dans les coulisses.

mode détaché ⇆ mode premier plan

mode premier plan

Le conteneur a démarré sans "-d" Un cas où vous entrez directement dans le conteneur, ou configurez le conteneur une fois, démarrez un programme et supprimez immédiatement le conteneur

docker run --rm [image] Supprimez le conteneur dès que vous le quittez.

dokcer build . Créer une image Docker à partir d'un fichier Docker Habituellement, déplacez-vous vers le dossier dans lequel se trouve le Dockerfile, puis spécifiez le répertoire actuel et créez l'image Docker.

docker build -t [name] [directory] Vous pouvez nommer l'image Docker avec l'option -t.

Dockerfile

・ Dessin de conception d'image Docker ·fichier texte

Il décrit comment créer une image Docker. Il est facile à comprendre car il décrit quel type de conteneur et quel type d'image Docker il s'agira

Lors de la création d'un environnement, entrez une fois dans le conteneur, créez l'environnement à l'intérieur du conteneur et connaissez les packages nécessaires. Ensuite, écrivez dans la version Dockerfile et docker. Cela devient le flux.

⭐️ Minimisez le nombre de couches dans l'image Docker. ・ Il existe trois instructions pour créer un calque docker: EXÉCUTER, COPIER et AJOUTER.

Comment écrire un Dockerfile

INSTRUCTION arguments

Écrivez sous la forme de. arguments ・ ・ ・ Arguments

ex)

FROM ubuntu:latest
RUN touch test

ex)

FROM ubuntu:latest
RUN apt-get update && apt-get install -y \
  curl\
  cvs\
  nginx
CMD ["/bin/bash"]

docker instruction FROM [image] Ce qui détermine l'image Docker de base (dans l'exemple, ubuntu est la base)

Il est bon de spécifier une image avec le minimum de fonctions nécessaires. Il s'agit souvent d'une image placée sur le hub Docker. Dans de nombreux cas, l'image Docker avec le système d'exploitation tel quel, comme ubuntu, est utilisée.

Run [command]

INSTRUCTION de docker pour exécuter des commandes linux

Exécutez les commandes Linux nécessaires pour configurer l'image. Exécuter la commande (créer un calque d'image) Fondamentalement, créez une image docker avec l'instruction docker de RUN.

La méthode d'écriture de base est l'exemple ci-dessus, il est donc bon de s'en souvenir.

ubuntu gère les paquets avec la commande apt-get (ou apt). Il est courant de toujours obtenir une nouvelle liste avant l'installation.

apt-get update ・ ・ ・ Obtenez la dernière liste de paquets apt-get install [package] ・ ・ ・ Install [package]

"-Y" ... Répondez par "oui" lors de l'installation du paquet. Organisez les packages requis dans l'ordre abc.

"" ... Un saut de ligne est également considéré comme une ligne.

RUN crée un calque d'image Docker, donc si vous effectuez plusieurs RUN, vous aurez autant de calques d'image Docker qu'il y en a, et l'image Docker s'agrandit. Pour éviter cela, connectez les commandes avec "&&" et réduisez autant que possible le nombre de lignes RUN.

CMD["executable", "param1", "param2"] Vous pouvez spécifier la commande par défaut pour l'image Docker.

exécutable ・ ・ ・ Commande exécutable

Les fichiers Docker se terminent généralement par CMD.

Ce n'est pas obligatoire, mais il vaut mieux le mettre. Après tout, lorsque vous regardez le Dockerfile, vous pouvez voir que cette commande fonctionne par défaut.

COPY [src][destination] Au moment de la construction, les fichiers du contexte de construction peuvent être inclus dans l'image du docker. → Vous pouvez transmettre certains fichiers ou dossiers de l'hôte au conteneur.

src ・ ・ ・ Chemin du fichier hôte destination ・ ・ ・ Chemin du fichier qui stocke le fichier cible dans le conteneur

"COPY" et "ADD" sont similaires, mais fondamentalement "COPY" est très bien.

ADD [src][destination] Au moment de la construction, les fichiers du contexte de construction peuvent être inclus dans l'image du docker. → Vous pouvez transmettre certains fichiers ou dossiers de l'hôte au conteneur.

Lorsque vous créez le fichier tar compressé dans le docker, il l'envoie à l'image du docker et le décompresse.

ENTRYPOINT Vous pouvez spécifier la commande par défaut lors de l'exécution du docker. (Identique à CMD)

"ENTRY POINT" ne peut pas être écrasé lors de l'exécution du docker. Dans "CMD", il peut être écrasé lors de l'exécution du docker.

Si "ENTRY POINT" est dans le Dockerfile, la manière d'écrire les changements CMD. La forme de CMD spécifie l'argument de cette commande spécifié dans "ENTRYPOINT".

Exemple) ・ CMD sans POINT D'ENTREE CMD ["ls", "--help", "argument", "argument", ...]

・ CMD avec POINT D'ENTREE ENTRYPOINT["ls"] CMD ["--help", "argument", "argument", ...]

ENV [key] [value] Les variables d'environnement peuvent être spécifiées dans le Dockerfile. Souvent utilisé lors du passage par un chemin.

Variables d'environnement: variables utilisées par tous les processus exécutés sur le système d'exploitation pour partager des informations. Combinaison clé et valeur

ENV [key]=[value] Peut aussi être écrit

WORKDIR [chemin absolu]

Vous pouvez modifier le répertoire dans lequel l'instruction docker décrite dans Dockerfile est exécutée.

Dans le Dockerfile, l'emplacement où chaque instruction est exécutée est directement sous la racine. Dans le Dockerfile, même si vous vous déplacez avec la commande cd avec RUN, la commande suivante sera exécutée avec RUN directement sous la racine. Cependant, cela peut être gênant, alors spécifiez le chemin absolu dans "WORKDIR" et exécutez les instructions suivantes sur le chemin spécifié.

Détails de la commande docker build

Pourquoi spécifiez-vous ce dossier au lieu de dockerfile lors de l'exécution de docker build?

Lors de l'exécution de la construction du docker, transmettez le dossier spécifié au démon docker. docker damon crée une image docker basée sur le dossier et Dockerfile.

Vous avez donc besoin d'un dossier ainsi que d'un Dockerfile.

Le dossier à construire est appelé "contexte de construction". Dans ce contexte, le démon docker crée une image docker à partir du fichier docker.

contexte ・ ・ ・ Environnement et situation

Qu'est-ce que le démon docker

・ Gestion des objets docker. (En fait, utilisez le conteneur et l'image du docker) ・ Communiquez avec d'autres outils Docker tels que docker compose.

objet docker ・ ・ ・ Conteneur, image, réseau, etc.

Une commande CLI docker (telle que «docker build» ou «docker run») est utilisée pour envoyer des commandes au démon docker qui gère les objets docker.

Faire la construction de docker tout en utilisant le cache

Si vous avez déjà une couche docker, vous n'avez pas besoin de la reconstruire. Tout en conservant le fichier docker, divisez RUN en plusieurs entreprises.

Si vous ajoutez un nouveau package et que vous le construisez avec RUN in one, un nouveau calque d'image sera créé.

ex)

FROM ubuntu:latest
RUN apt-get update 
RUN apt-get install -y \← Diviser RUN
  curl\
  cvs\
  git\← Ajouter
  nginx
CMD ["/bin/bash"]

docker build -f [docker file] [build context] S'il n'y a pas de fichier docker dans le contexte de construction, ou si vous avez créé un autre fichier docker et séparé de dev et test, utilisez l'option "-f" et effectuez une construction docker pour spécifier un fichier docker spécifique, puis une construction docker. ça peut.

Si vous avez différents fichiers docker dans l'environnement de développement et l'environnement de test, vous pouvez utiliser "-f" pour spécifier le fichier docker et créer le docker.

Le nom du Dockerfile est 開発系ではDockerfile.dev Dans le test Dockerfiel.test Le nom du fichier est souvent sous la forme de.

Relation entre l'hôte et le conteneur

Partage du système de fichiers

Le système de fichiers du conteneur est indépendant du système de fichiers de l'hôte, mais l'option "-v" permet au conteneur d'accéder au système de fichiers de l'hôte. Montez le système de fichiers hôte sur le conteneur. En montant le système de fichiers, vous pouvez vous comporter comme si le système de fichiers hôte se trouvait dans le système de fichiers du conteneur. (En fait, il n'est pas dans le conteneur. Si vous le mettez dans le conteneur, il sera grand.)

Dans l'environnement de développement, le code est souvent placé sur l'hôte et le conteneur est utilisé lors de l'exécution du code.

Fondamentalement, lors du développement, il est courant de placer des scripts de code et des données sur l'hôte et non dans le conteneur.

docker run -v [host/path]:[container/path]

Accès aux fichiers

Exécutez le conteneur avec l'ID utilisateur et l'ID de groupe

L'accès aux fichiers est un problème lorsque le conteneur peut accéder au système de fichiers de l'hôte. En ajoutant l'option "-u", vous pouvez configurer un conteneur en spécifiant l'ID utilisateur ou l'ID de groupe. Par conséquent, les privilèges de l'ID utilisateur hôte et de l'ID de groupe sont appliqués au conteneur tels quels.

docker run -u (id -u):(id -g) (id -u): ID utilisateur (id -g): ID de groupe $: La valeur de retour de la commande est spécifiée dans "-u"

Connectez les ports

Connectez le port hôte au port du conteneur Port: ce que le processus utilise pour la communication de données L'adresse IP et le nom d'hôte sont l'adresse du bâtiment et le port est le numéro de la chambre.

Lorsque vous accédez au serveur Web ou au service Web de l'hôte depuis l'extérieur, vous pouvez accéder au serveur Web ou au service Web de l'hôte en spécifiant le port en plus du nom et de l'adresse IP de l'hôte. Si un serveur Web ou un service Web est en cours d'exécution sur le conteneur, vous pouvez accéder au port du conteneur de l'extérieur en connectant (en publiant) le port hôte et le port du conteneur.

docker run -p [host_port]:[container_port] docker run -p 8888:8888

Limite des ressources informatiques

S'il y a plusieurs conteneurs dans l'hôte et qu'un conteneur utilise toute la mémoire, l'ensemble du système peut tomber en panne. Pour éviter cela, vous pouvez spécifier la limite supérieure de "cpu" et "memory" pour chaque conteneur.

docker run --cpus [#ofCPUs] --memory [byte]

[#ofCPUs] ・ ・ ・ Définit le processeur maximum auquel le conteneur peut accéder [octet] ・ ・ ・ Définit la mémoire maximale à laquelle le conteneur peut accéder

Afficher les détails du conteneur

Les informations sur le conteneur Docker s'affichent dans une liste.

docker inspect [container] | grep -i [something]

Le contenu affiché par docker inspect est si volumineux que vous ne pouvez pas accéder immédiatement aux informations dont vous avez besoin. Utilisez grep -i [quelque chose] pour afficher seulement l'inspection de dockr liée à la chaîne de caractères spécifiée telle que "CPU", "mémoire" et "variable d'environnement (env)".

-i ・ ・ ・ ignorer, ignorer la casse

finalement

Cet article a été créé sur la base du cours udemy docker de Kame-san (https://twitter.com/usdatascientist?s=21) (https://www.udemy.com/share/103aTRAEMfeVhaTXoB/). ..

Le blog de Kame (https://datawokagaku.com/docker_lecture/)

Recommended Posts

Principes de base de Docker
docker
Surveillance Docker-expliquant les bases des bases-
mémo docker
Notions de base sur les rails
printemps × docker
Bases de Ruby
À propos de Docker
Docker Intellij
Principes de base de JPA 1
Principes de base de ViewPager
Les bases de Java
Les bases de Java
Bases de JavaScript
Comprendre Docker
Mémorandum Docker
Principes de base de JPA 2
Les bases de Java
Principes de base de RecyclerView
Rails CSV Basic
tutoriel docker (mémo)
Mémorandum technique (Docker)
Docker + Laravel + Codeception
Liberty sur Docker
Principes de base du routage des rails
Mémo d'opération Docker
Principes de base de la base de données Rails
Principes de base de l'enregistreur de rails
bases de la programmation Java
commande de base docker
Bases de Ruby
Principes de base de Java JAR
Notions de base orientées objet (Java)
Notes d'étude Docker
Résumé de la commande Docker
Docker rapide / nginx
bases de vim (gitbush)
Petit conteneur Docker
Rails Docker-Partie 1-
Bases des expressions régulières
Rails Docker ~ Partie 2 ~