简介
Dockerfile可以认为是Docker镜像的描述文件,是由一系列命令和参数构成的脚本。主要作用是用来构建docker镜像的构建文件。
dockerfile执行build命令时,是从上倒下依次执行的,dockerfile的基本组成部分如下。
主要部分 | 代表命令 |
---|---|
基础镜像信息 | FROM |
维护者信息 | MAINTAINER |
镜像操作指令 | RUN、COPY、ADD、EXPOSE、WORKDIR、ONBUILD、USER、VOLUME、ENV等 |
容器启动时执行指令 | CMD、ENTRYPOINT |
dockerfile常用命令
保留字 | 作用 |
---|---|
FROM | 当前镜像是基于那个镜像的 |
MANTAINER | 镜像维护者的姓名和邮箱 |
EXPORT | 当前容器对外暴漏出的端口 |
WORKDIR | 指定在创建容器后,终端默认登陆进来的工作目录 |
ENV | 用来在构建镜像(docker build)过程中设置环境变量 |
ADD | 将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar包 |
COPY | 类似于ADD,拷贝文件和目录到镜像中,将从镜像上下文目录中<源路径>的文件/目录复制到新的一层的镜像内的<目标路径> |
VOLUME | 容器数据卷,用于数据保存和持久化工作 |
RUN | 构建镜像时需要的运行命令,用于指定 docker build 过程中要运行的命令。 |
CMD | 指定一个容器启动时要运行的命令,Dockerfile中可以有多个CMD命令,但只有最后一个生效,CMD 在docker run 时运行,而非docker build; |
ENTRYPOINT | 指定一个容器启动时要运行的命令,ENTRYPOINT的目的和CMD一样,都是在指定容器启动程序及其参数 |
FROM
功能为指定基础镜像,并且必须是第一条指令。
如果不以任何镜像为基础,那么写法为:FROM scratch。
同时意味着接下来所写的指令将作为镜像的第一层开始
语法:
FROM <image>
FROM <image>:<tag>
FROM <image>:<digest>
三种写法,其中和 是可选项,如果没有选择,那么默认值为latest
MANTAINER
镜像维护者的姓名和邮箱(废弃)
语法:
MAINTAINER <name>
EXPORT
用于指定构建的镜像在运行为容器时对外暴露的端口
语法:
EXPORT 80/tcp 如果没有显式指定则默认暴露都是tcp
WORKDIR
用来为Dockerfile中的任何RUN、CMD、ENTRYPOINT、COPY和ADD指令设置工作目录,如果WORKDIR不存在,即使它没有在任何后续Dockfile指令中使用,它也将被创建;
语法:
WORKDIR /path/to/workdir
WORKDIR /a
注意:WORKDIR指令可以在Dockerfile中多次使用,如果提供了相对路径,则该路径将于先前WORKDIR指令的路径行对
ENV
用来为构建镜像设置环境变量,这个值将出现在构建阶段中所有后续的环境中。
语法:
ENV <key> <value>
ENV <key>=<value>
ADD
用来从context上下文复制新文件、目录或远程文件url,并将它们添加到位于指定路径的映射文件系统中。
语法:
ADD hom* /mydir/ 通配符添加多个文件
ADD home?.txt /mydir/ 通配符添加
ADD test.txt relativeDir/ 指定相对路径
ADD test.txt /absoluteDir/ 指定绝对路径
COPY
用来将context目录中指定文件复制到镜像的指定目录中
语法:
COPY src desc
COPY ["<src>",..."<dest>"]
VOLUME
可实现挂载功能,可以将内地文件夹或者其他容器种得文件夹挂在到这个容器种
语法:
VOLUME ["/data"]
说明:
["/data"]可以是一个JsonArray ,也可以是多个值。所以如下几种写法都是正确的
VOLUME ["/var/log/"]
VOLUME /var/log
VOLUME /var/log /var/db
RUN
构建镜像时需要的运行命令,用于指定 docker build 过程中要运行的命令。
语法:
RUN <command>
RUN echo hello
RUN ["executable", "param1", "param2"]
RUN ["/bin/bash", "-c", "echo hello"]
CMD
指定一个容器启动时要运行的命令,Dockerfile中可以有多个CMD命令,但只有最后一个生效,
语法:
CMD ["executable", "param1", "param2"]
CMD ["param1", "param2"]
CMD command param1 param2
ENTRYPOINT
可实现挂载功能,可以将内地文件夹或者其他容器种得文件夹挂在到这个容器种
语法为:
VOLUME ["/data"]
说明:
["/data"]可以是一个JsonArray ,也可以是多个值。所以如下几种写法都是正确的
VOLUME ["/var/log/"]
VOLUME /var/log
VOLUME /var/log /var/db
构建命令
在包含Dockerfile的文件夹下运行如下命令
docker build -t my:lastest .