Dockerfile基本用法

30 篇文章 0 订阅
27 篇文章 0 订阅

Dockerfile

Docker 并不建议用户通过commit方式构建镜像。原因如下:

  • :这是一种手工创建镜像的方式,容易出错,效率低且重复性弱。
  • :使用者并不知道镜像是如何创建出来的,里面是否有恶意程序,存在安全隐患。

用Dockerfile构建镜像,底层也docker commit 一层一层构建新镜像的。

1.运行docker build命令,-t将新镜像命名,末尾的.指名build context为当前目录,从当前目录下寻找Dockerfile,也可以用-f指定Dockerfile的位置。

2.首先Docker将build context中的所有文件发送给Docker daemon。build context为镜像构建提供所需要的文件或目录。Dockerfile中的ADD,COPY等命令可以将build context中的文件添加到镜像。、

查看镜像分层结构

docker history会显示镜像的构建历史。

docker history  centos-yum:latest

镜像的缓存特性

Docker会缓存已有镜像的镜像层,构建新镜像时,如果某镜像层已经存在,就直接使用,无需重新创建。

如果我们希望在构建镜像时不使用缓存,可以在docker build命令中加上–no-cache参数。Dockerfile中每一个指令都会创建一个镜像层,上层依赖于下层,只要某一层发生变化,其上面的缓存都会失效。

FROM

功能为指定基础镜像,并且必须是第一条指令,如果不以任何为镜像,那么写法为:FROM scratch。

FROM <image>
FROM <image>:<tag>
FROM <image>:<digset>

FROM centos7

RUN
为运行指定的命令,有两种格式:(构建是就执行的命令)
1:RUN 后面直接跟shell命令,linux中默认 /bin/sh -c
2:RUN[“executable”,“param1”,“param2”] executable为可执行文件,后面是参数

RUN yum -y install httpd
RUN ["/bin/bash","-c","echo hello"]

注意:多行命令不要写多个run,建议使用换行符

CMD

容器启动时要运行的命令

1.CMD [“executable”,“param1”,“param2”]
2.CMD [“param1”,“param2”]
3.CMD command param1 param2

CMD ["ls,"/tmp"]

注意:必须要用双引号

LABEL

为镜像指定标签

LABEL <key>=<value>…
如果有很多建议写到一行,用换行符 \

LABEL com.example.vendor="huhuhuhuhu" \
	  com.example.vendor2="huhuhuhuhuhuhuhuhuhuh"

LABEL会继承基础镜像的LABEL,若key相同,则覆盖

MAINTAINER

指定作者

MAINTAINER  huge

EXPOSE

开放端口,必须在容器启动的时候加上-P参数

EXPOSE  80

ENV

设置环境变量

ENV 变量=参数 (可以一次设置多个)

ENV   ip=www.ip.com

ADD

复制命令,将文件复制到镜像中。
并且如果复制的是一个包文件,会将其自动解包

ADD   text.txt    /tmp
ADD   http://www.test.com/text.txt  /tmp
		源地址	                   目标地址

COPY

COPY   text.txt   /tmp

不支持url,

ENTRYPOINT

启动时的默认命令

ENTRYPOINT [“executable”,“param1”,“param2”]
ENTRYPOINT command param1 param2

ENTRYPOINT  ["ls","/tmp"]

也可以不加文件或目录

ENTRYPOINT  ["ls"]

在容器启动时后面加上可执行文件

docker run -it centos-yum:latest  /tmp

与CMD一起使用时:可以查看CMD指定的文件或目录

CMD ["/etc","/"]
ENTRYPOINT  ["ls"]

如果我们同时写了CMD与ENTRYPOINT,并且都是完整指令,那么会覆盖,谁在后面谁生效

USER

设置启动容器的用户

USER daemo
USER UID

USER  www

注意:如果设置了容器以daemon用户去运行,那么RUN,CMD,和ENTRYPOINT都会以这个用户去运行

WORKDIR

设置工作目录

WORKDIR   /www

对RUN,ENTRYPOINT,COPY,ADD生效。
如果不存在则会创建,也可以设置多次

WORKDIR /A
WORKDIR /B
WORKDIR /C
RUN pwd

执行结果是 /A/B/C

WORKDIR也可以解析环境变量

ENV DIR  /path
WORKDIR  $DIR

ARG

ARG 设置变量命令,ARG定义了一个变量,在docker build创建的时候,使用 --build-arg =来指定参数
也可以给一个默认值

ARG  user1="www"

ONBUILD

ONBUILD [INSTRUCTION]

只对当前的子镜像生效

ONBUILD  RUN  touch 1.txt

STOPSIGNAL

当容器退出时发送一个什么样的指定给系统

HEALTHCHECk

容器健康状况检查:

  1. HEALTHCHECK [OPTIONS] CMD command 是在容器内部运行一个命令来检查容器的健康状况

  2. HEALTHCHECK NONE第二个的功能是在基础镜像中取消健康检查命令
    [OPTIONS]的选项支持以下三中选项:

     --interval=DURATION 	 两次检查默认的时间间隔为30秒
     --timeout=DURATION		 康检查命令运行超时时长,默认30秒
     --retries=N			 连续失败指定次数后,则容器被认为是不健康的,状态为unhealthy, 默认次数是3
    
注意: HEALTHCHECK命令只能出现次,如果出现了多次,只有最后一个生效。CMD后边的命令的返回值决定了本次健康检查是否成功,具体的返回值如下:

0: success -表示容器是健康的
1: unhealthy-表示容器已经不能工作了
2: reserved -保留值

HEALTHCHECK - - interval=5m --timeout=3s \
CMD curl -f http://localhost/  ||  exit  1

健康检查命令是: curl -f http://localhost/ || exit 1 两次检查的间隔时间是5秒 命令超时时间为3秒

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值