` docker(二) | 听云轩

docker(二)

关于DockerFile

    dockerfile是一种能被docker程序解释的脚本,dockerfile由多条指令组成,每条指令对应Linux系统中不同的命令,基于dockerfile可以自定义创建生产环境所需的docker镜像,通过镜像可以启动所需的docker容器。

    docker程序将这些docerfile指令翻译为真正的Linux命令,dockerfile有特定的书写格式和支持命令。

参数:

  • FROM < image >:< tag >:FROM指令标识指定一个基本的镜像源,或从公共库拉取一个镜像源,dockerfile文件第一行必须指定FROM基础镜像源。

  • MAINTAINER:设置dockerfile编写人或者维护者的信息

  • LABER < key >=< value >:设置标签,采用键值对的方式

  • RUN < command >:核心指令,表示运行的Linux指令,每条指令在当前基础镜像上执行,并且提交成为新的镜像

  • EXPOSE < port > [< port >/< protocol >]:用来指定docker容器中监听的端口,用于外界宿主机互联访问,启动docker时,可以通过-P(或者 -p HOST_PORT:CONTAINER_PORT),主机会自动分配一个端口号转发到指定的端口
    注:该指令只是起声明作用,并不会自动完成端口映射

  • ENV < key >=< value >:设置环境变量,执行RUN指令及docker启动时被引用

  • WORKDIR /path/to/workdir:设置工作目录,执行RUN,ADD,COPY,ENV指令时的基础路径
    注:可以使用多个WORKDIR指令,如果后续指令参数是相对路径,则会基于之前命令指定的路径。比如:

    1
    2
    3
    4
    WORKDIR /a
    WORKDIR b
    WORKDIR c
    RUN pwd

    最终路径为/a/b/c,但是最好还是使用绝对路径

  • COPY 和ADD :Linux系统复制和增加命令,ADD在和COPY相同的基础上,ADD允许是一个URL,同时ADD的是一个压缩格式文档,将会解压复制

  • CMD和ENTRYPOINT:配置docker容器启动后执行的命令,每个dockerfile至少指定一个CMD命令或ENTERPOINT,两者都可以指定shell或exec函数调用的方式执行命令,默认dockerfile run启动镜像之后便会退出容器,需要一个长时间运行的命令,使得它一直运行。

    • CMD [“executable”,“param1”,“param2”]:运行一个可执行的文件并提供参数

    • CMD [“param1”,“param2”]:为ENTRYPOINT指定参数

    • CMD command param1 param2:以/bin/sh -c的方式执行命令

    • ENTRYPOINT [“executable”,“param1”,“param2”]:首选的执行格式

    • ENTRYPOINT command param1 param2:以/bin/sh -c的方式执行命令

    关于两者:

    • 每个dockerfile只能有一个CMD/ENTRYPOINT,超过一个CMD只有最后一个生效

    • dockerfile中同时设置CMD和ENTERPOINT,docker在build过程中会将CMD中指定的内容作为ENTERPOINT的参数

    • 如果docker启动需要运行多个启动命令,彼此之间可以使用*&&*分开,最后一个命令必须为无限运行的命令,否则启动的容器最后会被退出

  • VOLUME [DIR]:设置本地挂载目录,用于存放数据库和需要保持的数据

  • USER daemon:指定docker运行时的用户名或UID,后续的RUN也会使用指定用户

  • ONBUILD [INSTRUCTION]:配置当前所创建的镜像作为其他新创建镜像的基础镜像时,所执行的操作指令,也就是说当我们创建一个基于这个镜像的子镜像时,会先执行ONBUILD的指令

------ 本文结束 ------
您的支持将鼓励我继续创作