Dockerfile
Dockerfile 是用于构建Docker镜像的脚本文件,由一系列指令构成。通过docker build命令构建镜像时,Dockerfile中的指令会由上到下依次执行,每条指令都会构建出一个镜像。这就是镜像的分层。因此,指令越多,层次也就越多,创建的镜像也就越多,效率也会越低。
所以在定义Dockerfile时,能在一个指令完成的动作就不要分为两条。
scratch镜像与ADD指令
scratch镜像是一个空镜像,不能pull、runn。
ENV
【语法1】ENV
用于指定环境变量,这些环境变量,后续可以被RUN指令使用,容器运行起来后,也可以在容器中获取这些环境变量。
【语法2】 ENV
= = … 可以设置多个变量,每个变量为一对
= 指定。
WORKDIR
【语法】WORKDIR path
容器打开后默认进入的目录,一般在后续的RUN、CMD、ENTRYPOINT、ADD等指令中会引用改目录。可以设置多个WORKDIR指令。后续WORKDIR指令若是用的是相对路径,则会基于之前WORKDIR指令指定的路径。在使用docker run运行容器时,可以通过-w参数覆盖构建时所设置的工作目录
RUN
【语法1】RUN
这里的command就是shell命令。docker build执行的过程中,会使用shell运行指定的command。
【语法2】RUN [“EXECUTABLE”,“PARAM1”,“PARAM2”,…] 非shell,可执行命令
在docker build执行过程之中,会调用第一个参数"EXECUTABLE"指定的应用程序运行,并使用后面第二、三等参数作为应用程序的运行参数。
CMD
【语法1】CMD [“EXECUTABLE”,“PARAM1”,“PARAM2”,…]
在容器启动之后,即在执行完 docker run 后会立即调用执行"EXECUTABLE"指定的可执行文件,并使用后面的第二、三等参数作为应用程序的运行参数。
【语法2】 CMD command param1 param2,…
这里的command就是shell命令,在容器启动之后会立即运行指定的shell命令。
【语法3】 CMD [“PARAM1”,“PARAM2”,…]
提供给ENTERYPOINT的默认参数
FROM centos:7 CMD cal FROM centos:7 CMD ["cal"]
docker build -t mycal:1.0
我也可以把cal给替换掉
docker run mycal:1.0 date
docker build -f Dockerfile2 -t mycal:2.0 .
FROM centos:7 CMD ["/bin/bash","-c","cal"]
语法:CMD [“EXECUTABLE”,“PARAM1”,“PARAM2”,…]
/bin/bash表示可执行文件,-c表示要执行的命令来源于命令行
其实就是用/bin/bash来执行cal
依旧还是不能加参数-y
结论:CMD的都不能用带选项的命令来替换
ENTRYPOINT
【语法1】ENTRYPOINT [“EXECUTABLE”,“PARAM1”,“PARAM2”,…]
【解析】在容器启动过程中,也就是在执行docker run时,会调用执行"EXECUTABLE"指定的应用程序,并使用后面第二、三等参数作为应用程序的运行参数。
【语法2】ENTRYPOINT command param1 param2,…
【解析】这里的command就是shell命令。在容器启动过程中,也就是在执行docker run时,会运行指定的shell命令。
FROM centos:7 ENTRYPOINT ["cal"]
FROM centos:7 ENTRYPOINT ["/bin/bash","-c","cal"]
FROM centos:7 ENTRYPOINT cal 不起作用 如果ENTRYPOINT发现后面是一个shell,直接就运行shell了,不会去进行拼接 FROM centos:7 ENTRYPOINT ["cal"] OK 只有这种才会进行拼接 FROM centos:7 ENTRYPOINT ["/bin/bash","-c","cal"] 不起作用 因为这里的-y的作用对象变成/bin/bash了,会被直接忽略
CMD和ENTRYPOINT联用
FROM centos:7 CMD ["hello world"] ENTRYPOINT ["echo"]
CMD中的内容就是ENTRYPOINT的参数。
也就是 echo “hello world”
总结:Dockerfile中的[command]或者[“EXCUTABLE”]如果是通过CMD指定的,该镜像的启动命令docker run 中是不能添加参数[ARG]的。一位内Dockerfile中的CMD是可以被命令中[COMMAND]替代的。
如果命令中的IMAGE后依旧有内容,此时对于docker daemon来说,其首先认为是替代用的[COMMAND],如果有两个或者两个以上的内容,后面的内容才会认为是[ARG]。所以,添加的-y会报错,因为没有-y这样的[COMMAND]。
ADD
【语法1】ADD
【语法2】ADD ["
"," "] #路径中存在空格时使用双引号引起来 【解析】该指令将赋值当前宿主机中指定文件src到容器中的指定目录dest中。src可以是宿主机中的绝对路径,也可以是相对路径。但是相对路径是相对于docker build命令所指定的路径的。src指定的文件可以是一个压缩文件,压缩文件复制到容器后会自动解压为目录。src也可以是一个URL,此时ADD指令相当于wget。src最好不要使目录,其会将该目录中的所有内容复制到指定目录中。dest是一个绝对路径,其最后面的路径必须要加上斜杠,否则系统会将最后的目录名称当作是文件名的。
COPY
【说明】功能和ADD指令相同,不过src不能是URL,如果src为压缩文件,复制到容器后也不会自动解压。
如果COPY zookeeper.tar.gz /opt/copy/ 没有最后的 / ,表示copy是一个文件
【建议】全都加上/
FROM centos:7 WORKDIR /opt ADD zookeeper.tar.gz /opt/add/ COPY zookeeper.tar.gz /opt/copy/ CMD ["/bin/bash"]
ARG
【语法】ARG
[= ] 【解析】定义一个变量,该变量将会使用于镜像构建时。若要定义多个变量,则需要定义多个ARG指令。
FROM centos:7 ARG name=TOM RUN echo $name
指定变量
docker build -t myargs:2.0 --build-arg name=Jerry .
前提是这个ARG在Dockerfile中存在
ONBUILD
【语法】ONUILD [INSTRUCTION]
【解析】该指令用于指定当前镜像的子镜像进行构建时要执行的指令。
FROM centos:7 ENV WORKPATH /usr/local WORKDIR $WORKPATH ONBUILD RUN yum install -y wget CMD ["/bin/bash"]
FROM parent:1.0
docker build -f Dockerfile2 -t son:1.0 .
会在子镜像中安装wget
EXPOSE
【语法】RUN
[ ...] 指定容器准备对外暴露的端口号,但该端口号并不会真正的对外暴露。如果要真的暴露,需要在执行docker run命令的时候使用-p来指定。
构建新镜像的方式总结
可以构建出新镜像的方式:
docker build
docker commit
docker import
docker compose
docker hub中完成Automated Builds
注意:docker load并没有构建出新的镜像,和原镜像是同一个镜像。
猜你喜欢
- 11天前(从“见世面”到“内在需要”:在海南,追问旅行的意义)从“见世面”到“内在需要”:在海南,追问旅行的意义
- 11天前(香港航空三亚航线复航了吗)香港航空三亚航线复航
- 11天前(河南省文旅大会精神)2025河南省文化旅游发展大会新闻发布会在郑州召开
- 11天前(甘肃文化旅游宣传片)甘肃文旅推介走进重庆
- 11天前(中国最好的避暑山庄)2025中国十大避暑山庄评选揭晓,澳涞山庄夺魁
- 11天前(澳涞坞是什么)从本土品牌到全球舞台:澳涞山庄获国际顶级产业资源加持
- 11天前(武隆旅游门票)炸了!519中国旅游日武隆甩出王炸福利,59.9元通玩6大景点?!
- 11天前(锦州新增两家国家aaa级旅游景区有哪些)锦州新增两家国家AAA级旅游景区
- 11天前(2025年安徽省“百场黄梅唱响百家景区”示范展示启动)2025年安徽省“百场黄梅唱响百家景区”示范展示启动
- 11天前(北京香港航班动态查询)香港快运航空北京大兴新航线今日首航
网友评论
- 搜索
- 最新文章
- (2020广州车展哈弗)你的猛龙 独一无二 哈弗猛龙广州车展闪耀登场
- (哈弗新能源suv2019款)智能科技颠覆出行体验 哈弗重塑新能源越野SUV价值认知
- (2021款全新哈弗h5自动四驱报价)新哈弗H5再赴保障之旅,无惧冰雪护航哈弗全民电四驱挑战赛
- (海南航空现况怎样)用一场直播找到市场扩张新渠道,海南航空做对了什么?
- (visa jcb 日本)优惠面面俱到 JCB信用卡邀您畅玩日本冰雪季
- (第三届“堡里有年味·回村过大年”民俗花灯会活动)第三届“堡里有年味·回村过大年”民俗花灯会活动
- (展示非遗魅力 长安启源助力铜梁龙舞出征)展示非遗魅力 长安启源助力铜梁龙舞出征
- (阿斯塔纳航空公司)阿斯塔纳航空机队飞机数量增至50架
- (北京香港航班动态查询)香港快运航空北京大兴新航线今日首航
- (我在港航“呵护”飞机 每一次安全着陆就是最好的荣誉)我在港航“呵护”飞机 每一次安全着陆就是最好的荣誉
- 热门文章