Eine Docker-Datei ist: 1. Ein Textdokument, das Befehle zum Kombinieren von Bildern enthält. 2. Jeder Befehl kann in der Befehlszeile aufgerufen werden. 3. Docker generiert automatisch Bilder, indem es die Anweisungen in der Docker-Datei liest.
Was ist eine Docker-Datei?
Eine Docker-Datei ist ein Textdokument, das Befehle zum Zusammenstellen eines Bildes enthält. Jeder Befehl kann über die Befehlszeile aufgerufen werden. Docker generiert automatisch Bilder, indem es die Anweisungen in der Docker-Datei liest. Der Befehl
docker build wird verwendet, um ein Image aus einer Docker-Datei zu erstellen. Sie können das Flag -f mit dem Docker-Build-Befehl verwenden, um an einer beliebigen Stelle im Dateisystem auf die Docker-Datei zu verweisen.
Beispiel:
docker build -f /path/to/a/Dockerfile
Zurück zum Anfang
Grundstruktur von Dockerfile
Dockerfile ist im Allgemeinen in vier Teile unterteilt: grundlegende Bildinformationen, Betreuerinformationen, Bildbetriebsanweisungen und Ausführungsanweisungen. Wenn der Container startet, befindet sich „#“ in der Dockerfile-Hinweis.
Zurück nach oben
Dockerfile-Dateibeschreibung
Docker führt die Anweisungen des Dockerfiles in der Reihenfolge von oben nach unten aus. Um ein Basisbild anzugeben, muss die erste Anweisung FROM lauten. Eine Anweisung, die mit dem Zeichen # beginnt, wird als Kommentar behandelt. Sie können RUN, CMD, FROM, EXPOSE, ENV und andere Anweisungen in Docker-Dateien verwenden.
Einige häufig verwendete Befehle sind hier aufgelistet.
FROM: Geben Sie das Basis-Image an, muss der erste Befehl sein
格式: FROM <image> FROM <image>:<tag> FROM <image>@<digest> 示例: FROM mysql:5.6 注: tag或digest是可选的,如果不使用这两个值时,会使用latest版本的基础镜像
MAINTAINER: Betreuerinformationen
格式: MAINTAINER <name> 示例: MAINTAINER Jasper Xu MAINTAINER sorex@163.com MAINTAINER Jasper Xu <sorex@163.com>
RUN: Der Befehl, der beim Erstellen des Images ausgeführt wird
RUN用于在镜像容器中执行命令,其有以下两种命令执行方式: shell执行 格式: RUN <command> exec执行 格式: RUN ["executable", "param1", "param2"] 示例: RUN ["executable", "param1", "param2"] RUN apk update RUN ["/etc/execfile", "arg1", "arg1"] 注: RUN指令创建的中间镜像会被缓存,并会在下次构建中使用。如果不想使用这些缓存镜像,可以在构建时指定--no-cache参数,如:docker build --no-cache
ADD: Lokale Dateien zu In hinzufügen Der Container, Dateien vom Typ TAR werden automatisch dekomprimiert (komprimierte Netzwerkressourcen werden nicht dekomprimiert), und auf Netzwerkressourcen kann zugegriffen werden, ähnlich wie bei wget
格式: ADD <src>... <dest> ADD ["<src>",... "<dest>"] 用于支持包含空格的路径 示例: ADD hom* /mydir/ # 添加所有以"hom"开头的文件 ADD hom?.txt /mydir/ # ? 替代一个单字符,例如:"home.txt" ADD test relativeDir/ # 添加 "test" 到 `WORKDIR`/relativeDir/ ADD test /absoluteDir/ # 添加 "test" 到 /absoluteDir/
COPY: Funktion ähnelt ADD, aber Dateien werden nicht automatisch dekomprimiert. und auf Netzwerkressourcen kann nicht zugegriffen werden
CMD: Wird nach dem Erstellen des Containers aufgerufen, dh nur beim Starten des Containers.
格式: CMD ["executable","param1","param2"] (执行可执行文件,优先) CMD ["param1","param2"] (设置了ENTRYPOINT,则直接调用ENTRYPOINT添加参数) CMD command param1 param2 (执行shell内部命令) 示例: CMD echo "This is a test." | wc - CMD ["/usr/bin/wc","--help"] 注: CMD不同于RUN,CMD用于指定在容器启动时所要执行的命令,而RUN用于指定镜像构建时所要执行的命令。
ENTRYPOINT: Konfigurieren Sie den Container, um ihn ausführbar zu machen. Bei CMD kann auf „application“ verzichtet werden und es werden nur Parameter verwendet.
格式: ENTRYPOINT ["executable", "param1", "param2"] (可执行文件, 优先) ENTRYPOINT command param1 param2 (shell内部命令) 示例: FROM ubuntu ENTRYPOINT ["top", "-b"] CMD ["-c"] 注: ENTRYPOINT与CMD非常类似,不同的是通过docker run执行的命令不会覆盖ENTRYPOINT,而docker run命令中指定的任何参数,都会被当做参数再次传递给ENTRYPOINT。Dockerfile中只允许有一个ENTRYPOINT命令,多指定时会覆盖前面的设置,而只执行最后的ENTRYPOINT指令。
LABEL: Wird verwendet, um Metadaten zum Bild hinzuzufügen.
格式: LABEL <key>=<value> <key>=<value> <key>=<value> ... 示例: LABEL version="1.0" description="这是一个Web服务器" by="IT笔录" 注: 使用LABEL指定元数据时,一条LABEL指定可以指定一或多条元数据,指定多条元数据时不同元数据之间通过空格分隔。推荐将所有的元数据通过一条LABEL指令指定,以免生成过多的中间镜像。 ENV:设置环境变量 格式: ENV <key> <value> #<key>之后的所有内容均会被视为其<value>的组成部分,因此,一次只能设置一个变量 ENV <key>=<value> ... #可以设置多个变量,每个变量为一个"<key>=<value>"的键值对,如果<key>中包含空格,可以使用\来进行转义,也可以通过""来进行标示;另外,反斜线也可以用于续行 示例: ENV myName John Doe ENV myDog Rex The Dog ENV myCat=fluffy
EXPOSE: Angegebener Port für externe Interaktion
格式: EXPOSE <port> [<port>...] 示例: EXPOSE 80 443 EXPOSE 8080 EXPOSE 11211/tcp 11211/udp 注: EXPOSE并不会让容器的端口访问到主机。要使其可访问,需要在docker run运行容器时通过-p来发布这些端口,或通过-P参数来发布EXPOSE导出的所有端口
USER: Geben Sie beim Ausführen des Containers den Benutzernamen oder die UID an. Beim nachfolgenden Ausführen wird ebenfalls der angegebene Benutzer verwendet. Wenn Sie USER verwenden, um einen Benutzer anzugeben, können Sie den Benutzernamen, die UID oder die GID oder eine Kombination aus beiden verwenden. Wenn der Dienst keine Administratorrechte erfordert, können Sie mit diesem Befehl den aktiven Benutzer angeben. Und Sie können den erforderlichen Benutzer vorher erstellen
格式: VOLUME ["/path/to/dir"] 示例: VOLUME ["/data"] VOLUME ["/var/www", "/var/log/apache2", "/etc/apache2" 注: 一个卷可以存在于一个或多个容器的指定目录,该目录可以绕过联合文件系统,并具有以下功能: 1 卷可以容器间共享和重用 2 容器并不一定要和其它容器共享卷 3 修改卷后会立即生效 4 对卷的修改不会对镜像产生影响 5 卷会一直存在,直到没有任何容器在使用它
ARG: Wird zum Angeben von Variablen verwendet, die an die Build-Laufzeit übergeben werden
格式: WORKDIR /path/to/workdir 示例: WORKDIR /a (这时工作目录为/a) WORKDIR b (这时工作目录为/a/b) WORKDIR c (这时工作目录为/a/b/c) 注: 通过WORKDIR设置工作目录后,Dockerfile中其后的命令RUN、CMD、ENTRYPOINT、ADD、COPY等命令都会在该目录下执行。在使用docker run运行容器时,可以通过-w参数覆盖构建时所设置的工作目录。
Das Folgende ist ein kleines Beispiel:
格式: USER user USER user:group USER uid USER uid:gid USER user:gid USER uid:group 示例: USER www 注: 使用USER指定用户后,Dockerfile中其后的命令RUN、CMD、ENTRYPOINT都将使用该用户。镜像构建完成后,通过docker run运行容器时,可以通过-u参数来覆盖所指定的用户。
Verwandte kostenlose Empfehlungen:
ProgrammiervideokursDas obige ist der detaillierte Inhalt vonWas ist Dockerfile?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!