码迷,mamicode.com
首页 > 其他好文 > 详细

6.dockerfile

时间:2019-10-13 23:47:54      阅读:157      评论:0      收藏:0      [点我收藏+]

标签:ntp   服务   user   cti   不能   目录   概述   覆盖   传参   

一、概述

自制镜像的目的不是为了解决配置更新的问题,而是为了定制化应用服务。

镜像的制作:基于容器制作;dockerfile

dockerfile的格式:注释信息+指令(约定俗成使用大写)及其参数

dockerfile中的指令是顺序执行的,第一个非注释行必须是“FROM”指令。

docker制作镜像的工作逻辑:专用的工作目录,文件名首字母大写的dockerfile文件;引用的文件或目录路径不能是工作目录的父目录,只能是当前目录或子目录,因此需要将使用的文件放到此目录下。

dockerfile中每一条指定都会生成一层镜像层,所以要尽量少写指令。

构建命令:docker build --help

二、操作

1、指令

  • From:dockerfile文件的第一个非注释行,用于为镜像文件构建过程中指定基准镜像,后续的指定运行于此基准镜像所提供的的运行环境。(FROM <repository>:<tag>)
  • LABEL:为一个镜像指定元数据,键值对。(LABEL <key>=<value> <key>=<value>)
  • COPY:用于从docker宿主机复制文件到创建的新镜像文件。src支持使用通配符,dest如果是目录,末尾一定要写/,否则会被识别为文件;src路径使用相对路径,dest使用绝对路径;src是目录,则目录中的文件会被递归复制,但src目录自身不会被复制。(COPY <src> <dest>)
  • ADD:类似COPY,支持使用tar文件和URL路径。如果<src>是一个本地系统上的tar文件,将被自动展开为一个目录,其行为类似于tar -x,但通过URL获取到的tar文件不会被展开。(ADD <src> <dest>;ADD ["<src>",..., "<dest>"])
  • WORKDIR:指定工作目录,可以使用多次。(WORKDIR <dir>)
  • VOLUME:用于在image中创建一个挂载点目录,类似于命令中docker管理的挂载卷。(VOLUME <mountpoint>)
  • EXPOSE:用于为容器打开指定要监听的端口以实现与外部通信,可一次指定多个端口。指定暴露端口,但不会自动暴露到外部,run时-P才会动态绑定到宿主机的随机端口和所有地址。(EXPOSE <port>[/<protocol>] <port>[/<protocol>]),protocol指定传输层协议,tcp或udp,默认tcp。
  • ENV:用于为镜像定义所需的环境变量,可被用于Dockerfile中位于其后的其他指令调用,调用格式为$variable_name或${variable_name}。在创建容器时是能够重新配置环境变量的。(ENV <key> <value>;ENV <key>=<value>)
  • RUN:用于指定docker build过程中运行的程序,可以是任何命令,构建镜像过程中运行的命令,是基于基础镜像中的命令执行的,可运行多次。(RUN <command>或 RUN ["<executable>","<param1>","<param2>"])。第一种用法通常以“/bin/sh -c”来运行命令,在容器中的pid不为1,但会默认执行exec操作,将该进程号替换为1;第二种用法,不会以“/bin/sh -c”来发起,直接由内核创建,不支持shell操作符和使用shell环境变量,pid为1。
  • CMD:同RUN,但二者运行时间点不同。是在创建容器时没有指定运行命令时默认运行的命令,通常与ENTRYPOINT结合使用,存在多个CMD时,只有最后一个生效。CMD指定的命令可以被docker run的命令行选项覆盖。(CMD <command>或 CMD ["<executable>","<param1>","<param2>"]或CMD ["<param1>","<param2>")。第一种用法和第二种用法同RUN;第三种用法用于为ENTRYPOINT指令提供默认参数。
  • ENTRYPOINT:类似CMD的功能,为容器指定默认运行程序。不同的是,ENTRYPOINT启动的程序不会被docker run时的参数覆盖,并且这些命令行参数会被当做参数传递给ENTRYPOINT指定的程序。--entrypoint可覆盖ENTRYPOINT指定的默认程序。可存在多个,仅有最后一个生效。(ENTRYPOINT <command>或 ENTRYPOINT ["<executable>","<param1>","<param2>"])   ---   注:json数据中,要使用双引号。
  • USER:用于指定运行指令(RUN,CMD,ENTRYPOINT)时的用户名或UID,需要是已存在的用户,默认使用root。(USER <UID>|<UserName>)
  • HEALTHCHECK:用于定义docker检测某个容器的健康状态的行为。(HEALTHCHECK [OPTIONS] CMD <command>或HEALTHCHECK NONE -- 拒绝任何的健康状态检测)
  • SHELL:用于指定运行指令默认要使用的shell程序,默认是linux下是[“/bin/sh],[" -c”],windows是[“cmd”,"/S","/C"]。( SHELL ["<executable>","<parameters>"])
  • STOPSIGNAL:接收到什么信号容器才会退出,默认是-15,docker stop就是发送的-15的信号。(STOPSIGNAL signal)
  • ARG:构建过程中使用的变量,只在build中使用,可以在build中使用--build-arg传参数替换默认值。(ARG <name>[=<default_value>])
  • ONBUILD:用于在dockerfile中定义一个触发器,即此制作的镜像作为基础镜像被使用,其他人在build他们的镜像时会触发ONBUILD定义的指令。不能自动嵌套,不会触发FROM和MAINTAINER指令。(ONBUILD <INSTRUCTION>)

三、其他

注:直接在命令行启动一个进程,该子进程的父进程是当前shell,并且占用shell的终端输出;command & 运行一个进程,不占用当前shell的终端输出,但其父进程还是当前shell,shell退出进程也会退出;nohup command &,将当前进程送到后台,剥离与当前shell的父子关系,其父进程为init。

docker stop/kill 停止容器时,容器内接收信号的都是进程号为1的进程。

shell的内建命令exec将并不启动新的shell,而是用要被执行命令替换当前的shell进程,并且将老进程的环境清理掉。

 

6.dockerfile

标签:ntp   服务   user   cti   不能   目录   概述   覆盖   传参   

原文地址:https://www.cnblogs.com/cmxu/p/11657361.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!