admin 管理员组文章数量: 1086019
2024年1月5日发(作者:access数据库系统下载)
制作Dockerfile为Docker入门学习的第一步(当然,除了环境搭建)。本文收集、整理了官网关于制作Dockerfile的全部命令(除SHELL没整理,这个就不弄了),可帮助大家快速进入Dockfile制作的学习。以下为正文,下面进入学习姿势吧! FROM 功能为指定基础镜像,并且必须是第一条指令。如果不以任何镜像为基础,那么写法为:FROM scratch。同时意味着接下来所写的指令将作为镜像的第一层开始 语法:FROM
功能为运行指定的命令RUN命令有两种格式1. RUN
补充细节:这里边包括参数的一定要用双引号,就是",不能是单引号。千万不能写成单引号。原因是参数传递后,docker解析的是一个JSON array RUN & CMD不要把RUN和CMD搞混了。RUN是构件容器时就运行的命令以及提交运行结果CMD是容器启动时执行的命令,在构件时并不运行,构件时紧紧指定了这个命令到底是个什么样子 LABEL功能是为镜像指定标签 语法:LABEL
EXPOSE功能为暴漏容器运行时的监听端口给外部但是EXPOSE并不会使容器访问主机的端口如果想使得容器与主机的端口有映射关系,必须在容器启动的时候加上 P参数 ENV功能为设置环境变量语法有两种1. ENV
尽量不要把
如下:FROM ubuntuENTRYPOINT ["top", "-b"]CMD ["-c"]如果我们在Dockerfile种同时写了ENTRYPOINT和CMD,并且CMD是一个完整的指令,那么它们两个会互相覆盖,谁在最后谁生效如下:FROM ubuntuENTRYPOINT ["top", "-b"]CMD ls -al那么将执行ls al ,top b不会执行。 Docker官方使用一张表格来展示了ENTRYPOINT 和CMD不同组合的执行情况(下方表格来自docker官网) VOLUME 可实现挂载功能,可以将内地文件夹或者其他容器种得文件夹挂在到这个容器种
语法为:VOLUME ["/data"] 说明: ["/data"]可以是一个JsonArray ,也可以是多个值。所以如下几种写法都是正确的VOLUME ["/var/log/"]VOLUME /var/logVOLUME /var/log /var/db一般的使用场景为需要持久化存储数据时容器使用的是AUFS,这种文件系统不能持久化数据,当容器关闭后,所有的更改都会丢失。所以当数据需要持久化时用这个命令。 USER 设置启动容器的用户,可以是用户名或UID,所以,只有下面的两种写法是正确的USER daemoUSER UID注意:如果设置了容器以daemon用户去运行,那么RUN, CMD 和 ENTRYPOINT 都会以这个用户去运行 WORKDIR 语法:WORKDIR /path/to/workdir 设置工作目录,对RUN,CMD,ENTRYPOINT,COPY,ADD生效。如果不存在则会创建,也可以设置多次。 如:
WORKDIR /aWORKDIR bWORKDIR cRUN pwdpwd执行的结果是/a/b/c WORKDIR也可以解析环境变量如:ENV DIRPATH /pathWORKDIR $DIRPATH/$DIRNAMERUN pwdpwd的执行结果是/path/$DIRNAME ARG语法:ARG
ONBUILD语法:ONBUILD [INSTRUCTION]这个命令只对当前镜像的子镜像生效。比如当前镜像为A,在Dockerfile种添加:ONBUILD RUN ls -al这个 ls al 命令不会在A镜像构建或启动的时候执行 此时有一个镜像B是基于A镜像构建的,那么这个ls al 命令会在B镜像构建的时候被执行。 STOPSIGNAL语法:STOPSIGNAL signalSTOPSIGNAL命令是的作用是当容器推出时给系统发送什么样的指令 HEALTHCHECK 容器健康状况检查命令语法有两种:1. HEALTHCHECK [OPTIONS] CMD command2. HEALTHCHECK NONE第一个的功能是在容器内部运行一个命令来检查容器的健康状况第二个的功能是在基础镜像中取消健康检查命令 [OPTIONS]的选项支持以下三中选项: interval=DURATION 两次检查默认的时间间隔为30秒 timeout=DURATION 健康检查命令运行超时时长,默认30秒 retries=N 当连续失败指定次数后,则容器被认为是不健康的,状态为unhealthy,默认次数是3 注意:HEALTHCHECK命令只能出现一次,如果出现了多次,只有最后一个生效。
CMD后边的命令的返回值决定了本次健康检查是否成功,具体的返回值如下:0: success 表示容器是健康的1: unhealthy 表示容器已经不能工作了2: reserved 保留值 例子:HEALTHCHECK --interval=5m --timeout=3s CMD curl -f localhost/ || exit 1 健康检查命令是:curl f localhost/ || exit 1两次检查的间隔时间是5秒命令超时时间为3秒
版权声明:本文标题:Dockerfile命令详解(超全版本) 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://roclinux.cn/p/1704395087a457665.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论