Manuel Docker Compact (4: Créer une image personnalisée)

En premier

Cet article "Docker Compact Manual" se compose de 4 éléments. D'autres articles sont ici.

Numéro de poste Sous-titre et destination d'accès
1 Commandes élémentaires / basiques
2 Montage et persistance des données
3 docker-compose
4 Créer une image personnalisée(* Cet article)

Objectif de cet article

Si vous souhaitez créer votre propre application, vous avez besoin d'un conteneur personnalisé. Il comprenait non seulement l'image de Docker Hub, mais également les données que je voulais inclure Vous devez créer une image Docker personnalisée. Cette fois, nous allons nous concentrer sur la création d'une image Docker personnalisée.

Meilleures pratiques Dockerfile

Choses à vérifier avant de créer une image personnalisée Le responsable Docker a publié les meilleures pratiques pour Dockerfile. Si vous ne suivez pas dans une certaine mesure ces bonnes pratiques Il peut être difficile à comprendre, difficile à utiliser, impossible à entretenir ou bogué. Il est recommandé de le créer sur la base de ce contenu.

Best practices for writing Dockerfiles

Ceux qui pensaient que c'était anglais: Il existe un site traduit par le projet de localisation japonais. : détendu: Veuillez accéder à partir du site suivant.

Meilleures pratiques Dockerfile

Une chose à noter est que vous devez vérifier l'historique des mises à jour. Si l'historique des mises à jour est ancien, vous devriez également consulter le site officiel.

スクリーンショット 2020-10-26 17.01.10.png

Créer une image personnalisée à partir d'un Dockerfile

Il existe également une méthode pour créer une image de conteneur à partir d'un conteneur (docker commit), Il est courant de stocker le Dockerfile et les données à inclure dans l'image dans le même répertoire de travail.

スクリーンショット 2020-10-26 19.34.51.png

Instructions pouvant être spécifiées dans le Dockerfile

Remarque Dans le Dockerfile, les instructions sont exécutées ligne par ligne dans l'ordre depuis le début. En d'autres termes, si l'ordre des descriptions est modifié, une erreur se produira ou un conteneur involontaire sera créé.

ordre Contenu d'exécution
FROM Spécifier l'image de base
ADD Ajoutez des fichiers et des dossiers à l'image.
Si vous spécifiez un fichier compressé, il sera automatiquement développé, ce qui est pratique.
Vous pouvez également spécifier un fichier distant en dehors du répertoire dans lequel se trouve le Dockerfile.
COPY Ajouter des fichiers et des dossiers à l'image
Le fichier compressé n'est pas développé et est copié tel quel
Seuls les fichiers du répertoire dans lequel le Dockerfile est placé peuvent être spécifiés.
RUN Exécution de la commande lors de la création d'une image
CMD Commande par défaut à exécuter au démarrage du conteneur
(Lorsque la commande à exécuter par docker create ou docker run est omise)
Spécifier
ENTRYPOINT Au moment de l'exécution de l'image (lors de la création ou de l'exécution du docker)
Forcer l'exécution de la commande
ONBUILD Exécuter des instructions arbitraires lorsque la construction est terminée
EXPOSE Communiquer le port de communication supposé à l'utilisateur d'image
VOLUME Communiquer l'emplacement de stockage des données persistantes aux utilisateurs d'images
ENV Définition de la variable d'environnement
WORKDIR RUN,CMD,ENTRYPOINT,ADD,Spécifiez le répertoire de travail pour COPY
SHELL Spécification du shell au moment de la construction
LABEL Nom / numéro de version / paramètre des informations du fabricant
USER RUN,CMD,L'utilisateur qui exécute la commande spécifiée par ENTRYPOINT
Définissez le groupe (aucun USER spécifié n'est root)
ARG docker buildDéclarez les arguments qui peuvent être spécifiés lorsque
STOPSIGNAL Pour le programme s'exécutant dans le conteneur à l'arrêt du docker
Changer le signal à envoyer
(La règle est SIGTERM)
HEALTHCHECK Personnalisez la méthode de vérification de l'état pour vérifier la vitalité du conteneur

Facile à devenir accro à la partie 1

À quel moment RUN, CMD, ENTRYPOINT sont-ils en cours d'exécution? ?? J'ai aussi fait une erreur. Je pense que cela devrait être rappelé dans la figure. スクリーンショット 2020-10-26 20.58.54.png

--RUN est l'étape de création d'image --CMD, ENTRYPOINT est l'étape du démarrage du conteneur

Facile à devenir accro à la partie 2

Utilisation correcte du CMD et du POINT D'ENTREE Comment dois-je les utiliser correctement? ??

** Conclusion ** Utilisez CMD dans la plupart des cas. Lors de l'utilisation de CMD, si l'utilisateur décrit explicitement la commande, celle-ci sera priorisée. Par exemple, si un bogue se produit dans un conteneur personnalisé, s'il est spécifié par ENTRYPOINT Il ne peut pas être modifié car la commande forcée est exécutée. Ce bogue continuera à se produire. D'autre part, CMD permet à l'utilisateur de choisir de laisser la commande par défaut ou d'exécuter une commande arbitraire.

Exemple d'exemple

Des échantillons personnalisés dans Rails sont également disponibles. Vous pouvez voir qu'il est différent de l'instruction dans l'image officielle de Docker Hub.

Rails officiels Docker Hub

FROM ruby:2.3

RUN apt-get update \
    && apt-get install -y --no-install-recommends \
        postgresql-client \
    && rm -rf /var/lib/apt/lists/*

WORKDIR /usr/src/app
COPY Gemfile* ./
RUN bundle install
COPY . .

EXPOSE 3000
CMD ["rails", "server", "-b", "0.0.0.0"]

Quickstart: Compose and Rails

FROM ruby:2.5
RUN apt-get update -qq && apt-get install -y nodejs postgresql-client
RUN mkdir /myapp
WORKDIR /myapp
COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
COPY . /myapp

# Add a script to be executed every time the container starts.
COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000

# Start the main process.
CMD ["rails", "server", "-b", "0.0.0.0"]

Même ainsi, la version Ruby de Docker Hub est 2.3 et Quickstart est également 2.5. Trop vieux ❗️❗️ Je voudrais que ce soit la version 2.6 ou ultérieure.

Ainsi, pour créer un environnement de conteneur Rails moderne, personnalisez davantage le contenu de Quickstart. Je pense que tu devrais le faire.

** Publicité ** Ceux qui se demandaient s'il serait plus facile de créer un environnement de développement moderne avec Rails Veuillez visiter ce site que j'ai créé.

Manuel de création d'un environnement de développement stable pour «Rails6» avec «Docker-compose»

finalement

J'ai posté Docker en 4 exemplaires. Merci beaucoup pour ceux qui ont été avec nous jusqu'à la fin. Si vous le trouvez utile, je l'apprécierais si vous pouviez ** LGTM </ font> **.

Si vous avez des erreurs, veuillez nous en informer. Nous avons également reçu des conseils de nombreuses personnes. Je voudrais vous remercier ici.

Documents de référence / site source de référence

WEB

Livres
  • [Introduction au développement de conteneurs pratiques Docker / Kubernetes (examen technique)](https://www.amazon.co.jp/Docker-Kubernetes-%E5%AE%9F%E8%B7%B5%E3%82%B3 % E3% 83% B3% E3% 83% 86% E3% 83% 8A% E9% 96% 8B% E7% 99% BA% E5% 85% A5% E9% 96% 80-% E5% B1% B1% E7% 94% B0-% E6% 98% 8E% E6% 86% B2 / dp / 4297100339 / ref = sr_1_1? __Mk_ja_JP =% E3% 82% AB% E3% 82% BF% E3% 82% AB% E3% 83% 8A & dchild = 1 & keywords = Docker% 2FKubernetes +% E5% AE% 9F% E8% B7% B5% E3% 82% B3% E3% 83% B3% E3% 83% 86% E3% 83% 8A% E9% 96% 8B% E7% 99% BA% E5% 85% A5% E9% 96% 80 & qid = 1603714747 & sr = 8-1)
  • [Construction de conteneurs docker d'infrastructure cloud d'apprentissage tactile à partir des bases (Nikkei BP)](https://www.amazon.co.jp/%E3%81%95%E3%82%8F%E3%81%A3% E3% 81% A6% E5% AD% A6% E3% 81% B6% E3% 82% AF% E3% 83% A9% E3% 82% A6% E3% 83% 89% E3% 82% A4% E3% 83% B3% E3% 83% 95% E3% 83% A9-docker% E5% 9F% BA% E7% A4% 8E% E3% 81% 8B% E3% 82% 89% E3% 81% AE% E3% 82% B3% E3% 83% B3% E3% 83% 86% E3% 83% 8A% E6% A7% 8B% E7% AF% 89-% E5% A4% A7% E6% BE% A4-% E6% 96% 87% E5% AD% 9D-ebook / dp / B089VZXX63 / ref = sr_1_1? __Mk_ja_JP =% E3% 82% AB% E3% 82% BF% E3% 82% AB% E3% 83% 8A & dchild = 1 & keywords =% E3% 81% 95% E3% 82% 8F% E3% 81% A3% E3% 81% A6% E5% AD% A6% E3% 81% B6% E3% 82% AF% E3% 83% A9% E3% 82% A6% E3% 83% 89% E3% 82% A4% E3% 83% B3% E3% 83% 95% E3% 83% A9 + docker +% E5% 9F% BA% E7% A4% 8E% E3% 81% 8B% E3% 82% 89% E3% 81% AE% E3% 82% B3% E3% 83% B3% E3% 83% 86% E3% 83% 8A% E6% A7% 8B% E7% AF% 89 & qid = 1603714817 & sr = 8-1)

Recommended Posts

Manuel Docker Compact (4: Créer une image personnalisée)
Manuel compact de Docker (3: docker-compose)
Créer une image docker pour exécuter une application Java simple
Manuel Docker Compact (1: Commandes de base / de base)
Créez une image Docker avec le JDK Oracle installé (miam
Créez un environnement Vue3 avec Docker!
2. Créez une image Docker et enregistrez le registre
[Kotlin / Android] Créer une vue personnalisée
Utilisez Jenkins pour créer dans Docker, puis créez une image Docker.
Créez une image Docker pour redoc-cli et enregistrez-la sur Docker Hub
Créez rapidement un environnement Web à l'aide de Docker
Comment créer une petite image docker de l'application openjdk 11 (EA) (1 Go → 85 Mo)
[Memo] Créez facilement un environnement CentOS 8 avec Docker
Créez instantanément un environnement Privoxy + Tor à l'aide de Docker
Créer un onglet personnalisé avec SwiftUI 2.0
[Introduction à Docker] Créer une image Docker pour l'apprentissage automatique et utiliser le notebook Jupyter
Créer un environnement Docker pour Oracle 11g XE
Créer un environnement de développement Spring Boot avec docker
J'ai essayé d'utiliser Wercker pour créer et publier une image Docker qui lance GlassFish 5
J'ai créé une image Docker pour la version japonaise de SDAPS
Comment déployer à partir d'une image Docker locale vers Heroku
Créer un conteneur Docker pour convertir EPS en source PGF
[Note] Créez un environnement Java à partir de zéro avec docker
Manuel compact de Docker (3: docker-compose)
Manuel Docker Compact (1: Commandes de base / de base)
Manuel Docker Compact (4: Créer une image personnalisée)
Installation et initialisation de Docker
[Java] Créer un filtre
Supprimer l'image Docker inutilisée
Peut-être que ça marche! Créez une image avec Docker et partagez-la!
Comment créer une image de conteneur légère pour les applications Java
[Notes personnelles] Comment pousser une image Docker vers des packages GitHub
J'ai essayé de créer un environnement de développement padrino avec Docker