docker学习(十)Dockerfile指令学习

dockerfile指令

dockerfile指令格式

注释: #Commet(#开头)

指令: INSTRUCTION argument (大写指令开头 参数)

1.FROM

FROM <IMAGE> OR FROM <IMAGE>:<TAG>

必须以存在的镜像
基础镜像
必须是第一条非注释指令

2.MAINTAINER

MAINTAINER <NAME>

制定作者信息,包含作者的所有者和联系信息

3.RUN

指定镜像中运行的命令.每一个RUN指令都会在当前镜像的上层新建一个镜像

RUN <COMMAND>  (shell 模式)

以/bin/sh -c command 的形式执行命令

RUN ["executable","param1","parm2"] (exec 模式)

可以指定其他形式的sh 来运行指令.例:RUN ["/bin/bash","-c","echo hello"]

4.EXPOSE

指定运行该容器所使用的端口

EXPOSE <port>or[port...]

容器运行时还是要去在使用时在run 命令中添加对端口的使用

5.容器运行时运行的命令

CMD

用来提供容器运行的默认命令,与RUN指令类似,都是执行一个命令,但是RUN指令指定的命令实在镜像构建的时候运行的.而cmd指定的命令是在容器运行的时候运行的.并且当我们使用docker run命令启动一个容器的时候,如果制定了容器运行的命令,那么CMD当中的指令会被覆盖,不会执行.也就是说:cmd是用来指定容器的默认行为.

CMD ["executable","param1","parm2"] (exec模式)
CMD command param1 param2 (shell模式)
CMD ["param1","parm2"] (作为ENTRYPOINT指令的默认参数)

例子:

CMD ["/usr/sbin/nginx","-g","deamon off"]

ENTERYPOINT

(不会被docker run 命令中的启动命令所覆盖,如果需要覆盖的话可以使用:docker run --entrypoint 覆盖)

例子:
ENTERYPOINT ["/usr/sbin/nginx","-g","deamon off"]

组合使用的方式
用ENTERYPOINT指定命令,用CMD指定参数
这时候可以在docker run 中指定参数

6.设置镜像的目录和文件

ADD

COPY

都是将文件复制到使用dockerfile构建的镜像中,都支持两种参数,来源地址和目标地址.

ADD <SRC> <DEST>
ADD ["SRC" "SEST"](适用于文件路径中有空格的情况)
COPY <SRC> <DEST>
COPY ["SRC" "SEST"](适用于文件路径中有空格的情况)

来源地址:可以是本地地址,也可以是远程的URL,如果是本地地址,那必须是构建本地的相对地址,
目标地址:镜像中的绝对路径.单纯的复制,推荐使用copy

VOLUME

VOLUME ["/data"]

用来向给予镜像创建的容器添加卷,一个卷是可以存在一个或多个容器的特定目录.这个目录可以绕过联合文件系统.并提供如共享数据,提供数据持久化的功能,

7.设置镜像的目录和文件

WORKDIR

这个指令用来在从镜像创建一个新容器时,在容器内部设置工作目录,ENTERYPOINT或者cmd都会指定在这个目录下执行.我们也可以使用这个指令在构建中为后续的指令指定工作目录.(通常会使用绝对路径,如使用相对路径,呢么工作路径会一直传递下去.)
例子:

WORKDIR /a
WORKDIR b
WORKDIR c
结果:/a/b/c

ENV

用来设置环境变量,环境变量的指令也可以作用于构建过程中以及运行过程中同样有效.
ENV <KEY> <VALUE>
ENV <KEY>=<VALUE>...同时设置多个

USER

用来指定镜像会以什么样的用户取运行.
USER DEAMON

例子:

USER nginx//基于该镜像启动的容器就会以nginx的身份来运行

我们也可以在USER命令中使用 uid ,用户组,gid,这四种的任意组合.如果不使用USER命令,默认会使用root用户.

8.ONBUILD

能够为镜像添加触发器:当一个镜像被其他镜像作为基础镜像时执行.当子镜像构建时会插入触发器当中的指令.

ONBUILD [INSTRUCTION]

例子:

ONBUILD COPY index.html /user/share/nginx/html/

Dockerfilef构建过程

创建的过程

1.从基础镜像运行一个容器。
2.执行一条指令,对容器做出修改。
3.执行类似docker commit的操作,提交一个新的镜像层。
4.根据新的镜像层运行一个新的容器。
5.执行dockerfile的下一条指令,直至所有的指令执行完毕。

创建过程特点

会删除中间层创建的容器,不会删除中间层创建的镜像。
这就使我们可以使用中间层镜像进行调试。(可以使我们逐一排查错误产生的位置)

构建缓存

由于每一步的构建结果都会提交为镜像。所以,docker的构建过程就可以非常的聪明,他会将之前的镜像看做缓存。这就可以使构建的过程非常的高效。

这时,如果吧之前构建镜像的步骤再执行一遍的话,就没有以前那么缓慢。同时,会显示Using cache(使用了缓存)的字样。

不使用缓存

方法一:
--no-cache选项不使用缓存

docker build --no-cache

方法二:
第三个命令处使用环境变量 ENV REFRESH_DATE 2018-01-01,来标识缓存刷新的时间,修改这个命令,就可以保证后面的缓存刷新。

#First Dockerfile
FROM ubuntu:14.04(镜像的基础)
MAINTAINER zhiyuan(镜像的维护人) "zhiyuan@outlook.com" (维护人的联系方式)
ENV REFRESH_DATE 2018-01-01
RUN apt-get update (执行的命令)
RUN apt-get install -y nginx (执行的命令)
EXPOSE 80 (暴露的端口)

查看镜像的构建过程

docker history [image]

例子:

docker history text1
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,063评论 6 510
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,805评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,403评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,110评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,130评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,877评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,533评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,429评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,947评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,078评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,204评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,894评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,546评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,086评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,195评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,519评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,198评论 2 357

推荐阅读更多精彩内容

  • 转载自 http://blog.opskumu.com/docker.html 一、Docker 简介 Docke...
    极客圈阅读 10,503评论 0 120
  • Docker — 云时代的程序分发方式 要说最近一年云计算业界有什么大事件?Google Compute Engi...
    ahohoho阅读 15,539评论 15 147
  • docker基本概念 1. Image Definition 镜像 Image 就是一堆只读层 read-only...
    慢清尘阅读 8,752评论 1 21
  • 星期天又到了,今天沒去榮美。跟著哥哥去了阿常的教會作客,也是很特別的經歷。 喜歡那樣淡淡簡單和真誠的敬拜方式,更享...
    NCNeverland阅读 181评论 0 0
  • 我是日记星球239号星宝宝,来自深圳的叶子。我是日记星球第五期的学员,我相信日积月累的力量,积跬步以致千里!这是我...
    水晶妈咪阅读 176评论 0 1