docker Dockerfile

Dockerfile 介绍

它是一个文本文件,镜像文件构建脚本
由一些列用于根据基础镜像构建新的镜像文件的专用指令序列组成

Dockerfile command

  • ADD
  • COPY
  • ENV
  • EXPOSE
  • FROM
  • MAINTANIER
  • LABEL
  • STOPSIGNAL
  • USER
  • VOLUME
  • WORKDIR

FROM

必须是第一个非注释行,用于指定所用到的基础镜像

语法格式
  • FROM <image>[:<tag>]
  • FROM <image>@<digest>

注意: 尽量不要在一个dockerfile中使用多个FROM指令

MAINTANIER

用于提供信息的指令,用于让作者提供本人的信息
建议紧跟在FROM以后,不限制出现的位置

语法格式

MAINTANIER <authors detail>

COPY

用于docker主机复制文件指向正在创建的映像文件中

语法格式
  • COPY SRC DEST
  • COPY "SRC"... "DEST"
解释
  • src: 要复制的源文件或目录,支持使用通配符
  • dest: 目录路径,正在创建的镜像文件的文件系统路径,建议使用绝对路径,否则,则相对于WORKDIR而言,所有复制生成的目录文件的uid和gid均为0
注意
  • src 必须是build上下文中的路径,因此不能使用类似"../some"的路径
  • src 如果是目录,递归复制会自动行,如果有多个src ,包括src上使用了通配符这种情况,此时,dest必须是目录,而且必须以/结尾
  • dest 如果事先不存在,它将被自动创建,包括其父目录

ADD

类似于COPY指令,额外还支持复制tar文件,以及URL语法

语法格式
  • ADD SRC DEST
  • ADD "SRC" ... "DEST"
注意
  • 以url格式指定的源文件,下载完成后其目标文件的权限为600
  • 如果src是url,且dest不以/结尾,则src指定的文件将被下载并直接被创建为dest, 如果dest以/结尾,则url指定的文件被下载至dest中,并保留原名
  • 如果src是一个tar文件,它将被展开为一个目录,其行为类似于tar -x 命令,但是如果通过url下载到的文件是tag格式的,是不会自动被展开的

ENV

定义环境变量,此变量可被当前dockerfile文件中的其它指令调用
调用格式为$varaible_name或者${variable_name}

语法格式
  • ENV <key> <value> 一次定义一个变量
  • ENV <key>=<value> ... 一次定义多个变量 如果value中有空白字符,如要用\字符进行转义
注意
  • ENV 定义的环境变量在镜像运行的整个过程中一直存在
  • 因此可以使用inspect命令查看,甚至可以再docker run启动此镜像时候,使用--env选项来修改制定的环境值

USER

指定运行镜像时候, 或运行Dockerfile文件中的任何RUN,CMD,/ENTRYPORINT指定的程序时的用户名或者UID

语法格式
  • USER <uid>|<USERNAME>
注意
  • UID 应该使用/etc/passwd 文件存在的用户的UID,否则,docker run可能会出现错误

WORKDIR

用于为Dockerfile中所有的指令指定工作目录

语法格式
  • WORKDIR <dirpath>
注意
  • WORKDIR 可出现多次,也可使用相对路径,此时表示相对于前一个WORKDIR指令指定的路径
  • WORKDIR 还可以调用ENV定义的环境变量的值

VOLUME

用于目标镜像文件中创建一个挂载点的目录,用于挂载主机上的卷或者其它容器的卷

语法格式
  • VOLUME <mountpoint>
  • VOLUME ["<mountpoint>" .... ]

RUN

于指定docker build命令过程中运行的命令

语法格式
  • RUN <COMMAND>
  • RUN ["executeable" ,"<param1>" ,"<param2>" ]
注意
  • 每个run命令就额外加一层,所以建议一个RUN指令执行多个命令

CMD

类似于RUN指令,用于运行程序,但二者运行的是场景不同
CMD在docker run时运行而非docker build,CMD指令的首
要目的为了在于为启动的容器指定默认要运行的程序程序
运行结束, 容器也就结束,不过,CMD指令指定的程序可被
docker run命令行参数中执行的要运行的程序所覆盖

语法格式
  • CMD <COMMAND>
  • CMD ["executeable" ,"<param1>" ,"<param2>" ]
  • CMD ["<para1>","<param2>"]
注意
  • 第三种为ENTRYPOINT指令指定的程序的默认参数
  • 如果dockefile中存在多个CMD指令,只会最后一个生效

ENTRYPOINT

类似于CMD,为容器指定默认的启动程序,不会被docker run
所运行的程序所覆盖.而且这些命令行参数,会被当作参数送
给ENTRYPOINT指令指定的程序但是如果运行docker run时,
使用了 --entrypoint选项,此选项的参数可当作要运行的程序覆盖
ENTRYPOINT指令指定的程序

语法格式
  • ENTRYPOINT <COMMAND>
  • ENTRYPOINT ["executeable" ,"<param1>" ,"<param2>" ]

EXPOSE

用于为容器指定要暴露的端口

语法格式
  • EXPOSE <PORT>[/<PROTOCAL>] [<PROT></PROTOCAL>]
  • PROTOCAL: 默认为tcp,可以是tcp或者udp
例如 eg:
  • EXPOSE 11211/tcp 11211/udp

ONBUILD

定义触发器

当前dockerfile构建出的镜像被用作基础镜像,去构建其他镜像的时候,ONBUILD指令指定的操作才会被执行

语法格式
  • ONBUILD <instruction>
  • ONBUILD ADD my.conf /etc/mysql/my.conf
注意

ONBUILD不能自我嵌套,且不会触发FROM和MAINTERNATER指令

docker command

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

推荐阅读更多精彩内容