Dockerfile详解
admin
2023-02-26 06:40:51
0

制作Docker image有两种方式: 一是使用Docker container(docker save container_name -o test.tar ) ,再导出image,而是使用Dockerfile, 将所有动作导入到文件中,使用build命令制作成镜像。
一,Dockerfile基本结构
一般的Dockerfile分为四个部分:基础镜像信息,维护者信息,镜像操作指令和容器启动时的指令
FROM nginx:1.13.5-alpine MAINTAINER SXY Team #设置时区 RUN echo 'Asia/Shanghai' >/etc/timezone ARG SIBE_VERSION=0 COPY images/files/entrypoint.sh /usr/local/bin/ RUN chmod u+x /usr/local/bin/entrypoint.sh # Update to get support for Zip/Unzip, Bash RUN apk --update add zip unzip bash wget ENV WWW_TARGET /var/www/html/ COPY images/files/mysite.template /etc/nginx/conf.d/default.conf ADD dist/ /tmp/ RUN mkdir -p ${WWW_TARGET} \ && mv /tmp/ ${WWW_TARGET} \ && rm -rf /tmp/ ENV MGMT_API_URL http://192.168.3.223:19980 ENV MGMT_API_AUTHORIZATION d2ViX2FwcDpjaGFuZ2VpdA== RUN cp /var/www/html/scripts/http/configuration.json /var/www/html/scripts/http/configuration.json.template RUN cp /var/www/html/scripts/http/configuration.json /var/www/html/scripts/http/configuration.json.template2 # forward request and error logs to docker log collector RUN mkdir -p /var/log/webui && ln -sf /dev/stdout /var/log/webui/access.log \ && ln -sf /dev/stderr /var/log/webui/error.log EXPOSE 80 443 ENTRYPOINT ["/usr/local/bin/entrypoint.sh"] CMD ["nginx", "-g", "daemon off;"] entrypoint中的信息 [root@test-227 files]# cat entrypoint.sh #!/bin/bash setup() { echo "Configure 1 management api url to ${MGMT_API_URL}" cat /var/www/html/scripts/http/configuration.json.template | \ sed "s#http://192.168.3.223:19980#${MGMT_API_URL}#g" > /var/www/html/scripts/http/configuration.json.template2 cat /var/www/html/scripts/http/configuration.json.template2 echo "Configure 2 AUTHORIZATION to ${MGMT_API_AUTHORIZATION}" cat /var/www/html/scripts/http/configuration.json.template2 | \ sed "s#d2ViX2FwcDpjaGFuZ2VpdA==#${MGMT_API_AUTHORIZATION}#g" > /var/www/html/scripts/http/configuration.json cat /var/www/html/scripts/http/configuration.json } setup exec "$@"
FROM:指定基础镜像,要在哪个镜像建立
FROM 或者 FROM :
第一条指令必须为FROM指令

MAINTAINER: 指定维护者信息
MAINTAINER

RUN: 在镜像中要执行的命令
RUN 或者 RUN ["executable","param1","param2"]
前者将shell终端中运行命令,即/bin/bash -c;后者则使用exec执行,指定使用其他终端可以通过第二种方式实现,例如RUN ["/bin/bash", "-c", "echo hello"]

WORKDIR: 指定当前工作目录,相当于cd
WORKDIR /path/to/workdir
为后续的RUN,CMD,ENTRYPOINT指令配置工作目录,可以使用多个WORKDIR指令,后续命令如果参数是相对路径,则会基于之前命令指定的路径,例如
WORKDIR /a
WORKDIR b
WORKDIR c
RUN pwd
则最终的路径/a/b/c

EXPOSE:指定容器需要被打开的端口
EXPOSE 80
告诉docker服务容器需要暴露的端口,但是目前只在容器中暴露,如果想要在节点进行暴露则需要-p 80:80,或者-P(主机将为其暴露一个随机端口)

ENV: 定义环境变量
ENV
指定一个环境变量在容器中生成
ENV managementapi http://192.168.3.226

COPY: 复制本地dockerfile路径根目录下的文件到容器文件中
COPY

ADD: 相当于COPY,但比COPY功能强大
ADD
此命令也是将主机任何地方文件到容器文件中,但是可以复制tar文件时,也会自动展开

VOLUME: 挂载目录
VOLUME ["/data"]
创建一个可以从本地主机或者其他容器的挂载点,一般用来存放数据

USER:
USER daemon
指定运行容器时的用户名或UID,后续的RUN也会使用指定用户。当服务不需要管理员权限时,可以通过该命令指定运行用户,并且可以在之前创建需要的用户 RUN useradd -s /sbin/nologin -M www。

ENTRYPOINT
两种格式:
ENTRYPOINT ["executable","param1","param2"]
ENTRYPOINT command param1 param2 (shell)
配置容器启动后执行的命令,并且不可被docker run参数覆盖,每个Dockerfile中只能有一个ENTRYPOINT,当指定多个时,只有最后一个生效

CMD:
支持三种格式
CMD ["executable","param1","param2"] 使用exec执行
CMD command1 command2 command3 在/bin/bash中执行,提供给需要交互应用
CMD ["param1","param2"] 提供给 ENTRYPOINT 的默认参数;
指定启动容器时执行的命令,每个Dockerfile只能有一条CMD命令。如果指定了多条命令,只有最后一条会被执行,则会覆盖掉CMD指定命令

ENTRYPOINT和CMD的区别: ENTRYPOINT指定了该镜像启动时入口,CMD则指定了容器启动时的命令,当两者共用时,完整的启动命令像是ENTRYPOINT+CMD,使用ENTRYPOINT的好处是在我们启动镜像就像是启动了一个可执行程序,在CMD上仅需要指定参数;另外在我们自定义CMD时不容易出错

使用CMD的Dockerfile:
FROM mysql
CMD ["echo","test"]

使用ENTRYPOINT的Dockerfile
FROM mysql
ENTRYPOINT ["echo","test"]

ENTRYPOINT不能覆盖掉执行时的参数,会把启动镜像是的命令当参数,而CMD可以覆盖掉默认的参数

相关内容

热门资讯

特朗普对美伊达成协议再表乐观 ... 新华社华盛顿5月6日电 美国总统特朗普6日接受美国公共广播公司电话采访时,对美国同伊朗达成协议的前景...
美对伊战事或为白宫记协晚宴枪手... 当地时间5月6日,总台记者获悉,美国国土安全部在一份情报评估中指出,美国对伊朗发起的军事行动可能是白...
权威数读丨尽显中国活力!五一假... 全社会跨区域人员流动量超15亿人次,消费相关行业销售收入同比增长14.3%,电影票房突破7.5亿元…...
“最美婚姻登记点”长啥样 郑州市金水区民政局婚姻登记处为新人举行户外颁证仪式。 受访者供图三门峡市天鹅湖婚姻登记处设置的创意路...
消息人士称伊朗预计将于7日回应... △伊朗首都德黑兰(资料图)当地时间5月6日,据一位地区消息人士表示,伊朗预计将于5月7日向调解人提交...
大数据透视“五一”假期消费亮点 刚刚过去的“五一”假期,国内消费市场活力十足。5月1日至4日,商务部重点监测的78个步行街(商圈)客...
河南超有品 第十个“中国品牌日... 4月30日,走进位于新县的羚锐制药贴膏剂生产基地,没有印象中传统药材加工的浓郁气味,也没有传统车间的...
假日出游正当时 文旅市场活力涌 “五一”假期,全省接待国内游客6611.7万人次,实现旅游收入381.1亿元假日出游正当时 文旅市场...
坚定不移沿着习近平总书记指引的... 大风起兮风车转。支撑这个“追风巨人”不停转动的“芯”,主要产自洛阳。5月6日,在洛阳轴承集团股份有限...
燃气灶为什么换了感应针还是熄灭 问题:燃气灶为什么换了感应针还是熄灭回答:原因是电池有没有电,这是平时容易碰见的问题,发现点不着火时...