一、注释
Dockerfile中注释的方式和shell脚本一致,是以#开头,后面跟着注释信息,如:# First Dockerfile
二、指令
Dockerfile中的指令是以大写的指令名开始,后面跟着指令参数,如:RUN apt-get install -y nginx
三、常用的指令
1.FROM指令
语法:FROM <image>或FROM <image>:<tag>
示例:
1.使用ubuntu14.04作为基础镜像
FROM ubuntu:14.04
注意事项:
必须是已经存在的镜像(基础镜像),必须是Dockerfile中第一条非注释指令。
2.MAINTAINER 指令
指定镜像的作者信息,包含镜像的所有者和联系信息
语法:MAINTAINER <name>
示例:
1.制定镜像的作者名和email地址
MAINTAINER dormancypress "dormancypress@outlook.com"
3.RUN指令
指定当前镜像中运行的命令
语法:
shell模式:RUN <command>
以/bin/sh -c command这种形式的shell来执行指令
示例:
RUN echo hello
exec模式:RUN ["executable","param1","param2"]
可以使用其他形式的shell来执行指令
示例:
RUN["/bin/bash","-c","echo hello"]
注意:RUN指令时在镜像构建过程中运行的指令。
4.EXPOSE指令
EXPOSE <port>[<port>...]
指定运行该镜像的容器使用的端口
可以一个或者多个端口,也可以在一个Dockerfile中使用多个EXPOSE指令,虽然在镜像构建时指定了暴露的端口号,在容器运行时,仍然需要手动的指定容器的端口映射。
5.CMD指令
语法:
CMD [“executable”,“param1”,“param2”](exec模式)
CMD command param1 param2(shell 模式)
CMD[“param1”,“param2”](作为ENTRYPOINT指令的默认参数)
注意:CMD指令用于指定容器运行时的默认行为,在docker run指定的启动命令会将Dockerfile中CMD的命令覆盖。
6.ENTRYPOINT 指令
ENTRYPOINT [“executable”,“param1",“param2”](exec模式)
ENTRYPOINT command param1 param2(shell 模式)
注意:ENTRYPOINT 指令和CMD指令很相似,区别在于在docker run指定的启动命令不会将Dockerfile中ENTRYPOINT 的命令覆盖。
7.ADD指令
复制文件指令
ADD<src>...<dest>
ADD["<src>..."<dest>"](适用于文件路径中有空格的情况)
示例:
ADD ubuntu-xenial-core-cloudimg-amd64-root.tar.gz /
8.COPY指令
复制文件指令
语法:
COPY <src>...<dest>
COPY [“<src>",“<dest>”](适用于文件路径中有空格的情况)
示例:
1.使用本地编写的网页替换nginx的默认页
COPY index.html /usr/share/nginx/html/
注意:ADD指令和COPY指令的区别:ADD包含类似tar的解压功能如果单纯复制文件,Docker推荐使用COPY
9.VOLUME指令
定义匿名卷
语法:
VOLUME ["<路径1>", "<路径2>"...]
VOLUME <路径>
示例:VOLUME /data
10.WORKDIR 指令
在容器内部设置工作目录
语法:
WORKDIR <工作目录路径>
示例:WORKDIR /path/to/workdir
11.ENV指令
设置环境变量
语法:
ENV <key> <value>
ENV <key1>=<value1> <key2>=<value2>...
12.USER指令
指定当前用户
语法:
USER <用户名>
示例:
USER user USER uid
USER user:group USER uid:gid
USER user:gid USER uid:group
13.ONBUILD指令
镜像触发器,当一个镜像被其他镜像作为基础镜像时执行,会在构建过程中插入指令
语法:
ONBUILD [INSTRUCTION]