FROM我们可以参照tomcat的dockerfile的编写 点击,也可以参照菜鸟教程的解析 点击
基础镜像,当前新镜像是基于哪个镜像的,指定一个已经存在的镜像作为模板,第一条必须是from
MAINTAINER镜像维护者的姓名和邮箱地址
RUN容器构建时需要运行的命令
两种格式 shell格式 exec格式 EXPOSE当前容器对外暴露出的端口
WORKDIR指定在创建容器后,终端默认登陆的进来工作目录,一个落脚点
如果我们没有指定当前关键字,那么就下启动的目录下运行如果指定了,那么就会在指定的目录下运行容器实例 USER
指定该镜像以什么样的用户去执行,如果都不指定,默认是root
ENV相当于定义变量: 用来在构建镜像过程中设置环境变量
# 定义 ENV 变量名 值 # 使用 $变量名
ADD关键字之后可以直接跟变量名
将宿主机目录下的文件拷贝进镜像且会自动处理URL和解压tar压缩包
COPY# 语法一 COPY src dest # 语法二 COPY ["src", "dest"]
拷贝文件和目录到镜像中,容器内的指定路径,该路径不用事先建好,路径不存在的话,会自动创建
VOLUME容器数据卷,用于数据保存和持久化工作
CMD指定容器启动后的要干的事情,类似于RUN
第一种方式shell格式
CMD <命令>第二种方式
推荐使用第二种方式,执行过程比较明确。第一种格式实际上在运行的过程中也会自动转换成第二种格式运行,并且默认可执行文件是 sh
exec
CMD ["<可执行文件或命令>","注意"," ",...] CMD [" "," ",...] # 该写法是为 ENTRYPOINT 指令指定的程序提供默认参数
Dockerfile 中可以有多个 CMD 指令,但只有最后一个生效,CMD 会被 docker run 之后的参数替换和RUN命令的区别
CMD是在docker run 时运行RUN是在 docker build时运行 ENTRYPOINT
用来指定一个容器启动时要运行的命令类似于 CMD 指令,但是ENTRYPOINT不会被docker run后面的命令覆盖,而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序 语法
ENTRYPOINT [""," "," ",...]
可以搭配 CMD 命令使用:一般是变参才会使用 CMD ,这里的 CMD 等于是在给 ENTRYPOINT 传参
也就是说当我们指定了ENTRYPOINT之后,CMD的含义就发生了变化,不再是直接运行命令,而是将CMD命令的内容作为参数传递给ENTRYPOINT 指令最终会组合成 ENTRYPOINT " 在执行docker run的时候可以指定 ENTRYPOINT 运行所需的参数如果 Dockerfile 中如果存在多个 ENTRYPOINT 指令,仅最后一个生效FROM nginx
ENTRYPOINT ["nginx", "-c"] # 定参
CMD ["/etc/nginx/nginx.conf"] # 变参
注意



