2019-01-05 Dockerfile 详解

Dockerfile 样本

FROM nginx:v1
MAINTAINER east_qiu@outlook.com
WORKDIR /usr/share/nginx/html
RUN echo '<h1>Hello, Docker!</h1>' > index.html
EXPOSE ['80', '443']
...

dockerfile官方文档

  1. 构建镜像
docker build nginx .

-f 指定具体的dockerfile
-t 指定镜像的tag,指定存储库和标记保存新映像,可以一次指定多个tag,生成多个镜像

docker build -t shykes/myapp:1.0.2 -t shykes/myapp:latest .

构建时docker会初步验证dockerfile,如果有语法错误,会提示
dockerfile每条指令都是独立运行的,并会创建一个新映像
Docker将重用中间映像(缓存),显著加快Docker构建过程。
dockerfile 必须从FROM开始

FROM

FROM 基础镜像

escape

escape指令用于指定dockerfile里面的转义字符, 默认是 \ , windows里面 `
escape定义在文件的最上方

# escape=`

FROM microsoft/nanoserver
COPY testfile.txt c:\
RUN dir c:\

ENV

ENV定义的环境变量在后续层次中才能够被应用

ENV abc=hello
ENV abc=bye def=$abc # def=hello
ENV ghi=$abc # ghi=bye

.dockerignore

COPY和ADD指令中用于忽略指定文件,加快构建速度

RUN

RUN <command>
RUN ["executable", "param1", "param2"]

linux 上默认上/bin/sh -c
windows上默认cmd /S /C
RUN命令在当前镜像上执行指令,构建出一个新的镜像,便于dockerfile下面的语句继续执行
RUN可以有多个

CMD

CMD一个dockerfile里只能有一个

CMD ["executable","param1","param2"] (exec form, this is the preferred form)
CMD ["param1","param2"] (as default parameters to ENTRYPOINT)
CMD command param1 param2 (shell form)

如果指定ENTERPOINT, 用 CMD 指定具体的参数。
这里边包括参数的一定要用双引号,就是",不能是单引号。千万不能写成单引号。

RUN & CMD

RUN是构件容器时就运行的命令以及提交运行结果
CMD是容器启动时执行的命令,在构件时并不运行,构件时紧紧指定了这个命令到底是个什么样子

LABEL

label为镜像指定信息,用于docker inspect 查看相关信息

MAINTAINER

指定维护者,已经废弃

EXPOSE

EXPOSE用于指定容器运行时指定对外暴露的端口
但是EXPOSE并不会使容器访问主机的端口
如果想使得容器与主机的端口有映射关系,必须在容器启动的时候加上 -P参数

ADD

ADD把文件复制到镜像中
ADD --chown=<user>:<group> src dist
chown 只有linux文件系统才有
src可以是文件,也可以是链接,也可以是目录(不建议,会复制目录和目录下的所有文件)
如果文件系统里/etc/passwd or /etc/group 里面没有chown指定的用户,构建会出错

  • 增加的文件必须在镜像上下文相对的目录下,也就是镜像构建上下文的相对目录
  • 如果是一个URL,并且没有结尾斜杠,那么从这个URL下载一个文件并复制到dist

COPY

单纯的复制文件,也是相对构建的镜像上下文

ENTRYPOINT

ENTRYPOINT 的格式和 RUN 指令格式一样,分为 exec 格式和 shell 格式
exec 形式
ENTRYPOINT [“executable”,”param1”,”param2"]
任何docker run设置的命令参数或者CMD指令的命令,都将作为ENTRYPOINT 指令的命令参数,追加到ENTRYPOINT指令之后。
ENTRYPOINT command param1 param2
这种格式禁止追加任何参数,即CMD指令或docker run后面的参数都将被忽略。采用shell格式,在容器中执行时,自动调用shell。

CMD&&ENTRYPOINT

  • CMD可以为ENTRYPOINT提供参数,
    ENTRYPOINT本身也可以包含参数,但是可以把需要变动的参数写到CMD里面,而不需要变动的参数写到ENTRYPOINT里面;
  • ENTRYPOINT使用第二种shell方式会屏蔽掉CMD里面的命令参数和docker run后面加的命令。
  • 在Dockerfile中,ENTRYPOINT指定的参数比运行docker run时指定的参数更靠前。
  • ENTRYPOINT/CMD中不能把一个有限执行的命令加到一个无限执行的命令后面。这会导致后面的有限执行的命令无法执行。因为无限命令一直在执行,永远都无法执行结束,所以会导致后面的有限执行命令阻塞。
  • ENTRYPOINT/CMD中最后的一个命令必须要是无限执行的命令。

Dockerfile 中的每一行都产生一个新层;
下列代码每一行都又一个独立的id,而且下面产生的三层是只读的,一旦Image被运行时,会产生一个新层 container 层,这一层是可读可写的;
分层的优势在于,两个image可以共享一些层,降低了存储的压力

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

推荐阅读更多精彩内容

  • 一、Docker创建镜像的方式有两种: 一种通过commit的方式:把做了一系列操作的容器关闭,然后利用docke...
    jie0112阅读 3,819评论 0 3
  • docker基本概念 1. Image Definition 镜像 Image 就是一堆只读层 read-only...
    慢清尘阅读 8,720评论 1 21
  • 转载自 http://blog.opskumu.com/docker.html 一、Docker 简介 Docke...
    极客圈阅读 10,468评论 0 120
  • 一个人坐在飞机的一个角落,看着外面的天空,由蓝天白云阳光灿烂变成了漆黑一片,仅有点点的繁星闪烁。。。 ...
    鸵鸟_阅读 174评论 0 0
  • 这个活动给它起个名字,就叫镜子手吧。A的手随意舞动,B的手要紧跟A的手舞动,通过A的手,要看不到B的手。当扮演A时...
    七姑娘_7阅读 133评论 0 0