dockerfile

1、dockerfile是什么?

dockerfile是用来构建docker镜像的文本文件,记录了镜像构建的所有步骤

2、构建的的三个步骤

1、编写dockerfile文件

2、docker build 命令构建镜像

3、docker run 以镜像运行容器

4、dockerfile特性

镜像缓存特性:如果某镜像层已经存在,就直接使用,无需重新构建。

dockerfil中的每个指令都会创建一个镜像层,上层是依赖下层的。无论什么时候,只要某一层发生变化,其上面所有层的缓存都会失效。

5、dockerfile常用指令

dockerfile由一行行命令语句组成,并且支持以#开头的注释行

dockerfile的指令是忽略大小写的,建议使用大写,每行只支持一条指令,每条指令可以携带多个参数

dickerfile的指令根据作用可以分为两种:

1、构建指令:用于构建image,其指定的操作不会在运行image的容器上执行

2、设置指令:用于image,其指定的操作将运行image的容器中执行

一般的dockerfile分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动该时执行指令。

1、FROM(构建指令)

指定base镜像,必须只当在dockerfile其他指令的前面,后续的指令都是依赖于该指令的指定镜像

该指令由有令两种格式;

1、FROM <image>

2、FROM <image>:<tag>

2、MAINTAINER(构建指定)

设置镜像作者,可以时任意字符串,用于将image的制作这信息写入到image中当我们对image执行

格式:MAINTAINER <name>

现在已经被“LABEL maintainer=”取代“

3、COPY(构建指令)

将文件从build context 复制到镜像

COPY支持两种形式

COPY src ... dest

COPY [ "SRC",....."dest"]

4、ADD(构建指令)

于COPY类似,从build context 复制文件到镜像。不同的是他会在粗制的过程中将归档文件释放

格式分为两种;

1、ADD <src>... <dest>
2、ADD ["<src>",... "<dest>"]

5、ENV(构建指令)

设置环境变量,环境变量可被后面的指令使用,并在容器运行时保持

格式:ENV <key> <value>

6、EXPOSE(设置指令)

格式:EXPOSE <port> [<port>/<protocol>...]

可以指定TCP或UDP,默认是TCP 
告诉Docker服务器暴露的端口号,供互联系统使用。
在启动容器的时候如果使用-P,Docker主机自动分配一个端口和容器端口映射。
在启动容器的时候如果使用-p,则可以具体指定哪个宿主机端口和容器端口映射。
当你需要访问容器的时候,可以不是用容器的IP地址而是使用宿主机器的IP地址和映射后的端口。

7、VOLUME(设置指令)

格式:VOLUME ["<mountpoint>"]

将文件或目录声明为volume。使用容器种的一个目录具有持久化存储数据的功能,该目录可以被容器本身使用也可以共享给其他的容器使用。

8、WORKDIR(设置指令)

格式:WORKDIR /path/to/workdir
示例:
    WORKDIR /a  (这时工作目录为/a)
    WORKDIR b  (这时工作目录为/a/b)
    WORKDIR c  (这时工作目录为/a/b/c)
为后面的 RUN, CMD, ENTRYPOINT, ADD 或 COPY 指令设置镜像中的当前工作目录。

9、RUN(构建指令)

在构建镜像过程中要指定的命令

10、CMD(设置指令)

容器启动时运行指定的命令

dockerfile 中可以有多个CMD命令,但只有最后一个生效

11、ENTRYPOINT(设置指令)

设置容器启动时运行的命令。
Dockerfile 中可以有多个 ENTRYPOINT 指令,但只有最后一个生效。

12、USER

当服务不需要管理员权限时,可以通过该命令指定运行用户。

格式:
  USER user
  USER user:group
  USER uid
  USER uid:gid
  USER user:gid
  USER uid:group
 示例:
  USER www

13、 HEALTHCHECK

容器健康状况检查命令
语法有两种:
1. HEALTHCHECK [OPTIONS] CMD command
2. HEALTHCHECK NONE
第一个的功能是在容器内部运行一个命令来检查容器的健康状况
第二个的功能是在基础镜像中取消健康检查命令

[OPTIONS]的选项支持以下三种选项:
--interval=DURATION 两次检查默认的时间间隔为30秒,间隔(s秒、m分钟、h小时),从容器运行起来开始计时interval秒(或者分钟小时)进行第一次健康检查,随后每间隔interval秒进行一次健康检查;还有一种特例请看timeout解析。
--timeout=DURATION 健康检查命令运行超时时长,默认30秒,执行command需要时间,比如curl 一个地址,如果超过timeout秒则认为超时是错误的状态,此时每次健康检查的时间是timeout+interval秒。
--retries=N 当连续失败指定次数后,则容器被认为是不健康的,状态为unhealthy,默认次数是3
注意:
HEALTHCHECK命令只能出现一次,如果出现了多次,只有最后一个生效。
CMD关键字后面可以跟执行shell脚本的命令或者exec。CMD后面的命令执行完的返回值代表容器的运行状况,具体的返回值如下:
0: success - 表示容器是健康的
1: unhealthy - 表示容器已经不能工作了
2: reserved - 保留值
HEALTHCHECK --interval=5s --timeout=3s CMD curl -f http://localhost/ || exit 1
健康检查命令是:curl -f http://localhost/ || exit 1
两次检查的间隔时间是5秒
命令超时时间为3秒

14、ARG(构建参数)

格式: ARG <参数名>[=<默认值>]

格式: ARG <参数名>[=<默认值>]
ARG构建参数和 ENV 的效果一样,都是设置变量。所不同的是, ARG 所设置的构建环境的变量,在将来容器运行时是不会存在这些变量的。但是不要因此就使用 ARG 保存密码之类的信息,因为 docker history 还是可以看到所有值的。
ARG是唯一一个可用于FROM前的指令
ARG  CODE_VERSION=latest
FROM busybox:${CODE_VERSION}


15、LABEL

给镜像增添加信息。使用docker inspect 可查看镜像的相关信息

语法:
LABEL <key>=<value> <key>=<value> <key>=<value> ...
一个Dockerfile种可以有多个LABEL,如下:
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."
但是并不建议这样写,最好就写成一行,如太长需要换行的话则使用\符号
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值