十分钟熟练Dockerfile指令

栏目: 编程工具 · 发布时间: 6年前

github地址: https://github.com/opsonly , 上面是一个基于 python3.7django2.1 的多人博客系统,喜欢的可以给个star~

  • LABLE 给镜像添加元数据信息

  • COPY 用户从宿主机的当前目录复制文件至创建的新映像文件
COPY <src> <dest>
COPY ["<src>",..."<dest>"]
<src>为要复制的源文件或目录,支持使用通配符
<dest>为目标路径,建议使用绝对路径
  1. <src>必须是build上下文中的路径,不能是其父目录中的文件
  2. 如果<src>是目录,则其内部文件或子目录会被递归复制, 但是<src>目录本身不会被复制
  • ADD 类似于COPY指令,ADD支持使用tar文件和URL路径
    操作如COPY

    如果<src>是一个本地系统上压缩格式的tar文件,它降被展开为一个目录,其行为类似 "tar -x"命令,通过url获取到的tar文件将不会自动展开;

  • WORKDIR 用于为Dockerfile中所有的RUN、CMD、ENTRYPOINT、COPY和ADD指定工作目录
WORKDIR /usr/local/
ADD nginx-1.15.2.tar.gz ./src/
  • VOLUME

    定义存储卷,只能制定容器内部的目录

  • EXPOSE 用户为容器打开制定要监听的端口以实现与外部通信
    EXPOSE <port>
    EXPOSE 11211/udp 11211/tcp

    只有docker run 加 -P选项时才会将端口暴漏出来,如果不加,将不暴漏端口

[root@cv0002 docker]# docker run --name t1 --rm tinyhttpd:v0.0.6 /bin/httpd -f -h /data/web/html
[root@cv0002 ~]# docker port t1
[root@cv0002 ~]#

[root@cv0002 docker]# docker run --name t1 --rm -P tinyhttpd:v0.0.6 /bin/httpd -f -h /data/web/html
[root@cv0002 ~]# docker port t1
80/tcp -> 0.0.0.0:1024
  • ENV 用于为镜像定义所需的环境变量,并可被Dockerfile文件中位于其后的其他指令(ENV,ADD,COPY等)所调用,调用格式为\$variable或${variable}
    ENV <key> <value>或
    ENV <key>=<value> ...
    1. 第二种格式可以设置多个变量,若<value>中包含空格,可以使用反斜线转义,也可通过对<value>加引号来标识,反斜线也可以用于续行
    2. 定义多个变量时,建议使用第二种方式,以便在同一层中完成所有功能。
    3. 如果在命令行中定义-e 更改环境变量,也只是更改了环境变量,之前编译时候做的改变是更改不了的。
[root@cv0002 docker]# docker run --name t1 --rm tinyhttpd:v0.0.7 printenv
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=a2c3f68db164
DOC_ROOT=/data/web/html/
WEB_SERVER_PACKAGE=nginx-1.15.2
HOME=/root
[root@cv0002 docker]# docker run --name t1 --rm -e WEB_SERVER_PACKAGE="nginx-1.15.1" tinyhttpd:v0.0.7 printenv
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=27213da32d60
WEB_SERVER_PACKAGE=nginx-1.15.1
DOC_ROOT=/data/web/html/
HOME=/root
[root@cv0002 docker]# docker run --name t1 --rm -e WEB_SERVER_PACKAGE="nginx-1.15.1" tinyhttpd:v0.0.7 ls /usr/local/src
nginx-1.15.2

RUN和CMD 如图所示

十分钟熟练Dockerfile指令

  1. RUN 在docker build中运行,构建镜像时为了使镜像完整使用的命令。在初始化容器时候时不可能再运行。
  2. CMD 定义一个镜像文件启动为容器时候默认要运行的程序,且其运行结束后,容器也将终止,而 docker 容器默认只运行一个程序。CMD指令可以被docker run 的命令行所覆盖

注意:RUN命令在Dockerfile中可以有多个,且可以都生效,但是CMD有多个的话,但只有最后一个生效

  • RUN 命令格式
    RUN <command>
    RUN ["<executable>","<param1>","<param2>"]
    1. 第一种格式,<command>通常是一个 shell 命令,且以"/bin/sh -c "来运行它,这意味着此进程在容器中的PID不为1,不能接收unix信号(因为接收信号的都是进程为1的来接收),因此,当使用docker stop <container>命令停止容器时,此京城接收不到sigterm信号;
    2. 第二种语法格式中的参数是一个json格式的数组,其中<executable>为要运行的命令,后面为参数。然而,此格式的命令不会以"/bin/sh -c" 来发起,因此不支持通配符等shell特性

注意:Json数组中,要使用双引号

  • CMD命令格式
CMD <command>
CMD ["<executable>","<param1>","<para
  1. 前两种语法格式的意义同RUN
  2. 第三种则用于为ENTRYPOINT指令提供默认参数
  • ENTRYPOINT
    1. 类似CMD指令的功能,用于为容器指定默认运行程序,从而使得容器像是一个单独的可执行程序
    2. 与CMD不同的是,有ENTRYPOINT启动的程序不会被docker run命令行制定的参数所覆盖,而且,这些命令行参数会被当做参数传递给ENTRYPOINT制定的程序,但会被docker run命令的--entryporint选项的参数可覆盖ENTRYPOINT指令制定的程序
ENTRYPOINT <command>
ENTRYPOINT [<"<executable>","<param1>","<param2>">]

注意:docker run传入的命令参数会覆盖CMD指令的内容并且附加到ENTRYPOINT命令最后作为其参数使用

注意:Dockerfile文件中也可以存在多个ENTRYPOINT指令,但仅有最后一个会生效

  • USER 用于指定运行的image时的或运行Dockerfile中的任何RUN、CMD、或ENTRYPOINT指令指定的程序时的用户名或UID,默认为root用户

    USER <UID>|<username>

    注意:<UID>可以为任意数字,但是事件中必须为/etc/passwd中某用户的有效UID,否则docker run命令将运行失败

  • HEALTHCHECK 检测应用是否正常运行
HEALTHCHECK --start-period=3s CMD wget -O - -q http://${IP:-0.0.0.0}:${PORT:-80}/
#3s后开始检查,需要等容器里面的操作全部运行完成再检查
  • SHELL 修改或额外定义运行程序的默认shell
  • STOPSIGNAL 更好docker stop 传过来的信号指令,默认为15

    STOPSIGNAL signal
  • ARG 只再build中使用,类似变量,可以再docker run的时候通过--build-tag传值,而ENV不可在docker run时传值。
  • ONBUILD 用于在Dockerfile中定义一个触发器(延时执行)
    ONBUILD <指令>

    当此Dockerfile被build为映像文件后,此映像文件亦可作为base image被另一个Dockerfile用作FROM指令的参数,并以之构建新的映像文件,此时,ONBUILD后的指令才会执行。

注意:在ONBUILD指令中使用ADD或COPY指令应该格外小心,因为新构建过程的上下文有可能会缺少源文件

喜欢的可以关注一下,欢迎点赞评论,不断更新哦~

十分钟熟练Dockerfile指令

以上所述就是小编给大家介绍的《十分钟熟练Dockerfile指令》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Where Wizards Stay Up Late

Where Wizards Stay Up Late

Katie Hafner / Simon & Schuster / 1998-1-21 / USD 16.00

Twenty five years ago, it didn't exist. Today, twenty million people worldwide are surfing the Net. "Where Wizards Stay Up Late" is the exciting story of the pioneers responsible for creating the most......一起来看看 《Where Wizards Stay Up Late》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具