Dockerfile指令详解

这篇具有很好参考价值的文章主要介绍了Dockerfile指令详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Dockerfile指令详解

ADD 复制文件

ADD指令用于复制文件,格式为:

  • ADD <src>... <dest>
  • ADD ["<src>",... "<dest>"]

从src目录复制文件到容器的dest。其中src可以是Dockerfile所在目录的相对路径,也可以是一个URL,还可以是一个压缩包

注意

① src必须在构建的上下文内,不能使用例如:ADD ../somethine /something 这样的命令,因为docker build 命令首先会将上下文路径和其子目录发送到docker daemon。

② 如果src是一个URL,同时dest不以斜杠结尾,dest将会被视为文件,src对应内容文件将会被下载到dest。

③ 如果src是一个URL,同时dest以斜杠结尾,dest将被视为目录,src对应内容将会被下载到dest目录。

④ 如果src是一个目录,那么整个目录下的内容将会被拷贝,包括文件系统元数据。

⑤ 如果文件是可识别的压缩包格式,则docker会自动解压。

示例:

ADD target/admin.jar app.jar

ARG 设置构建参数

ARG指令用于设置构建参数,类似于ENV。和ARG不同的是,ARG设置的是构建时的环境变量,在容器运行时是不会存在这些变量的。

  • ARG <name>[=<default value>]
ARG user1=someuser

CMD 容器启动命令

CMD指令用于为执行容器提供默认值。每个Dockerfile只有一个CMD命令,如果指定了多个CMD命令,那么只有最后一条会被执行,如果启动容器的时候指定了运行的命令,则会覆盖掉CMD指定的命令。

支持三种格式:

CMD ["executable","param1","param2"] (推荐使用)

CMD ["param1","param2"] (为ENTRYPOINT指令提供预设参数)

CMD command param1 param2 (在shell中执行)

示例:CMD echo "This is a test."

COPY 复制文件

复制文件,格式为:

  • COPY <src>... <dest>
  • COPY ["<src>",... "<dest>"]

复制本地端的src到容器的dest。COPY指令和ADD指令类似,COPY不支持URL和压缩包。

ENTRYPOINT 入口点

格式为:

  • ENTRYPOINT ["executable", "param1", "param2"]
  • ENTRYPOINT command param1 param2

ENTRYPOINT和CMD指令的目的一样,都是指定Docker容器启动时执行的命令,可多次设置,但只有最后一个有效。ENTRYPOINT不可被重写覆盖。

ENTRYPOINT、CMD区别
  1. ENTRYPOINT,表示镜像在初始化时需要执行的命令,不可被重写覆盖,需谨记
  2. CMD,表示镜像运行默认参数,可被重写覆盖
  3. ENTRYPOINT/CMD都只能在文件中存在一次,并且最后一个生效 多个存在,只有最后一个生效,其它无效!
  4. 需要初始化运行多个命令,彼此之间可以使用 && 隔开,但最后一个须要为无限运行的命令,需切记!

ENV 设置环境变量

ENV指令用于设置环境变量,格式为:

  • ENV <key> <value>
  • ENV <key>=<value> ...

示例:ENV JAVA_HOME /path/to/java

EXPOSE 声明暴露的端口

EXPOSE指令用于声明在运行时容器提供服务的端口,格式为:

  • EXPOSE <port> [<port>...]

需要注意的是,这只是一个声明,运行时并不会因为该声明就打开相应端口。该指令的作用主要是帮助镜像使用者理解该镜像服务的守护端口;其次是当运行时使用随机映射时,会自动映射EXPOSE的端口。示例:

# 声明暴露一个端口示例
EXPOSE port1
# 相应的运行容器使用的命令
docker run -p port1 image
# 也可使用-P选项启动
docker run -P image

# 声明暴露多个端口示例
EXPOSE port1 port2 port3
# 相应的运行容器使用的命令
docker run -p port1 -p port2 -p port3 image
# 也可指定需要映射到宿主机器上的端口号  
docker run -p host_port1:port1 -p host_port2:port2 -p host_port3:port3 image

FROM 指定基础镜像

使用FROM指令指定基础镜像,FROM指令有点像Java里面的“extends”关键字。需要注意的是,FROM指令必须指定且需要写在其他指令之前。FROM指令后的所有指令都依赖于该指令所指定的镜像。

支持三种格式:

  • FROM <image>

  • FROM <image>:<tag>

  • FROM <image>@<digest>

LABEL 为镜像添加元数据

LABEL指令用于为镜像添加元数据。

格式为:

  • LABEL <key>=<value> <key>=<value> <key>=<value> ...

使用 ””“和”\“转换命令行,示例:

LABEL "com.example.vendor"="ACME Incorporated"
LABEL com.example.label-with-value="foo"
LABEL version="1.0"
LABEL description="This text illustrates \
that label-values can span multiple lines."

MAINTAINER 指定维护者的信息(已过时)

MAINTAINER指令用于指定维护者的信息,用于为Dockerfile署名。

格式为:

  • MAINTAINER <name>

示例:

MAINTAINER woniu

注:该指令已过时,建议使用如下形式:

LABEL maintainer="woniu@home.org.au"

RUN 执行命令

该指令支持两种格式:

  • RUN <command>
  • RUN ["executable", "param1", "param2"]

RUN <command> 在shell终端中运行,在Linux中默认是/bin/sh -c ,在Windows中是 cmd /s /c ,使用这种格式,就像直接在命令行中输入命令一样。
RUN ["executable", "param1", "param2"] 使用exec执行,这种方式类似于函数调用。指定其他终端可以通过该方式操作,例如:RUN ["/bin/bash", "-c", "echo hello"] ,该方式必须使用双引号[“]而不能使用单引号[‘],因为该方式会被转换成一个JSON 数组。

USER 设置用户

该指令用于设置启动镜像时的用户或者UID,写在该指令后的RUN、CMD以及ENTRYPOINT指令都将使用该用户执行命令。

格式为:

  • USER 用户名

示例:

USER daemon

VOLUME 指定挂载点

该指令使容器中的一个目录具有持久化存储的功能,该目录可被容器本身使用,也可共享给其他容器。当容器中的应用有持久化数据的需求时可以在Dockerfile中使用该指令。格式为:

  • VOLUME ["/data"]

示例:

VOLUME /data

使用示例:

FROM nginx
VOLUME /tmp

当该Dockerfile被构建成镜像后,/tmp目录中的数据即使容器关闭也依然存在。如果另一个容器也有持久化的需求,并且想使用以上容器/tmp目录中的内容,则可使用如下命令启动容器:

docker run -volume-from 容器ID 镜像名称  # 容器ID是di一个容器的ID,镜像是第二个容器所使用的镜像。

WORKDIR 指定工作目录

格式为:

  • WORKDIR /path/to/workdir

切换目录指令,类似于cd命令,写在该指令后的RUNCMD以及ENTRYPOINT指令都将该目录作为当前目录,并执行相应的命令。文章来源地址https://www.toymoban.com/news/detail-806901.html

到了这里,关于Dockerfile指令详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 纯干货!Docker Dockerfile指令大全

    Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。使用 docker build 命令,用户可以创建基于基础镜像的自定义镜像。 FROM-指定基础镜像 指定基础镜像,并且Dockerfile中第一条指令必须是FROM指令,且在同一个Dockerfile中创建多个镜像时

    2024年02月16日
    浏览(34)
  • Dockerfile指令详解

    ADD指令用于复制文件,格式为: ADD src... dest ADD [\\\"src\\\",... \\\"dest\\\"] 从src目录复制文件到容器的dest。其中src可以是Dockerfile所在目录的相对路径,也可以是一个URL,还可以是一个压缩包 注意 : ① src必须在构建的上下文内,不能使用例如: ADD ../somethine /something 这样的命令,因为

    2024年01月20日
    浏览(35)
  • Dockerfile(5) - CMD 指令详解

    指定容器默认执行的命令 重点 一个 Dockerfile 只有一个 CMD 指令,若有多个,只有最后一个 CMD 指令生效 CMD 主要目的:为容器提供默认执行的命令,这个默认值可以包含可执行文件 也可以不包含可执行文件,意味着必须指定 ENTRYPOINT 指令(第二种写法) exec 模式下使用环境变

    2024年03月23日
    浏览(37)
  • Docker的数据管理和Dockerfile的指令

    管理 Docker 容器中数据主要有两种方式: 数据卷(Data Volumes)和数据卷容器(DataVolumes Containers)。 1、数据卷 数据卷是一个供容器使用的特殊目录,位于容器中。可将宿主机的目录挂载到数据卷上,对数据卷的修改操作立刻可见,并且更新数据不会影响镜像,从而实现数据在

    2024年02月15日
    浏览(35)
  • 【docker】dcoker-compose介绍

    我们知道使用一个Dockerfile模板文件可以定义一个单独的应用容器,如果需要定义多个容器就需要服务编排。下面介绍Docker官方产品,Docker Compose。 Dockerfile可以让用户管理一个单独的应用容器,而compose则允许用户在一个模板(yaml格式)中定义一组相关联的应用容器(被称为一

    2023年04月20日
    浏览(35)
  • [Docker]五.Docker中Dockerfile详解

    Dockerfile 就是用来构建 docker 镜像的构建文件 新建一个名为 Dockerfile 文件,并在文件内添加以下内容:         要构建并实现上面的镜像, 以前的办法: 下载一个centos镜像,通过镜像启动容器,进入容器,然后下载net-tools软件,然后cd 到wwwroot目录,执行/bin/bash,然后退出容器,把这个容器

    2024年02月06日
    浏览(39)
  • Docker(五)DockerFile详解

     前言 :         学习之前需要了解docker相关概念,移步 Docker官网          此处不再赘述虚拟化技术和docker VS 虚拟机 的一些内容,有条件的建议直接移步 度娘         笔记全程操作在华为云务器,CentOS7系统。需要自行准备操作环境。 Dockerfile是用来构建Docker镜像的文本

    2024年02月05日
    浏览(40)
  • Docker容器 - DockerFile详解

    目录 DockerFile 一、是什么 二、构建步骤 DockerFile构建过程 一、DockerFile基础 二、Docker执行DockerFile的流程 三、总结 DockerFile常用保留字 零、参考Tomcat的DockerFile 一、FROM 二、MAINTAINER 三、RUN 1.shell 2.exec 四、EXPOSE 五、WORKDIR 六、USER 七、ENV 八、ADD 九、COPY 十、VOLUME 十一、CMD 1.举个

    2024年02月15日
    浏览(51)
  • 【Docker】个人镜像文件Dockerfile制作详解

    前言 洁洁的个人主页 我就问你有没有发挥! 知行合一,志存高远。 Docker 是一个 开源的应用容器引擎 ,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux或Windows 操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之

    2024年02月13日
    浏览(49)
  • 【Docker】企业中 Docker 的 Dockerfile 用法及作用详解

    本文将详细介绍企业中 Docker 的 Dockerfile 用法及其在企业中的作用。通过使用 Java 代码示例,我们将阐述 Dockerfile 的基本语法、常用指令以及构建和部署容器镜像的流程。Docker 的 Dockerfile 功能可帮助企业实现可重复和可自动化的容器环境构建,提高开发团队的效率和应用的可

    2024年02月06日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包