Docker从入门到精通之Dockerfile详解

Dockerfile详解

Dockerfile是一个构建镜像的文本文件,其中包含用户可以在命令行上调用组装镜像的所有命令,使用docker build构建

格式:

# Comment
INSTRUCTION arguments

FROM

镜像构建初始阶段,指定构建的新镜像是从哪个基础镜像构建

FROM [--platform=<platform>] <image>[:<tag>] [AS <name>]

RUN

执行命令,在构建镜像时执行,有以下2种格式:

shell格式

RUN <命令行命令>
# <命令行命令> 等同于,在终端操作的 shell 命令。

exec格式

RUN ["可执行文件", "参数1", "参数2"]
#举例
# RUN ["/bin/bash", "-c", "echo hello"] 等价于 RUN /bin/bash -c echo hello

注意:Dockerfile每执行一次都会在docker上新建一层,过多无意义的层,会导致镜像过于膨大

举例:

FROM centos
RUN yum -y install wget
RUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz"
RUN tar -xvf redis.tar.gz

以上创建3层镜像,优化如下:

FROM centos
RUN yum -y install wget \
    && wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" \
    && tar -xvf redis.tar.gz

&&符号连接命令,执行后只会创建一层镜像

LABEL

给镜像添加元数据,比如说镜像作者,以key-value形式声明

LABEL <key>=<value> <key>=<value> <key>=<value> ...
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."

EXPOSE

指定容器监听的端口,可以指定TCP或UDP,默认是TCP

EXPOSE <port> [<port>/<protocol>...]
EXPOSE 80/tcp
EXPOSE 80/udp

ENV

环境变量设置,值会持久化在镜像中,会产生一定副作用,ARG不会

ENV <key>=<value> ...
ENV WORK_DIR=/app
WORKDIR ${WORK_DIR}

ADD

复制文件、目录到镜像文件文件系统中,可使用通配符。该指令有以下两种格式

ADD [--chown=<user>:<group>] <src>... <dest>
ADD [--chown=<user>:<group>] ["<src>",... "<dest>"]
#复制test.txt文件到容器/home目录
ADD test.txt /home

COPY

复制文件、目录到镜像文件文件系统中,可使用通配符。COPY与ADD类似,首选推荐使用COPY。COPY只支持本地文件或目录复制到容器中,而ADD会自动解压本地压缩文件。该指令有以下两种格式

COPY [--chown=<user>:<group>] <src>... <dest>
COPY [--chown=<user>:<group>] ["<src>",... "<dest>"]

ENTRYPOINT

容器启动时执行命令,有以下2种格式:

ENTRYPOINT ["executable", "param1", "param2"] #推荐用法
ENTRYPOINT command param1 param2

用例:

FROM openjdk:11
COPY *.jar /app/app.jar
ENV TZ=Asia/Shanghai
WORKDIR /app
EXPOSE 8761
ENTRYPOINT ["java","-jar","app.jar"]

CMD

容器启动时执行命令,有以下2种格式:

  • 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)

组合使用ENTRYPOINT和CMD, ENTRYPOINT指定默认的运行命令, CMD指定默认的运行参数.

用例:

ENTRYPOINT和CMD组合使用构建一个ping镜像,容器运行后默认ping localhost

FROM ubuntu:trusty
ENTRYPOINT ["/bin/ping","-c","3"]
CMD ["localhost"]

构建ping镜像,并运行ping容器

$ docker build -t ping .

$ docker run ping 
PING localhost (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.025 ms
64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.038 ms
64 bytes from localhost (127.0.0.1): icmp_seq=3 ttl=64 time=0.051 ms

$ docker run ping www.baidu.com
PING www.a.shifen.com (180.101.49.11) 56(84) bytes of data.
64 bytes from 180.101.49.11 (180.101.49.11): icmp_seq=1 ttl=52 time=10.5 ms
64 bytes from 180.101.49.11 (180.101.49.11): icmp_seq=2 ttl=52 time=24.1 ms
64 bytes from 180.101.49.11 (180.101.49.11): icmp_seq=3 ttl=52 time=15.4 ms

VOLUME

VOLUME 方式挂载到宿主机上的是匿名卷,在宿主机上是自动匿名挂载到 /var/lib/docker/volumes/ 目录下

VOLUME ["/data"]

USER

用于指定执行后续命令的用户和用户组,这边只是切换后续命令执行的用户(用户和用户组必须提前已经存在)

USER <user>[:<group>]

WORKDIR

为容器指定工作目录,如果该目录不存在,则创建容器时会创建

WORKDIR /path/to/workdir

ARG

定义一个变量,用户在构建镜像时使用docker build –build-arg <varname>=<value>将变量传递给构造器。如果用户指定了未在Dockerfile中定义的构造参数,会输出警告。

ARG <name>[=<default value>]

用例:

FROM ubuntu
ARG CONT_IMG_VER
ENV CONT_IMG_VER=v1.0.0
RUN echo $CONT_IMG_VER
$ docker build --build-arg CONT_IMG_VER=v2.0.1 .
本文链接:https://www.dzdvip.com/32570.html 版权声明:本文内容均来源于互联网。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 395045033@qq.com,一经查实,本站将立刻删除。
(1)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022年5月14日 12:19
下一篇 2022年5月14日 12:29

相关推荐

  • vivo x系列手机型号大全(vivo x系列哪个性价比最高)

    1】vivo X1 处理器:双核1.2GHz处理器 屏幕:4.7英寸 960*540 LCD直屏 电池容量:2000mAh 后置800万主摄;前置130万像素镜头 支持“极为先进”的3.5mm耳机接口 【2】vivo X1S 处理器:四核1.2GHz处理器 屏幕:4.7英寸 720P LCD直屏 电池容量:2000mAh 后置800万主摄;前置130万像素镜头 支持“极为先进”的3.5mm耳机接口 【3】vivo X3L 4G 处理器:高通四核1.2GHz处理器 屏幕:5英寸 720P LCD直屏 电池容量:2360mAh 后置800万主摄;前置500万像素镜头 支持“极为先进”的3.5mm耳机接口 【4】vivo X3V 4G 处理器:高通四核1.2GHz处理器 屏幕:5英寸 720P LCD直屏 电池容量:2360mAh 后置800万主摄;前置500万像素镜头 支持“极为先进”的3.5mm耳机接口 【5】vivo X3 处理器:四核1.5GHz处理器 屏幕:5英寸 720P LCD直屏 电池容量:2000mAh 后置800万主摄;前置500万像素镜头 支持“极为先进”的3.5mm耳机接口 【6】vivo X3S 处理器:1.7GHz八核处理器 屏幕:5英寸 720P LCD直屏 电池容量:2000mAh 后置1300万主摄;前置500万像素镜头 支持“极为先进”的3.5mm耳机接口 【7】vivo X5 处理器:1.7GHz八核处理器 屏幕:5英寸 720P LCD直屏 电池容量:2250mAh 后置1300万主摄;前置500万像素镜头 支持“极为先进”的3.5mm耳机接口 【8】vivo X5 Max 处理器:骁龙615 屏幕:5.5英寸 三星 AMOLED直屏 电池容量:2000mAh 后置1300万主摄;前置500万像素镜头 支持“极为先进”的3.5mm耳机接口 【9】vivo X5 Pro 处理器:1.7GHz八核处理器 屏幕:5.2英寸 三星 AMOLED直屏 电池容量:2300mAh 后置1300万主摄;前置800万像素镜头 支持“极为先进”的3.5mm耳机接口 【10】vivo X6 处理器:1.7GHz八核处理器 屏幕:5.2英寸 三星 AMOLED直屏 电池容量:2400mAh 后置1300万主摄;前置800万像素镜头 后置指纹解锁,有“极为先…

    2022年6月4日
    61
  • 岁月静好是什么意思

    意思是生活平安宁静为好,现在安定健康为佳。 每个人心中都会把生活憧憬成一幅画,或小桥流水,或峰峦叠翠,或渔舟唱晚,岁月静好,你我安然。 繁华过处皆如烟,淡淡人生静静过。生命的长廊中,有你,有我,有花香,有阳光,足矣! 人生所求,不过岁月静好,那么,岁月静好究竟是什么呢? 岁月静好,就是处一片清幽,享一方宁静!《豁然阁》 宋·程俱 云霞堕西山,飞帆拂天镜。 谁开一窗明,纳此千顷静。 寒蟾发淡白,一雨破孤迥。 时邀竹林交,或尽剡溪兴。 扁舟还北城,隐隐闻钟磬。 云霞坠落西山,飞帆轻拂着天镜。谁开一窗风景,纳入千顷寂静。天上的明月渐渐淡白,湖中的明月被雨点划开。 忽觉自己邀来竹林之友,又似王子猷雪夜访戴。一叶扁舟返回北城时,只隐隐听到钟磬之声远远传来。 岁月无常,但,还好有这一片静美风光,予我们一世欢欣。 不管岁月赐予我们的是凉薄,还是馨暖,惟愿你我盈一颗素心,静守一池清秋的恬淡,既能守心自暖,也能温暖岁月。 岁月静好,就是放下过往,重整心情,找到那个快乐的自己。《鹧鸪天》 宋·陆游 懒向青门学种瓜,只将渔钓送年华。 双双新燕飞春岸,片片轻鸥落晚沙。 歌缥缈,舻呕哑,酒如清露鲊如花。 逢人问道归何处,笑指船儿此是家。 陆游被免职罢官后,归家过起了闲居的乡村生活。 双双对对新来的燕子在长满春草的河岸上飞来飞去;远处的鸥鸟在夕阳的映照下轻盈如片片树叶在沙滩上飘落。 光阴的故事里,有欢喜,有悲伤,有念念不忘,也有过眼云烟。珍藏该记住的,忘记该忘记的。 整理好疲惫的心情,重新上路。此处失意,他处得意,世界上总有一处让你欢喜的地方。 岁月静好,就是在失意后,重整心情,找到那个快乐的自己。 岁月静好,莫于过一家人,粗茶淡饭,怡然自得。《满庭芳·渔》 元·赵显宏 江天晚霞,舟横野渡,网晒汀沙。 一家老幼无牵挂,恣意喧哗。 新糯酒香橙藕芽,锦鳞鱼紫蟹红虾。 杯盘罢,争些醉煞,和月宿芦花。 这首曲子写渔家欢乐,劳动之余,将船横于渡口,把网晒在河滩,一家人尽情地享受天伦之乐。 世界上最幸福的事,莫过于天伦之乐。一家人整整齐齐,即使是粗茶淡饭,也饶有滋味。 当我们阅尽千帆,见识过无数的悲欢离合、世态炎凉之后,就会明白,家人健康,和乐自得,是一件多么幸福的事。 人生的脚步常常走得太匆忙,请记得多回头看一看亲人,看他们是否安好,因为他们将是我们心灵的休憩之所。 岁月静好,就是选择自己喜欢的生活方式…

    2022年1月3日
    128
  • 刘畊宏老婆个人资料(刘畊宏老婆资料简介)

    一周涨粉2500万,单场直播观看人数超5200万。 出道30余年,已年近50岁的刘畊宏成了新的“流量神话”。据媒体报道,他的直播收入在10天内涨了10倍,商业报价更是高达一分钟50至60万。 对于刘畊宏靠健身成为“现象级”网红,有网友总结,除了因为他身材太好被平台几次误封掀起热度外,媳妇儿王婉霏才是最大功臣。 作为“陪练”出镜的王婉霏,笑容甜、声音柔。但每每累到戴上各种面具,被迫成为各类表情包时,又会让屏幕前的网友觉得真实可爱。 而且,王婉霏很懂得怎么跟网友互动。 比如她会吐槽说“不想做老婆”,因为“刘畊宏女孩”们不想练的时候可以走开,她累到瘫倒在地都会被拽起来继续。 再比如弹幕里有人说她胖,她随即“暴走”否认。担心被加练而格外紧张的模样,瞬间戳中不少网友的笑点。 既温柔,又好玩,难怪有网友觉得,她才是“刘畊宏视频里的灵魂”。而刘畊宏曾在节目中说过的“所有朋友都很喜欢她”,也由此得到了印证。 01 因获得1999年环球小姐台湾区冠军而出道的王婉霏,参加选美的原因有点特殊。不是天生丽质难自弃,想要让更多人看到自己的光彩,而是因为想要改变。 少女时期的王婉霏不爱化妆、率性随意,最喜欢的运动是打篮球,用她自己的话说就是“走男生路线”。不想让女儿成为假小子的王妈妈,于是建议她参加选美。 而那个报名时“丑爆了”的女孩,经过一系列训练后,蜕变得仪态优雅、光彩夺目,在不同的选美活动中屡获佳绩,成了荣誉加身的“选美皇后”。 凭借这个身份,王婉霏敲开了娱乐圈的门。 幸运的是,出道不久,她就遇到了自己生命中的另一半——刘畊宏。 02 刘畊宏对王婉霏一见钟情。 看到王婉霏的第一眼,他就跟自己说“这个女孩我要追”。但当时出道多年,已小有名气的刘畊宏却碰了壁。 他将电话号码写在纸上给了王婉霏的经纪人,让王婉霏给自己打电话,却始终无果。直到后来两个人正式相恋,刘畊宏才知道当初王婉霏觉得他态度不好,直接把纸条丢了。 多年后,刘畊宏在节目中谈及旧事,笑称自己当初太狂妄。 王婉霏的美丽出众,不仅让刘畊宏为之倾倒,也让她成了娱乐圈潜规则的目标。香港某知名唱片公司的老板找到她,提出可以为她量身打造演艺计划,将她捧成万人瞩目的巨星。 但条件是,让王婉霏跟着他。 王婉霏放弃了这个机会,因为她觉得,走出这一步之后,自己的感情世界或许会就此毁灭,从此再难遇见真心。 换句话说,她舍不得与刘畊宏的感情。 03 王婉…

    2022年4月27日
    94
  • 手机内存不足卡顿的解决办法(手机内存不足卡顿速度慢应该怎么办)

    手机使用时间久了,就有可能出现手机内存空间不足的情况,并且还伴随着卡顿现象。这个时候,你是怎样清理手机内存的?是通过手机自带的手机管家来清理垃圾的吗?欢迎大家在视频下方的评论区进行相关的讨论,常言道,三个臭皮匠,抵得上诸葛亮。 今天,我来给大家分享一个行之有效的方法——删除手机里的7个英文文件夹,就可以快速释放手机的内存空间。当然,这里要注意:如果你手机里有重要的图片、视频、文件等等,一定要提前把它们备份到U盘、电脑或云盘里,因为删除这些文件夹,会把这些数据给删除掉。如果手机内存不是严重不足,还是不建议大家这样操作。那么,是哪7个文件夹呢? 一、Android文件夹。打开手机的文件管理app,进入到文件管理首页。 点击“我的手机”选项(如上图),就会进入到手机的文件夹列表界面(如下图)。 安卓系统的文件夹基本上都是英文的,上图的几个中文文件夹,是我自己创建的,方便查找。这里我们找到Android文件夹(如上图),用手指长按它2秒钟,就会在屏幕底部出现管理菜单(如下图)。 点击管理菜单中的“删除”按钮,就可以把Android文件夹删除掉。在我们关闭这个界面,再返回这个界面时,又会重新创建这个文件夹,但是里面的数据,都已经删除掉了。 二、backup文件夹。这个文件夹是用来存放手机备份的,如果近期没打算还原备份的话,可以考虑删除它。在文件管理app的文件夹列表中找到这个backup文件夹。 同样的,长按它2秒钟,然后点击底部菜单中的“删除”按钮,就可以把它给删除。当我们再次给手机备份时,会自动创建这个文件夹。 三、DCIM文件夹。这个文件夹,是用来存放我们手机相机拍摄的视频和照片的,日积月累后,会占用大量的内存空间,1个10分钟的1920*1080的超高清视频,就可能会占用1.5G的内存空间,所以,我们有必要定期删除。当然,如果有重要的视频和照片,我们要提前把它们备份到自己的U盘或电脑里。 在文件管理app的文件夹列表中找到这个DCIM文件夹,长按2秒钟,点击底部“删除”按钮,就可以删除它。 四、Download文件夹。这个文件夹,看名字就知道它是存放下载文件的,如:手机下载的软件安装包、图片等等,长时间不清理,也会占用大量内存空间。在文件管理app的文件夹列表中找到它,长按2秒钟,点击底部“删除”按钮,就可以删除它。 五、Pictures文件夹。顾名思义,就是用来存放…

    2021年12月20日
    49
  • 中国共青团成立于哪一年(中国共青团成立时间)

    中国共青团成立于1922年5月,中国共产主义青年团是中国共产党领导的先进青年的群团组织,是广大青年在实践中学习中国特色社会主义和共产主义的学校,是中国共产党的助手和后备军。 中国共青团成立时间 今年是中国共产主义青年团成立100周年,那么,大家知道共青团是怎样诞生的吗? 名称由来 1922年5月 ,团的第一次代表大会在广州举行,正式成立中国社会主义青年团。1925年1月26日,改称中国共产主义青年团。1959年5月4日,共青团中央颁布共青团团徽。1982年12月,中国共产主义青年团第十一次全国代表大会召开,通过《中国共产主义青年团章程》。 组织性质 中国共产主义青年团是中国共产党领导的先进青年的群团组织,是广大青年在实践中学习中国特色社会主义和共产主义的学校,是中国共产党的助手和后备军。 组织成员 年龄在十四周岁以上,二十八周岁以下的中国青年,承认团的章程,愿意参加团的一个组织并在其中积极工作、执行团的决议和按期交纳团费的,可以申请加入中国共产主义青年团。(

    2022年8月6日
    94
  • 梁文博因打人事件被禁赛4个月(梁文博怎么不打比赛了)

    直播吧6月4日讯 世界台联官方公布对中国斯诺克选手梁文博的禁赛处罚。 官方声明 在2022年5月26日举行的世界职业台联(WPBSA)纪律委员会听证会上,梁文博承认他违反了WPBSA会员规则,以及世界斯诺克有限公司(WSL)球员合同。 本案源于梁文博在2022年2月9日在谢菲尔德治安法院被定罪,随后于2022年4月1日进行了宣判,共被罚款1380英镑及12个月社区服务。 尽管此案是斯诺克运动本身之外的事,且已由刑事法庭处理,但WPBSA认为梁文博因违反WPBSA规则以及WSL球员合同,其依据是梁的行为和随后的定罪是不符合运动员的行为,使斯诺克运动名誉受损。世台联主席杰森·弗格森决定在世锦赛之前对梁文博予以立即停赛等待纪律处分。 独立纪律委员会随后认定梁文博违反了WPBSA会员规则以及他的球员与WSL的合同。 2022年6月3日,独立纪律委员会实施的制裁是,梁文博将被禁止参加所有斯诺克比赛四个月,直至2022年8月1日止,并支付1000英镑的听证费用。 梁文博有权对独立纪律委员会的决定提出上诉。 世界职业斯诺克台联主席杰森·弗格森表示:“毫无疑问,本案对于独立纪律委员会来说是一个难以处理的案件,因为它已经在刑事法庭上审理过。尽管如此,无论是我还是WPBSA都不能接受成员的类似行为,致使梁文博在最重要、奖金最丰厚的赛事前被予以停赛。我很高兴委员会维持了这一决定。” WPBSA会员规则(摘录) 1.1 会员应在任何时候(即无论是否参加比赛)以与其职业运动员身份相符的适当和正确方式行事。 1.3 会员不得作出或促使作出任何声明,或作出任何在WPBSA看来可能使斯诺克和/或台球比赛名誉受损的行为。 WSL球员合同(摘录) 3.5.1 以专业且有信誉的方式行事,符合职业运动员的标准。 事件背景: 2021年7月,职业斯诺克选手梁文博被监控拍到在街上与一名女子发生肢体冲突,录像显示两人在英国谢菲尔德市中心发生争执,梁文博将女子推到墙上并挥拳袭击。 4月1日,谢菲尔德地方法院对梁文博罚款1380英镑,并要求其在12个月内完成96小时的社区劳动。 4月2日,世界台联主席杰森-弗格森决定暂停梁文博参加世界斯诺克巡回赛的资格,立即生效。 4月3日,中国台协发布公告,对梁文博处以停止参加国内台球比赛资格、停止旅英职业球员委员会副主任职务的处罚。 4月6日,梁文博发布道歉声明,对于自己与人冲…

    2022年6月5日
    25