跳转至

dockerfile

Dockerfile 介绍

它是一个文本文件,镜像文件构建脚本 由一些列用于根据基础镜像构建新的镜像文件的专用指令序列组成

Dockerfile command

  • ADD
  • COPY
  • ENV
  • EXPOSE
  • FROM
  • MAINTANIER
  • LABEL
  • STOPSIGNAL
  • USER
  • VOLUME
  • WORKDIR

FROM

必须是第一个非注释行,用于指定所用到的基础镜像

语法格式
  • FROM [:]
  • FROM @

注意: 尽量不要在一个dockerfile中使用多个FROM指令

MAINTANIER

用于提供信息的指令,用于让作者提供本人的信息 建议紧跟在FROM以后,不限制出现的位置

语法格式

MAINTANIER

COPY

用于docker主机复制文件指向正在创建的映像文件中

语法格式
  • COPY SRC DEST
  • COPY "SRC"... "DEST"
解释
  • src: 要复制的源文件或目录,支持使用通配符
  • dest: 目录路径,正在创建的镜像文件的文件系统路径,建议使用绝对路径,否则,则相对于WORKDIR而言,所有复制生成的目录文件的uid和gid均为0
注意
  • src 必须是build上下文中的路径,因此不能使用类似"../some"的路径
  • src 如果是目录,递归复制会自动行,如果有多个src ,包括src上使用了通配符这种情况,此时,dest必须是目录,而且必须以/结尾
  • dest 如果事先不存在,它将被自动创建,包括其父目录

ADD

类似于COPY指令,额外还支持复制tar文件,以及URL语法

语法格式
  • ADD SRC DEST
  • ADD "SRC" ... "DEST"
注意
  • 以url格式指定的源文件,下载完成后其目标文件的权限为600
  • 如果src是url,且dest不以/结尾,则src指定的文件将被下载并直接被创建为dest, 如果dest以/结尾,则url指定的文件被下载至dest中,并保留原名
  • 如果src是一个tar文件,它将被展开为一个目录,其行为类似于tar -x 命令,但是如果通过url下载到的文件是tag格式的,是不会自动被展开的

ENV

定义环境变量,此变量可被当前dockerfile文件中的其它指令调用 调用格式为$varaible_name或者${variable_name}

语法格式
  • ENV 一次定义一个变量
  • ENV = ... 一次定义多个变量 如果value中有空白字符,如要用\字符进行转义
注意
  • ENV 定义的环境变量在镜像运行的整个过程中一直存在
  • 因此可以使用inspect命令查看,甚至可以再docker run启动此镜像时候,使用--env选项来修改制定的环境值

USER

指定运行镜像时候, 或运行Dockerfile文件中的任何RUN,CMD,/ENTRYPORINT指定的程序时的用户名或者UID

语法格式
  • USER |
注意
  • UID 应该使用/etc/passwd 文件存在的用户的UID,否则,docker run可能会出现错误

WORKDIR

用于为Dockerfile中所有的指令指定工作目录

语法格式
  • WORKDIR
注意
  • WORKDIR 可出现多次,也可使用相对路径,此时表示相对于前一个WORKDIR指令指定的路径
  • WORKDIR 还可以调用ENV定义的环境变量的值

VOLUME

用于目标镜像文件中创建一个挂载点的目录,用于挂载主机上的卷或者其它容器的卷

语法格式
  • VOLUME
  • VOLUME ["" .... ]

RUN

于指定docker build命令过程中运行的命令

语法格式
  • RUN
  • RUN ["executeable" ,"" ,"" ]
注意
  • 每个run命令就额外加一层,所以建议一个RUN指令执行多个命令

CMD

类似于RUN指令,用于运行程序,但二者运行的是场景不同 CMD在docker run时运行而非docker build,CMD指令的首 要目的为了在于为启动的容器指定默认要运行的程序程序 运行结束, 容器也就结束,不过,CMD指令指定的程序可被 docker run命令行参数中执行的要运行的程序所覆盖

语法格式
  • CMD
  • CMD ["executeable" ,"" ,"" ]
  • CMD ["",""]
注意
  • 第三种为ENTRYPOINT指令指定的程序的默认参数
  • 如果dockefile中存在多个CMD指令,只会最后一个生效

ENTRYPOINT

类似于CMD,为容器指定默认的启动程序,不会被docker run 所运行的程序所覆盖.而且这些命令行参数,会被当作参数送 给ENTRYPOINT指令指定的程序但是如果运行docker run时, 使用了 --entrypoint选项,此选项的参数可当作要运行的程序覆盖 ENTRYPOINT指令指定的程序

语法格式
  • ENTRYPOINT
  • ENTRYPOINT ["executeable" ,"" ,"" ]

EXPOSE

用于为容器指定要暴露的端口

语法格式
  • EXPOSE [/] []
  • PROTOCAL: 默认为tcp,可以是tcp或者udp
例如 eg:
  • EXPOSE 11211/tcp 11211/udp

ONBUILD

定义触发器

当前dockerfile构建出的镜像被用作基础镜像,去构建其他镜像的时候,ONBUILD指令指定的操作才会被执行

语法格式
  • ONBUILD
  • ONBUILD ADD my.conf /etc/mysql/my.conf
注意

ONBUILD不能自我嵌套,且不会触发FROM和MAINTERNATER指令

docker command

docker build -t bdshello  .     #创建image镜像构建Dockerfile 
docker run -p 4000:80 bdshello  #启动bdshello容器 映射端口
docker run -d -p 4000:80 bdshello  #后台启动
docker container ls             #显示所有启动的容器
docker container ls -a          #显示所有容器包括不启动的
docker container stop <hash id>     #优雅停止容器 
docker container kill  <hash id>    #强制停止容器
docker container rm <hash id>       #移除容器 
docker container rm  $(docker container ls -a -q)  #移除所有容器 
docker image ls -a                #列出所有镜像 
docker image rm <image id>        #删除镜像
docker image rm $(docker image ls -a -q)  #删除所有镜像