[LINUX] Comment créer un Dockerfile (basique)

introduction

Docker est une technologie qui facilite la création d'un environnement qui a été introduit par de nombreuses sociétés de développement informatique. Un Dockerfile est comme un dessin de conception DockerImage. Vous pouvez créer une image Docker de l'environnement que vous souhaitez créer en créant vous-même un Dockerfile.

Relation entre Dockerfile, DockerImage et conteneur

Créez dans l'ordre de Dockerfile => DockerImage => container.

** Comment créer une image Docker ** Docker build .dans le répertoire où se trouve le Dockerfile.

** Comment créer un conteneur ** docker run (nom ou ID DockerImage)

Instructions de Dockerfile

Procédure de création de Dockerfile

FROM Instructions pour déterminer l'image de base. Écrivez-le au début du Dockerfile. Le système d'exploitation est essentiellement décrit après FROM.

FROM OS(Choisissez parmi l'image Docker)

Exemple)FROM ubuntu:latest
Exemple)FROM ruby:2.5

RUN Il s'agit d'une instruction pour exécuter la commande correspondant au système d'exploitation décrit dans FROM. Une couche est créée pour chaque RUN. (L'image Docker est créée en empilant des couches.)

Commandes correspondant à RUN OS

Exemple)FROM ubuntu:latest
   RUN touch test
=>Une couche de test tactile est en outre créée dans l'image Docker sur la couche ubuntu.
(Je crée une image Docker qui crée un fichier appelé test.)

Exemple)FROM ubuntu:latest
   RUN apt-get update && apt-get install -y \
       curl\
       nginx
=>Dans Docker Image, une couche qui installe deux packages, curl et nginx, est en outre créée dans la couche d'ubuntu.
(apt-get update est écrit pour mettre à jour le package à installer, apt-get install est écrit pour installer le package.)
(-y est utilisé pour continuer comme oui lorsqu'on lui a demandé oui ou non pendant l'installation, et des barres obliques inverses sont utilisées pour les sauts de ligne pour rendre le paquet plus facile à lire.)

Étant donné que le Dockerfile est généré et que DockerImage est créé une fois, il est mis en cache, vous pouvez donc réduire le temps de construction en écrivant en plus RUN ci-dessous et ci-dessous.

CMD Instructions pour spécifier la commande d'exécution du conteneur. Décrivez-le à la fin du Dockerfile.

Commandes correspondant à CMD OS

Exemple)FROM ubuntu:latest
   RUN apt-get update && apt-get install -y \
       curl\
       nginx
   CMD ["/bin/bash"]
=>Après avoir construit un Dockerfile et créé une DockerImage, lors de la création et de l'exécution d'un conteneur avec docker run,/bin/bash sera exécuté.

ENTRYPOINT Il s'agit d'une instruction qui a un rôle similaire à CMD.

CMD vous permet de remplacer les commandes lors de l'exécution d'une image Docker. (Exemple: si docker run ls est utilisé, ls sera exécuté à la place de bash dans l'exemple ci-dessus lors de l'explication de CMD.)

Si vous utilisez ENTRYPOINT, vous ne pouvez pas écraser la commande et CMD décrira l'option de ENTRYPOINT.

Commandes correspondant à ENTRYPOINT OS

Exemple)FROM ubuntu:latest
   RUN apt-get update && apt-get install -y \
       curl\
       nginx
   ENTRYPOINT ["ls"]
   CMD ["--help"]
=>En écrivant la commande ls dans ENTRYPOINT, les commandes autres que la commande ls ne peuvent pas être exécutées pendant l'exécution du docker, et CMD est une option facultative.--l'aide est spécifiée.

COPY Instructions pour copier les fichiers du répertoire contenant le Dockerfile (appelé BuildContext) dans le DockerImage.

Nom de fichier dans le contexte de construction de copie

Exemple)FROM ubuntu:latest
   RUN mkdir /new_dir
   COPY test /new_dir
   CMD ["/bin/bash"]
=>Lors de la création d'un Dockerfile, il devient un DockerImage/new_Créez un répertoire appelé dir/new_Un calque à copier par un fichier appelé test to dir est en outre créé dans le calque d'utubtu.
Lorsque vous créez un conteneur à partir de cette image Docker, il sera à l'intérieur du conteneur/new_Un répertoire appelé dir et un fichier appelé test ont été créés.

ADD Semblable à la commande COPY, c'est une instruction qui peut également être copiée.

** Différence entre ADD et COPY ** Lorsque ADD copie un fichier compressé, il le copie et le décompresse. COPY n'est qu'une simple copie. Utilisez ADD lors de la copie et la décompression de fichiers compressés et COPY pour les copies simples qui ne sont pas liées aux fichiers compressés.

Nom de fichier dans le contexte de construction de copie

Exemple)FROM ubuntu:latest
   ADD sample.tar /
   CMD ["/bin/bash"]
=>Lors de la création d'un Dockerfile, échantillonnez dans DockerImage.le goudron/(Directement en dessous de la route)Un calque est créé pour copier et décompresser.
Lors de la création d'un conteneur, échantillonnez directement sous la racine du conteneur.Le tar a été décompressé.

ENV Instructions pour définir les variables d'environnement.

Variable d'environnement ENV

Exemple)FROM ubuntu:latest
   ENV key1 value
   CMD ["/bin/bash"]
=>Key1 lors de la création d'un conteneur=Une image Docker avec une variable d'environnement appelée valeur est créée.

WORKDIR Ceci est une instruction pour changer le répertoire d'exécution de l'instruction.

Répertoire WORKIDIR

Exemple)FROM ubuntu:latest
   RUN mkdir sample_folder
   WORKDIR /sample_folder
   RUN touch sample_file
=> sample_Créez un répertoire appelé dossier et échantillon_échantillon dans le dossier_Ce sera le calque qui crée le fichier.
  (Créé dans un conteneur à l'aide de WORKDIR/sample_Vous pouvez exécuter RUN dans le dossier.)

référence

Udemy

Kameleon Lecturer "Cours Docker enseigné par des développeurs IA américains à partir de zéro"

https://www.udemy.com/share/103aTRAEAdd1pTTHoC/

Il y a une charge, mais c'était très facile pour moi en tant que débutant à comprendre.

finalement

Nous espérons que cet article aidera les débutants à évaluer.

Recommended Posts

Comment créer un Dockerfile (basique)
Comment créer un package Conda
Comment créer un pont virtuel
Comment créer un robot - Basic
Comment créer un fichier de configuration
Comment créer un clone depuis Github
Comment créer un dossier git clone
Comment créer un référentiel à partir d'un média
Comment créer un objet fonction à partir d'une chaîne
Comment créer un fichier JSON en Python
[Note] Comment créer un environnement de développement Ruby
Comment créer une boîte de saisie Kivy 1 ligne
Procédure de création d'application multi-plateforme avec kivy
Comment créer une API Rest dans Django
[Note] Comment créer un environnement de développement Mac
Comment appeler une fonction
Comment pirater un terminal
Lire la source Python-Markdown: Comment créer un analyseur
Comment créer un sous-menu avec le plug-in [Blender]
[Go] Comment créer une erreur personnalisée pour Sentry
Comment créer un référentiel local pour le système d'exploitation Linux
Comment créer un simple script serveur / client TCP
[Python] Comment créer un histogramme bidimensionnel avec Matplotlib
Comment faire une traduction japonais-anglais
Comment mettre un lien symbolique
Comment créer un bot slack
Comment créer un robot - Avancé
Comment créer un maillage de flux autour d'un cylindre avec SnappyHexMesh
Comment créer une fonction récursive
[Python Kivy] Comment créer une simple fenêtre pop-up
[Blender] Comment créer un plug-in Blender
Comment supprimer un conteneur Docker
5 façons de créer un chatbot Python
Je veux créer un Dockerfile pour le moment.
[Python] Comment créer une table à partir d'une liste (opération de base de création de table / changement de nom de matrice)
Présentation de la création d'un socket serveur et de la création d'un socket client
Comment créer une étiquette (masque) pour la segmentation avec labelme (masque de segmentation sémantique)
[Langage C] Comment créer, éviter et créer un processus zombie
Comment créer une grande quantité de données de test dans MySQL? ??
Comment créer un fichier factice CSV contenant du japonais à l'aide de Faker
Comment écrire une docstring pour créer un document tuple nommé avec sphinx
Comment créer une API de machine learning sans serveur avec AWS Lambda
J'ai essayé de créer un linebot (implémentation)
Comment diviser et enregistrer un DataFrame
Comment créer un environnement de traduction sphinx
Qiita (1) Comment écrire un nom de code
Comment ajouter un package avec PyCharm
[Python] Comment rendre une classe itérable
Comment dessiner un graphique avec Matplotlib
Comment créer un fichier * .spec pour pyinstaller.
[Python] Comment convertir une liste bidimensionnelle en liste unidimensionnelle
Comment créer un environnement NVIDIA Docker