Heim > Betrieb und Instandhaltung > Docker > Was ist Dockerfile?

Was ist Dockerfile?

coldplay.xixi
Freigeben: 2020-10-29 16:17:24
Original
4132 Leute haben es durchsucht

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 Dockerfile?

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
Nach dem Login kopieren

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版本的基础镜像
Nach dem Login kopieren

MAINTAINER: Betreuerinformationen

格式:
    MAINTAINER <name>
示例:
    MAINTAINER Jasper Xu
    MAINTAINER sorex@163.com
    MAINTAINER Jasper Xu <sorex@163.com>
Nach dem Login kopieren

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
Nach dem Login kopieren

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/
Nach dem Login kopieren

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用于指定镜像构建时所要执行的命令。
Nach dem Login kopieren

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指令。
Nach dem Login kopieren

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
Nach dem Login kopieren

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导出的所有端口
Nach dem Login kopieren

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 卷会一直存在,直到没有任何容器在使用它
Nach dem Login kopieren

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参数覆盖构建时所设置的工作目录。
Nach dem Login kopieren

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参数来覆盖所指定的用户。
Nach dem Login kopieren

Verwandte kostenlose Empfehlungen:

Programmiervideokurs

Das obige ist der detaillierte Inhalt vonWas ist Dockerfile?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage