Dockerfile文件详解

浪子不回头ぞ 提交于 2020-02-27 17:05:08

 

Dockerfile是一个包含用于组合映像的命令的文本文档。可以使用在命令行中调用任何命令。 Docker通过读取Dockerfile中的指令自动生成映像。docker build命令用于从Dockerfile构建映像。

下面命令的 . 表示当前目录,这实际上是在指定上下文的目录是当前目录,docker build 命令会将该目录下的内容打包交给 Docker 引擎以帮助构建镜像。

命令语法格式:

docker bulid -t 仓库名/镜像名:tag .

Dockerfile的基本结构

Dockerfile 一般分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令。Docker以从上到下的顺序运行Dockerfile的指令。为了指定基本映像,第一条指令必须是FROM。一个声明以字符开头则被视为注释。

常用的指令

  • FROM

指定基础镜像,必须为第一个命令;

FROM <image>
FROM <image>:<tag>
FROM <image>@<digest> #tag或digest是可选的,如果不使用这两个值时,会使用latest版本的基础镜像
  • RUN

建立新的镜像时,可以执行在系统里的命令,如安装特定的软件以及设置环境变量。

RUN mkdir /codr
  • CMD

不同于RUN,CMD用于指定在容器启动时所要执行的命令,而RUN用于指定镜像构建时所要执行的命令。

格式:
    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"]
  • ADD

将本地文件添加到容器中,tar类型文件会自动解压(网络压缩资源不会被解压)。

ADD hom* /mydir/          # 添加所有以"hom"开头的文件
  • COPY

功能类似ADD,但是是不会自动解压文件,也不能访问网络资源。

  • WORKDIR

指定工作目录,类似于cd命令。通过WORKDIR设置工作目录后,Dockerfile中其后的命令RUN、CMD等命令都会在该目录下执行。在使用docker run运行容器时,可以通过-w参数覆盖构建时所设置的工作目录。

WORKDIR /a   #这时工作目录为/a
  • ENTRYPOINT

配置容器,使其可执行化。Dockerfile中只允许有一个ENTRYPOINT命令,多指定时会覆盖前面的设置,而只执行最后的ENTRYPOINT指令。

格式:
    ENTRYPOINT ["executable", "param1", "param2"] (可执行文件, 优先)
    ENTRYPOINT command param1 param2 (shell内部命令)
示例:
    FROM ubuntu
    ENTRYPOINT ["top", "-b"]
    CMD ["-c"]
  • MAINTAINER

标明该Dockerfile作者及联系方式,可忽略不写。

格式:
    MAINTAINER <name>
示例:
    MAINTAINER XXX XX
  • ENV

设置系统环境变量。

格式:
    ENV <key> <value>  #<key>之后的所有内容均会被视为其<value>的组成部分,因此,一次只能设置一个变量
    ENV <key>=<value> ...  #可以设置多个变量,每个变量为一个"<key>=<value>"的键值对,如果<key>中包含空格,可以使用\来进行转义,也可以通过""来进行标示;另外,反斜线也可以用于续行
示例:
    ENV myName John Doe
    ENV myDog Rex The Dog
    ENV myCat=fluffy

​​​​​​​

 

 

 

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!