Dieser Artikel vermittelt Ihnen relevantes Wissen über den BefehldockerFile. Jeder Befehl enthält Anweisungen zum Erstellen einer Ebene von Bildproduktionsdateien.
Empfohlene Studie: „Docker-Video-Tutorial“
Dockerfile ist eine Bildproduktionsdatei, die Anweisungen enthält, von denen jede eine Ebene aufbaut.
Erstellen Sie das Image
docker build [选项] <上下文路径/URL/-> docker build -t nginx:v3 . # . 表示Dockerfile在当前目录
FROM gibt das Basis-Image an
Geben Sie das Basis-Image über FROM an, daher ist FROM eine notwendige Anweisung in einer Docker-Datei und muss die erste Anweisung sein.
Von Grund auf ist dieses Bild ein virtuelles Konzept und existiert nicht tatsächlich. Es stellt ein leeres Bild dar. Die folgenden Anweisungen beginnen als erste Ebene des Bildes zu existieren.
RUN-Ausführungsbefehl
RUN wird zum Ausführen von Befehlszeilenbefehlen verwendet. Es gibt zwei Formate:
Shell-Format:
RUN <命令> RUN echo 'Hello, Docker!
' > /usr/share/nginx/html/index.html
exec-Format:
RUN ["可执行文件", "参数1", "参数2"]
Union FS hat eine maximale Anzahl von Ebenen, z. B. AUFS. Früher betrug die maximale Anzahl an Ebenen 42, jetzt sind es 127. Dieselbe Funktion sollte && verwenden, um die erforderlichen Befehle zu verketten, um die Anzahl der Spiegelebenen zu vereinfachen Datei oder entpacken Sie die Datei)
COPY [--chown=: ] <宿主机源路径> <镜像内的目标路径> COPY [--chown= : ] ["<宿主机源路径1>",... "<镜像内的目标路径>"]
# 把当前目录的a.txt文件复制到镜像的根目录 COPY a.txt /a.txt
ADD [--chown=: ] http://xxx <目标路径> # 下载文件到镜像的目标路径 ADD [--chown= : ] ./a.tar.gz <目标路径> # 复制压缩包,并自动解压到目标路径
ENTRYPOINT angegeben, ähnlich wie bei CMD
Das Format stimmt mit CMD überein. die Unterschiede 1. Verwenden Sie ENTRYPOINT, um Parameter zu übergebenGeben Sie ENTRYPOINT in der Docker-Datei an [ „curl“, „-s“, „http://myip.ipip.net“ ], wenn die Befehlszeile docker run myip - i, der Parameter -i wird an den ENTRYPOINT-Befehl übergeben und schließlich beim Betreten des-Containers Der Container führt Curl -s http://myip.ipip.net -i
2 aus und führt einige Initialisierungsarbeiten durch Das hat nichts mit CMD zu tun. Unabhängig vom CMD des Containers muss im Voraus eine Vorverarbeitung durchgeführt werden.
Ähnlich wie ENTRYPOINT ["docker-entrypoint.sh"] Dieses Skript prüft, ob die Identität des Benutzers legal ist usw.
ENV legt Umgebungsvariablen fest
CMD ["可执行文件", "参数1", "参数2"...]
ARG-Build-Parameter
# 指定进入容器马上指定 cat /a.txt CMD ["sh","-c", "cat /a.txt"]
ENVENV = = ...
ARG <参数名>[=<默认值>]
ARG DOCKER_USERNAME=library FROM ${DOCKER_USERNAME}/alpine
EXPOSE Exposed Port
FROM ${DOCKER_USERNAME}/alpine # 在FROM 之后使用变量,必须在每个阶段分别指定 ARG DOCKER_USERNAME=library RUN set -x ; echo ${DOCKER_USERNAME}
Unterscheiden Sie zwischen EXPOSE und der Verwendung von -p
WorkDir Gibt das Arbeitsverzeichnis an. wird als Root ausgeführt. Wenn Sie die Identität während der Ausführung ändern möchten, beispielsweise wenn Sie einen Dienstprozess als bereits eingerichteter Benutzer ausführen möchten, verwenden Sie nicht su oder sudo. Diese erfordern aufwändigere Konfigurationen und es treten häufig Fehler auf Umgebungen, in denen TTY fehlt. Es wird empfohlen, Gosu zu verwenden.
VOLUME ["<路径1>", "<路径2>"...] VOLUME <路径>
EXPOSE <端口1> [<端口2>...]
Optionen:
WORKDIR <工作目录路径>
Wenn die HEALTHCHECK-Anweisung in einem Image angegeben ist, wird sie zum Starten des Containers verwendet Wenn die Prüfung der HEALTHCHECK-Anweisung erfolgreich ist, wird sie fehlerfrei.HEALTHCHECK kann nur einmal erscheinen. Wenn mehrere geschrieben werden, wird nur der letzte wirksam
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= = = ...
# 标注镜像的作者 LABEL org.opencontainers.image.authors="yeasy"
SHELL 指定执行shell命令的参数
SHELL ["可执行程序", "参数"]
SHELL ["/bin/sh", "-c"] RUN lll ; ls # 这里的shell命令将通过 /bin/sh -c 的方式执行
推荐学习:《docker视频教程》
Das obige ist der detaillierte Inhalt vonMachen Sie sich eingehend mit dem DockerFile-Befehl vertraut. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!