Dockerfile是由一系列基于DSL语法的指令构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像,使用docker build命令可以通过一份Dockerfile构建一个新的镜像
Dockerfile语法
-
注释
由#开头注释单行# commenting line
-
命令
command argument argument ...RUN apt-get -y wget
Dockerfile命令
FROM
- 指定docker的基础镜像,从该基础镜像构建新的容器
- 必须位于Dockerfile文件的第一行
MAINTAINER
- 声明该容器的作者,理论上可放在DockerFile任意位置
- 建议放在FROM后
RUN
- 以命令作为参数,并根据该命令创建镜像
- 该命令用于镜像构建阶段
CMD
- 以命令作为参数,容器运行后执行
- 默认可被docker run 命令中指定的命令参数覆盖
ENTRYPOINT
- 以命令为参数,容器运行后执行
docker run
命令中指定的命令参数将默认会作为参数传递给ENTRYPOINT指定的命令- 可以在运行容器时通过
docker run
的--entrypoint
标志覆盖 - 每个Dockerfile文件中只有最后一条ENTRYPOINT有效
WORKDIR
- 设置容器内部的工作目录
- ENTRYPOINT、CMD和
/
开头的命令都会在这个目录下执行 - 可用
docker run
的-w
标志覆盖
ADD
- 从构建目录下的 (由docker build命令指定) 原路径或者URL复制文件到容器内路径,两个参数分别为源文件路径和目标文件路径
- 如果源是一个URL,则会从该URL下载内容并复制到容器中
- 该命令会通过路径的尾字符是否以
/
结尾来判断文件源是目录还是文件 - 如果源文件为归档文件(gzip、bzip2、xz),在复制的同时会将归档文件解开
COPY
- COPY命令只能完成从构建上下复制本地文件的操作,不能从构建目录外提取文件或者解压
- 文件源路径必须是当前构建目录下的相对路径,因为构建目录将会在构建时被上传到docker守护进程执行构建,因此构建目录外的文件无法再构建时获取
- 任何由该指令创建的目录或文件的UID和GID都会设置为0
ENV
- 用于设置环境变量,两个参数分别为 key和value
- 该变量可以被dockerfile RUN指令中或容器内脚本使用
USER
- 用于设置运行镜像的用户,可以指定用户名或UID,以及组合上组或GID
- 不指定默认用户为root
VOLUME
- 为基于镜像创建的容器挂载一个宿主机上的卷
- 卷可以在容器间共享和重用
- 对卷的修改实时生效
- 对卷的修改不会对更新镜像产生影响
- 卷会一直存在直到没有任何容器再使用它
ONBULID
- 为镜像添加触发器,所有将该镜像当做基础镜像的镜像构建时会先执行该命令中指定的命令
- 该命令只能被继承一次
- FROM、MAINTAINER和ONBUILD指令不能用在ONBUILD指令中
构建命令
docker build
docker build [OPTIONS] PATH | URL | -
-
-m选项:设置内存最大值
-
-t选项:设置镜像的名字及标签
-
-f选项:指定要使用的Dockerfile路径
-
--no-cache选项:创建镜像的过程中不使用缓存
-
--force-rm选项:设置镜像过程中删除中间容器
example: docker build -t runoob/ubuntu:v1 .
命令中.
的含义
当构建的时候,由用户指定构建镜像的上下文路径,而 docker build 会将这个路径下所有的文件都打包上传给Docker引擎,整个构建的过程在Docker引擎中进行,因此构建时只能获取到构建上下文中的本地文件,而.
就是在指定构建的上下文为当前目录