Dockerfile语法说明

Dockerfile语法说明

在这里插入图片描述
Docker中有个非常重要的概念叫做——镜像(Image)。Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。

镜像的定制实际上就是定制每一层所添加的配置、文件。如果我们可以把每一层修改、安装、构建、操作的命令都写入一个脚本,用这个脚本来构建、定制镜像,那么之前提及的无法重复的问题、镜像构建透明性的问题、体积的问题就都会解决。这个脚本就是 Dockerfile。

Dockerfile 是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。

1、FROM: 指定基础镜像。
定制镜像的时候都是以一个镜像为基础,在这个基础上面进行定制。 FROM 在 Dockerfile 中是必须的指令,而且必须是第一条指令。

  • 在Docker Hub上有非常多的官方镜像,比如服务类(nginx/redis)、语言类(node/openjdk/python)、操作系统类(ubuntu/debian/centos)等,我们可以直接拿来使用。
  • 除了选择现有的镜像作为基础镜像外,Docker还存在一个特殊的镜像,名为 scratch 。这个镜像是虚拟的概念,并不实际存在,它表示一个空白的镜像。

2.MAINTAINER: 维护者信息

格式:
MAINTAINER
示例:
MAINTAINER JIANPING

3、RUN: 执行命令
run指令是用来执行命令行命令的,由于命令行的强大能力,run指令在定制镜像时是最常用的指令之一。其格式有两种:

- shell格式: RUN 命令 ,就像直接在命令行中输入的命令一样,如 RUN echo 'hello, world!' > hello.txt
- exec格式: RUN ['可执行文件', '参数1', '参数2'] ,类似于函数调用,将可执行文件和参数分开,如 RUN [ "sh", "-c", "echo $HOME" ]

Dockerfile 中每一个指令都会建立一层, RUN 也不例外。每一个RUN的行为,就和刚才我们手工建立镜像的过程一样:新建立一层,在其上执行这些命令,执行结束后,commit这一层的修改,构成新的镜像。所以我们在使用的时候尽可能将指令进行整合(可以使用&&将各个所需命令串联起来)。

4、CMD:容器启动命令
CMD 指令的格式和 RUN 相似,也是两种格式:

  • shell 格式: CMD <命令>
  • exec 格式: CMD [“可执行文件”, “参数1”, “参数2”…]
    在指定了 ENTRYPOINT 指令后,用 CMD 指定具体的参数。参数列表格式: CMD [“参数1”, “参数2”…]

5、COPY:复制文件
和 RUN 指令一样,也有两种格式,一种类似于命令行,一种类似于函数调用:

  • COPY <源路径>… <目标路径>
  • COPY ["<源路径1>",… “<目标路径>”]
    COPY 指令将从构建上下文目录中 <源路径> 的文件复制到新的一层的镜像内的 <目标路径> 位置。

6、ENV: 设置环境变量
格式有两种:

  • ENV
  • ENV < key1 > = < value1> < key2>=< value2>…
    这个指令很简单,就是设置环境变量而已,无论是后面的其它指令,如 RUN ,还是运行时的应用,都可以直接使用这里定义的环境变量。

ENV VERSION=1.0 DEBUG=on
NAME=“Happy Feet”
这个例子中演示了如何换行,以及对含有空格的值用双引号括起来的办法,这和 Shell 下的行为是一致的。

7、EXPOSE: 声明端口
格式为 EXPOSE <端口1> [<端口2>…] 。

EXPOSE 指令是声明运行时容器提供服务端口,这只是一个声明,在运行时并不会因为这个声明应用就会开启这个端口的服务。在 Dockerfile 中写入这样的声明有两个好处,一个是帮助镜像使用者理解这个镜像服务的守护端口,以方便配置映射;另一个用处则是在运行时使用随机端口映射时,也就是 docker run -P 时,会自动随机映射 EXPOSE 的端口。

要将 EXPOSE 和在运行时使用 -p <宿主端口>:<容器端口> 区分开来。 -p ,是映射宿主端口和容器端口,换句话说,就是将容器的对应端口服务公开给外界访问,而 EXPOSE 仅仅是声明容器打算使用什么端口而已,并不会自动在宿主进行端口映射。

8、WORKDIR: 指定工作目录
格式为 WORKDIR <工作目录路径> 。

使用 WORKDIR 指令可以来指定工作目录(或者称为当前目录),以后各层的当前目录就被改为指定的目录,如该目录不存在, WORKDIR 会帮你建立目录。

最后用一张图解释常用指令的意义:
在这里插入图片描述
9、执行Dockerfile生成镜像文件:
Docker build命令:

docker build -t scpy3:v1.0 --name scpy3-version . (注意,在Dockerfile所在的文件夹下后面为" . ", 其他位置,后面为Dockerfile所在的位置路径)

10、官方参考例子及帮助文档:

关于Dockerfile的官方镜像例子请移步: 镜像例子

关于Dockerfile的帮助文档,请移步: Dockerfile的帮助文档

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值