Table des matières
Explication détaillée de la commande DockerFile
Maison Opération et maintenance Docker Vous faire comprendre en profondeur la commande DockerFile

Vous faire comprendre en profondeur la commande DockerFile

Feb 22, 2022 pm 05:40 PM
docker

Cet article vous apporte des connaissances pertinentes sur la commande dockerFile Cette commande contient des instructions. Chaque instruction crée une couche de fichiers de production d'images. J'espère qu'elle sera utile à tout le monde.

Vous faire comprendre en profondeur la commande DockerFile

Étude recommandée : "Tutoriel vidéo Docker"

Explication détaillée de la commande DockerFile

Dockerfile est un fichier de production d'image qui contient des instructions, dont chacune construit un calque.

Construire l'image

docker build [选项] <上下文路径/URL/->

docker build -t nginx:v3 .           # . 表示Dockerfile在当前目录

FROM spécifie l'image de base

Spécifiez l'image de base via FROM, donc FROM est une instruction nécessaire dans un Dockerfile et doit être la première instruction.

À PARTIR DE zéro, cette image est un concept virtuel et n'existe pas réellement. Elle représente une image vierge. Les instructions suivantes commenceront à exister en tant que première couche de l'image.

Commande d'exécution RUN

RUN est utilisé pour exécuter des commandes de ligne de commande. Il existe deux formats :

format shell :

RUN <命令>

RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html

format exec :

RUN ["可执行文件", "参数1", "参数2"]

Union FS a un nombre maximum de couches, comme AUFS. Le nombre maximum de calques était auparavant de 42, mais il est maintenant de 127. Pour la même fonction, && doit être utilisé pour concaténer les commandes requises afin de simplifier le nombre de calques miroir

COPY Copier le fichier

COPY [--chown=<user>:<group>] <宿主机源路径> <镜像内的目标路径>
COPY [--chown=<user>:<group>] ["<宿主机源路径1>",... "<镜像内的目标路径>"]
# 把当前目录的a.txt文件复制到镜像的根目录
COPY a.txt /a.txt

AJOUTER Copier fichier (télécharger le fichier ou décompresser le fichier)

ADD [--chown=<user>:<group>] http://xxx <目标路径>       # 下载文件到镜像的目标路径
ADD [--chown=<user>:<group>] ./a.tar.gz <目标路径>       # 复制压缩包,并自动解压到目标路径

CMD spécifie la commande de démarrage par défaut du processus principal du conteneur

CMD ["可执行文件", "参数1", "参数2"...]
# 指定进入容器马上指定 cat /a.txt

CMD ["sh","-c", "cat /a.txt"]

Lors de l'exécution de l'image docker run -it, si vous ne spécifiez pas de commande comme /bin/bash , sh -c cat /a sera automatiquement exécuté .txt, sinon la commande de démarrage du processus principal du conteneur sera spécifiée en fonction du CMD

ENTRYPOINT spécifié par l'utilisateur, similaire à CMD

Le format est cohérent avec CMD, les différences

1. Utilisez ENTRYPOINT pour passer les paramètres

Spécifiez ENTRYPOINT dans le Dockerfile [ "curl", "-s", "http://myip.ipip.net" ], lorsque la ligne de commande passe docker exécutez myip -i, le paramètre -i sera passé à la commande ENTRYPOINT, et enfin en entrant dans le conteneur
, le conteneur exécutera curl -s http://myip.ipip.net -i

2. un travail d'initialisation qui n'a rien à voir avec CMD. Quel que soit le CMD du conteneur, quel que soit le CMD, un travail de prétraitement doit être effectué au préalable.

Similaire à ENTRYPOINT ["docker-entrypoint.sh"] Ce script vérifie si l'identité de l'utilisateur est légale, etc.

ENV définit les variables d'environnement

ENV <key> <value>
ENV <key1>=<value1> <key2>=<value2>...

Paramètres de construction ARG

ARG <参数名>[=<默认值>]

ARG L'instruction a un plage valide, si elle est spécifiée avant l'instruction FROM, elle ne peut être utilisée que dans l'instruction FROM.

ARG DOCKER_USERNAME=library

FROM ${DOCKER_USERNAME}/alpine

Si spécifié après FROM, les variables utilisées dans chaque étape doivent être spécifiées séparément dans chaque étape

FROM ${DOCKER_USERNAME}/alpine

# 在FROM 之后使用变量,必须在每个阶段分别指定
ARG DOCKER_USERNAME=library

RUN set -x ; echo ${DOCKER_USERNAME}

VOLUME volume anonyme

VOLUME ["<路径1>", "<路径2>"...]
VOLUME <路径>

Afin d'éviter que les utilisateurs n'oublient de monter le répertoire dans lequel les fichiers dynamiques sont enregistrés pendant l'exécution En tant que volume, dans le Dockerfile, vous pouvez spécifier à l'avance certains répertoires à monter en tant que volumes anonymes, de sorte que si l'utilisateur ne spécifie pas le montage au moment de l'exécution, l'application peut s'exécuter normalement sans écrire une grande quantité de données dans le stockage du conteneur. layer

Ici, le répertoire /data sera automatiquement monté en tant que volume anonyme lorsque le conteneur est en cours d'exécution. Toute information écrite dans /data ne sera pas enregistrée dans la couche de stockage du conteneur, garantissant ainsi l'apatridie de la couche de stockage du conteneur.

EXPOSE Exposed Port

EXPOSE <端口1> [<端口2>...]

La commande EXPOSE déclare le port sur lequel le conteneur fournit des services lors de son exécution. EXPOSE déclare uniquement le port que le conteneur a l'intention d'utiliser et n'effectue pas automatiquement le mappage de port sur l'hôte.

L'écriture d'une telle déclaration dans le Dockerfile présente deux avantages. L'un est d'aider les utilisateurs d'images à comprendre le port de garde du service d'image pour faciliter le mappage de configuration ; , lorsque Docker exécute -P, le port EXPOSE sera automatiquement et aléatoirement mappé.

Faites la distinction entre EXPOSE et l'utilisation de -p :

-p mappe le port hôte et le port du conteneur. En d'autres termes, il expose le service portuaire correspondant du conteneur au monde extérieur.

WORKDIR spécifie le répertoire de travail si le répertoire n'existe pas, WORKDIR créera le répertoire

WORKDIR <工作目录路径>
Exemple 1 :

WORKDIR /app

RUN echo "hello" > world.txt

Exemple 2 :

WORKDIR /a
WORKDIR b
WORKDIR c

RUN pwd

## RUN pwd 的工作目录为 /a/b/c

USER Spécifie l'utilisateur actuel

USER <用户名>[:<用户组>]
Si le script. est exécuté en tant que root. Si vous souhaitez modifier l'identité pendant l'exécution, par exemple si vous souhaitez exécuter un processus de service en tant qu'utilisateur déjà établi, n'utilisez pas su ou sudo. Ceux-ci nécessitent des configurations plus difficiles et des erreurs se produisent souvent. environnements où TTY est manquant. Il est recommandé d'utiliser du gosu.

# 建立 redis 用户,并使用 gosu 换另一个用户执行命令
RUN groupadd -r redis && useradd -r -g redis redis

# 下载 gosu
RUN wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/1.12/gosu-amd64" \
    && chmod +x /usr/local/bin/gosu \
    && gosu nobody true
    
# 设置 CMD,并切换到redis用户执行
CMD [ "exec", "gosu", "redis", "redis-server" ]

HEALTHCHECK indique à Docker comment déterminer si l'état du conteneur est normal.

HEALTHCHECK [选项] CMD <命令>:设置检查容器健康状况的命令
HEALTHCHECK NONE:如果基础镜像有健康检查指令,使用这行可以屏蔽掉其健康检查指令
Options :

--interval=<间隔>:两次健康检查的间隔,默认为 30 秒;
--timeout=<时长>:健康检查命令运行超时时间,如果超过这个时间,本次健康检查就被视为失败,默认 30 秒;
--retries=<次数>:当连续失败指定次数后,则将容器状态视为 unhealthy,默认 3 次

Lorsque l'instruction HEALTHCHECK est spécifiée dans une image, utilisez-la pour démarrer le conteneur. démarre et la vérification de l'instruction HEALTHCHECK réussit. Ensuite, elle devient saine si elle échoue un certain nombre de fois de suite.

HEALTHCHECK ne peut apparaître qu'une seule fois. Si plusieurs sont écrits, seul le dernier prendra effet

.

CMD 命令的返回值决定了该次健康检查的成功与否:0:成功;1:失败

ONBUILD 指定某些命令只有当以当前镜像为基础镜像,去构建下一级镜像的时候才会被执行

ONBUILD <其它指令>
# 举例如下Dockerfile,初次构建为镜像my-node时,ONBUILD的三行命令不会执行

FROM node:slim
RUN mkdir /app
WORKDIR /app
ONBUILD COPY ./package.json /app
ONBUILD RUN [ "npm", "install" ]
ONBUILD COPY . /app/
CMD [ "npm", "start" ]

# 只要当其他镜像 FROM my-node 从上面镜像作为基础镜像进行构建时,ONBUILD 的命令开始执行

LABEL 为镜像添加元数据

LABEL <key>=<value> <key>=<value> <key>=<value> ...
# 标注镜像的作者

LABEL org.opencontainers.image.authors="yeasy"

SHELL 指定执行shell命令的参数

SHELL ["可执行程序", "参数"]
SHELL ["/bin/sh", "-c"]

RUN lll ; ls             # 这里的shell命令将通过 /bin/sh -c 的方式执行

推荐学习:《docker视频教程

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Guide de construction d'Agnes Tachyon | Un joli Musume Derby
2 Il y a quelques semaines By Jack chen
Oguri Cap Build Guide | Un joli Musume Derby
3 Il y a quelques semaines By Jack chen
Guide de construction de Grass Wonder | Uma musume joli derby
2 Il y a quelques semaines By Jack chen
Pic comment émoter
4 Il y a quelques semaines By Jack chen

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Tutorial de démarrage rapide .NET CORE UNDE 1. Le début: parler de .NET Core Tutorial de démarrage rapide .NET CORE UNDE 1. Le début: parler de .NET Core May 07, 2025 pm 04:54 PM

1. L'origine de .netcore Lorsque vous parlez de .Netcore, nous ne devons pas mentionner son prédécesseur .NET. Java était sous les projecteurs à l'époque, et Microsoft a également favorisé Java. La machine virtuelle Java sur la plate-forme Windows a été développée par Microsoft en fonction des normes JVM. On dit que c'est la meilleure machine virtuelle Java Performance à l'époque. Cependant, Microsoft a son propre petit Abacus, essayant de regrouper Java avec la plate-forme Windows et d'ajouter des fonctionnalités spécifiques à Windows. L'insatisfaction de Sun à l'égard de cela a conduit à une rupture de la relation entre les deux parties, et Microsoft a ensuite lancé .NET. .NET a emprunté de nombreuses fonctionnalités de Java depuis sa création et a progressivement dépassé Java dans les fonctionnalités linguistiques et le développement de la forme. Java dans la version 1.6

Docker sur Linux: conteneurisation pour les systèmes Linux Docker sur Linux: conteneurisation pour les systèmes Linux Apr 22, 2025 am 12:03 AM

Docker est important sur Linux car Linux est sa plate-forme native qui fournit des outils riches et un support communautaire. 1. Installer Docker: Utilisez Sudoapt-GetUpdate et Sudoapt-GetInstallDocker-Cedocker-Ce-Clicotainerd.io. 2. Créer et gérer les conteneurs: utilisez des commandes Dockerrun, telles que Dockerrun-D --namemyNginx-p80: 80nginx. 3. Écrivez Dockerfile: Optimisez la taille de l'image et utilisez une construction en plusieurs étapes. 4. Optimisation et débogage: utilisez des dockerlogs et dockerex

Docker contre Kubernetes: différences et synergies clés Docker contre Kubernetes: différences et synergies clés May 01, 2025 am 12:09 AM

Docker et Kubernetes sont des leaders de la conteneurisation et de l'orchestration. Docker se concentre sur la gestion du cycle de vie des conteneurs et convient aux petits projets; Kubernetes est bon dans l'orchestration des conteneurs et convient aux environnements de production à grande échelle. La combinaison des deux peut améliorer l'efficacité du développement et du déploiement.

Comment développer une application Web Python complète? Comment développer une application Web Python complète? May 23, 2025 pm 10:39 PM

Pour développer une application Web Python complète, suivez ces étapes: 1. Choisissez le cadre approprié, tel que Django ou Flask. 2. Intégrez les bases de données et utilisez des orms tels que Sqlalchemy. 3. Concevez le frontal et utilisez Vue ou React. 4. Effectuez le test, utilisez Pytest ou Unittest. 5. Déployer les applications, utiliser Docker et des plates-formes telles que Heroku ou AWS. Grâce à ces étapes, des applications Web puissantes et efficaces peuvent être construites.

Qu'est-ce que la compilation croisée en C? Qu'est-ce que la compilation croisée en C? Apr 28, 2025 pm 08:21 PM

La compilation croisée en C fait référence à la compilation d'un fichier ou d'une bibliothèque exécutable qui peut s'exécuter sur une autre plate-forme sur une plate-forme. 1) La compilation croisée nécessite l'utilisation d'un compilateur transversal spécial, comme les variantes GCC ou Clang. 2) La configuration d'un environnement croisé de compilation peut utiliser Docker pour gérer les chaînes d'outils pour améliorer la répétabilité et la portabilité. 3) Lors de la compilation croisée, faites attention aux options d'optimisation du code, telles que -o2, -o3 ou -os, pour équilibrer les performances et la taille du fichier.

Comment les technologies de contenerisation (comme Docker) affectent-elles l'importance de l'indépendance de la plate-forme de Java? Comment les technologies de contenerisation (comme Docker) affectent-elles l'importance de l'indépendance de la plate-forme de Java? Apr 22, 2025 pm 06:49 PM

Les technologies de conteneurisation telles que Docker améliorent plutôt que de remplacer l'indépendance de la plate-forme de Java. 1) Assurer la cohérence entre les environnements, 2) Gérer les dépendances, y compris des versions JVM spécifiques, 3) Simplifier le processus de déploiement pour rendre les applications Java plus adaptables et gérables.

Pourquoi utiliser Docker? Avantages et avantages expliqués Pourquoi utiliser Docker? Avantages et avantages expliqués Apr 25, 2025 am 12:05 AM

La raison de l'utilisation de Docker est qu'il fournit un environnement efficace, portable et cohérent pour former, distribuer et exécuter des applications. 1) Docker est une plate-forme conteneurisée qui permet aux développeurs d'emballer des applications et leurs dépendances dans des conteneurs portables légers. 2) Il est basé sur la technologie des conteneurs Linux et le système de fichiers conjoints pour assurer le démarrage rapide et un fonctionnement efficace. 3) Docker prend en charge la construction en plusieurs étapes, optimise la taille de l'image et la vitesse de déploiement. 4) L'utilisation de Docker peut simplifier les processus de développement et de déploiement, améliorer l'efficacité et assurer la cohérence entre les environnements.

Comment afficher les informations du processus dans le conteneur Docker Comment afficher les informations du processus dans le conteneur Docker May 19, 2025 pm 09:06 PM

Il existe trois façons d'afficher les informations de processus dans le conteneur Docker: 1. Utilisez la commande docktop pour répertorier tous les processus dans le conteneur et afficher PID, utilisateur, commande et autres informations; 2. Utilisez DockErexec pour entrer le conteneur, puis utilisez la commande PS ou TOP pour afficher les informations détaillées du processus; 3. Utilisez la commande dockerstats pour afficher l'utilisation des ressources de conteneur en temps réel et combinez le dockertop pour bien comprendre les performances du conteneur.

See all articles