FROM # 基础镜像,一切从这里开始构建
MAINTAINER # 镜像是谁写的, 姓名+邮箱
RUN # 镜像构建的时候需要运行的命令
ADD # 步骤,tomcat镜像,这个tomcat压缩包!添加内容 添加同目录
WORKDIR # 镜像的工作目录
VOLUME # 挂载的目录
EXPOSE # 保留端口配置
CMD # 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代。
ENTRYPOINT # 指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD # 当构建一个被继承 DockerFile 这个时候就会运行ONBUILD的指令,触发指令。
COPY # 类似ADD,将我们文件拷贝到镜像中
ENV # 构建的时候设置环境变量!
指令格式
- 注释:
#开头 为注释
- 指令
大写的指令名 后面紧接着参数
指令详解
FROM 指令
FROM 指令的参数有两种格式
FROM <image>
FROM <image>:<TAG>
注意:
- 镜像必须是已存在的镜像
- 后续指令基于这个基础镜像进行执行
- 必须是在Dockerfile中第一条非注释的指令
MAINTAINER 指令
指定镜像的作者信息,包含镜像的所有者和联系信息
RUN 指令
RUN 指令 指定当前镜像中运行的命令
命令包括两种参数模式:
- shell 模式
# 以/bin/sh -c 的模式来执行指令
RUN <command>
- exec 模式
# 可以指定其它形式的shell来运行指令
RUN ["executable","param1","param2"]
eg: RUN ["/bin/bash","-c","echo Hello World"]
镜像分层概念
每一个RUN指令都会在指令的上层创建一个新的镜像(中间层镜像)来运行执行的命令
EXPOSE 指令
EXPOSE 指令用于指定运行该镜像的容器使用的端口。可以指定一个或多个端口,也可以在一个Dockerfile中使用多个Expose指令。
虽然在镜像构建中指定了暴露的端口号,但是在容器运行的时候还是要手动指定端口映射。
在Dockerfile中使用 Expose指令,只是告诉 Docker改容器内的程序会使用特定的端口,但是出于安全的考虑,Docker并不会自动的打开端口,还是需要在使用时手动添加端口映射。
CMD 指令
CMD 指令 用来提供容器运行的默认命令,只有最后一个会生效,可覆盖。
RUN 指令:镜像构建过程中运行的命令,可以追加。
CMD 指令: 容器运行时运行的命令。docker run 命令指定了容器运行的命令,那么CMD命令就会被覆盖,不会再执行。
- shell模式
CMD command param1 param2...
- exec模式
CMD ["command","parma1","param2"...]
- 与 ENTRYPOINT 指令使用 提供 ENTRYPOINT 指令默认参数
CMD ["PARAM1","PARAM2"..]
ENTRYPOINT 指令
ENTRYPOINT 指令 与 CMD 指令相似,但是ENTRYPOINT 指令 不会被 docker run 命令覆盖。如果要覆盖 ENTRYPOINT 指令 ,则要在 docker run 命令中指定 ENTRYPOINT 选项。
ENTRYPOINT 和 CMD 指令的配合使用
- ENTRYPOINT 指令指定容器启动时的命令
- CMD 指令指定容器启动时命令的参数
ENTRYPOINT ["/usr/sbin/nginx"]
CMD ["-h"]
ADD 指令 和 COPY 指令
这两个指令都是将文件或目录 复制到 使用 Dockerfile 构建的镜像中,他们都支持两种参数,来源地址和目标地址。
ADD和COPY的资源是构建目录中的相对的路径,不建议用远程路径
远程URL路径: Docker 建议使用 wget 或者 curl 指令
ADD <src> <dest>
ADD ["<src>","<dest>"] (适用于文件路径中有空格的情况)
COPY <src> <dest>
COPY ["<src>","<dest>"] (适用于文件路径中有空格的情况)
src: 源文件或者源目录的相对路径
dest: 指定镜像中的绝对路径
- add 指令 包含类似 tar 提供的解压缩功能,
- 如果是单纯复制文件,建议使用 COPY 指令
VOLUME 指令
VOLUME 指令 可以为基于镜像创建的容器添加 卷 ,一个卷是可以存在一个或多个容器的特定目录,这个目录可以绕过联合文件系统,并提供共享数据,对数据持久化的功能。
VOLUME ["volume01","volume02"]
匿名挂载 相当于
-v /volume01 /volume02
当 docker run --volumes-from
docker run -it hcf_centos --name 'hcf_centos02' --volumes-from hcf_centos01 /bin/bash
新建的 hcf_centos02 容器的 volume 与 hcf_centos01 挂载在一起,实现数据共享
WORKDIR 指令
WORKDIR 指令 用来在从镜像创建新容器时,在容器内部设置工作目录, ENTRYPOINT 和 CMD 指定的命令会在这个目录下执行。可以使用 WORKDIR指令 在构建中为后续的指令指定工作目录
注意:WORKDIR通常使用的是绝对路径,如果是相对路径,工作路径会一级级传递下去。
ENV 指令
ENV 指令 用来设置环境变量,与WORKDIR指令 类似,ENV指令 可以作用于 构建过程 以及 运行过程中。
USER 指令
USER 指令 指定镜像以 指定的用户运行。默认使用root用户
ONBUILD 指令
ONBUILD 指令 镜像触发器,为镜像添加触发器,当这个镜像作为其它镜像的基础镜像时,会执行 触发器,当子镜像在构建时,会插入触发器的指令
网友评论