Dockerfile编写

Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像。它们简化了从头到尾的流程并极大的简化了部署工 作。Dockerfile从FROM命令开始,紧接着跟随者各种方法,命令和参数。其产出为一个新的可以用于创建容器的镜像。

Dockerfile一般由一条条语句组成,并支持以 # 开头的注释行

一般来说Dockerfile分为四部分

部分 命令
基础镜像信息 FROM
维护者信息 MAINTAINER
镜像操作指令 RUN、COPY、ADD、EXPOSE、WORKDIR、ONBUILD、USER、VOLUME等
容器启动时执行指令 CMD、ENTRYPOINT

 Dockerfile的基本指令及其用法:

FROM 指定哪种镜像作为新镜像的基础镜像 FROM <image>

MAINTAINER

指明该镜像的作者和其电子邮件 MAINTAINER <name> <email>

RUN

在新镜像内部执行的命令,比如安装一些软件、配置

一些基础环境,可使用\来换行

RUN "command" "param1" "param2"

CMD

容器启动时需要执行的命令 CMD command param1 param2

EXPOSE

暴露镜像的端口供主机做映射,启动镜像时,使用

-P参数来讲镜像端口与宿主机的随机端口做映射。

EXPOSE <port> [<port>...]
ENV 设置容器的环境变量 EVN <key> <value>
ADD 将主机的文件复制到镜像中 ADD <src>   <dest>
COPY

将主机的文件复制到镜像内,如果目的位置不存在,

Docker会自动创建所有需要的目录结构,但是它只是单纯的复制,

并不会去做文件提取和解压工作。

COPY <src> <dest>
ENTRYPOINT 用法和CMD命令一样 ENTRYPOINT "command" "param1" "param2"
VOLUME 用来向基于镜像创建的容器添加卷。 VOLUME ["path"]
USER 指定该镜像以什么样的用户去执行 USER daemon
WORKDIR 在构建镜像时,指定镜像的工作目录 WORKDIR path
ONBUILD 当一个包含ONBUILD命令的镜像被用作其他镜像的基础镜像时(比如用户的镜像需要从某为准备好的位置添加源代码,或者用户需要执行特定于构建镜像的环境的构建脚本),该命令就会执行。 ONBUILD [INSTRUCTION]

FROM

  用法:FROM <image>

  说明:第一个指令必须是FROM了,其指定一个构建镜像的基础源镜像,如果本地没有就会从公共库中拉取,没有指定镜像的标签会使用默认的latest标签,可以出现多次,如果需要在一个Dockerfile中构建多个镜像。

MAINTAINER

  用法:MAINTAINER <name> <email>

  说明:描述镜像的创建者,名称和邮箱

RUN

  用法:RUN "command" "param1" "param2"

  说明:RUN命令是一个常用的命令,执行完成之后会成为一个新的镜像,这里也是指镜像的分层构建。一句RUN就是一层,也相当于一个版本。这就 是之前说的缓存的原理。我们知道docker是镜像层是只读的,所以你如果第一句安装了软件,用完在后面一句删除是不可能的。所以这种情况要在一句RUN 命令中完成,可以通过&符号连接多个RUN语句。RUN后面的必须是双引号不能是单引号(没引号貌似也不要紧),command是不会调用 shell的,所以也不会继承相应变量,要查看输入RUN "sh" "-c" "echo" "$HOME",而不是RUN "echo" "$HOME"。

CMD

  用法:CMD command param1 param2

  说明:CMD在Dockerfile中只能出现一次,有多个,只有最后一个会有效。其作用是在启动容器的时候提供一个默认的命令项。如果用户执行docker run的时候提供了命令项,就会覆盖掉这个命令。没提供就会使用构建时的命令。

 EXPOSE

  用法:EXPOSE <port> [<port>...]

  说明:告诉Docker服务器容器对外映射的容器端口号,在docker run -p的时候生效。

ENV

  用法:EVN <key> <value> 只能设置一个

       EVN <key>=<value>允许一次设置多个

  说明:设置容器的环境变量,可以让其后面的RUN命令使用,容器运行的时候这个变量也会保留。

ADD

  用法:ADD <src>   <dest>

  说明:复制本机文件或目录或远程文件,添加到指定的容器目录,支持GO的正则模糊匹配。路径是绝对路径,不存在会自动创建。如果源是一个目录,只会复制目录下的内容,目录本身不会复制。ADD命令会将复制的压缩文件夹自动解压,这也是与COPY命令最大的不同。

COPY

  用法:COPY <src> <dest>

  说明:COPY除了不能自动解压,也不能复制网络文件。其它功能和ADD相同。

ENTRYPOINT

  用法:ENTRYPOINT "command" "param1" "param2"

  说明:这个命令和CMD

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值