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可以覆盖掉默认的参数

相关内容

热门资讯

今日重大发现“老友十三水.究竟... 家人们!今天小编来为大家解答老友十三水透视挂怎么安装这个问题咨询软件客服徽4282891的挂在哪里买...
重磅!全球首款,2nm手机芯片... 每经编辑|程鹏 向江林 手机芯片,进入2nm时代! 据财联社12月21日报道,三星在全球移动半导体...
终于懂了“微乐四川麻将.开挂神... 网上科普关于“微乐四川麻将有没有挂”话题很是火热,小编也是针对微乐四川麻将作*弊开挂的方法以及开挂对...
终于明白“新毛豆炸金花.是不是... 终于明白“新毛豆炸金花.是不是有挂?”必胜开挂神器您好,新毛豆炸金花这个游戏其实有挂的,确实是有挂的...
重磅消息“白金岛游戏.开挂神器... 重磅消息“白金岛游戏.开挂神器?”确实真的有挂您好,白金岛游戏这个游戏其实有挂的,确实是有挂的,需要...
【第一资讯】“新畅游互娱.到底... 有 亲,根据资深记者爆料新畅游互娱是可以开挂的,确实有挂(咨询软件无需打...
最新引进“开心游戏.到底有挂吗... 有 亲,根据资深记者爆料开心游戏是可以开挂的,确实有挂(咨询软件无需打开...
终于懂了“乐禧棋牌.开挂神器?... 您好:乐禧棋牌这款游戏可以开挂,确实是有挂的,需要了解加客服微信【4282891】很多玩家在这款游戏...
今日重大消息“兴动竞赛.有挂吗... 您好:兴动竞赛这款游戏可以开挂,确实是有挂的,需要了解加客服微信【9752949】很多玩家在这款游戏...
今日重大发现“十胡卡.是不是有... 家人们!今天小编来为大家解答十胡卡透视挂怎么安装这个问题咨询软件客服徽4282891的挂在哪里买很多...