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) |
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.
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.
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.
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 build Dé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 |
À 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.
--RUN est l'étape de création d'image --CMD, ENTRYPOINT est l'étape du démarrage du conteneur
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.
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.
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"]
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»
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.
WEB
Recommended Posts