Vous faire comprendre en profondeur la commande DockerFile
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.
É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épertoireWORKDIR <工作目录路径>
WORKDIR /app RUN echo "hello" > world.txt
Exemple 2 :
WORKDIR /a WORKDIR b WORKDIR c RUN pwd ## RUN pwd 的工作目录为 /a/b/c
USER <用户名>[:<用户组>]
# 建立 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 [选项] CMD <命令>:设置检查容器健康状况的命令
HEALTHCHECK NONE:如果基础镜像有健康检查指令,使用这行可以屏蔽掉其健康检查指令
--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!

Outils d'IA chauds

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

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

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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

Étapes pour créer une image docker: écrivez un dockerfile qui contient les instructions de construction. Créez l'image dans le terminal, en utilisant la commande docker build. Marquez l'image et attribuez des noms et des balises à l'aide de la commande docker tag.

Les étapes pour mettre à jour une image Docker sont les suivantes: Tirez la dernière étiquette d'image Nouvelle image Supprimer l'ancienne image pour une balise spécifique (facultative) Redémarrez le conteneur (si nécessaire)

Comment utiliser Docker Desktop? Docker Desktop est un outil pour exécuter des conteneurs Docker sur les machines locales. Les étapes à utiliser incluent: 1. Installer Docker Desktop; 2. Démarrer Docker Desktop; 3. Créer une image Docker (à l'aide de DockerFile); 4. Build Docker Image (en utilisant Docker Build); 5. Exécuter Docker Container (à l'aide de Docker Run).

Pour obtenir la version Docker, vous pouvez effectuer les étapes suivantes: exécutez la commande docker "docker --version" pour afficher les versions client et serveur. Pour Mac ou Windows, vous pouvez également afficher les informations de version via l'onglet Version de la GUI de bureau Docker ou du menu de bureau à propos de Docker.

Méthodes de copie de fichiers en hôtes externes dans Docker: Utilisez la commande docker cp: exécuter docker cp [options] & lt; Container Path & gt; & lt; Host Path & gt;. Utilisation de volumes de données: créez un répertoire sur l'hôte et utilisez le paramètre -v pour monter le répertoire dans le conteneur lors de la création du conteneur pour obtenir la synchronisation de fichiers bidirectionnels.

Vous pouvez interroger le nom du conteneur Docker en suivant les étapes: répertorier tous les conteneurs (Docker PS). Filtrez la liste des conteneurs (à l'aide de la commande grep). Obtient le nom du conteneur (situé dans la colonne "Noms").

Pour enregistrer l'image dans Docker, vous pouvez utiliser la commande docker commit pour créer une nouvelle image, contenant l'état actuel du conteneur spécifié, Syntaxe: Docker Commit [Options] Nom d'image de l'ID de conteneur. Pour enregistrer l'image dans le référentiel, vous pouvez utiliser la commande docker push, Syntax: Docker Push Image Name [: Tag]. Pour importer des images enregistrées, vous pouvez utiliser la commande docker pull, syntaxe: docker pull name [: tag].

Quatre façons de quitter Docker Container: Utilisez Ctrl D dans le terminal de conteneur Entrez la commande d'exit dans le terminal de conteneur Utilisez Docker Stop & lt; contener_name & gt; Commande utilise docker kill & lt; contener_name & gt; commande dans le terminal hôte (sortie de force)
