1. 基础
1.1 概念:
Dockerfile是一个包含用于组合镜像命令的文本文档,Docker通过读取Dockerfile中指令自动生成镜像。
1.2 基本结构
* 基础镜像信息
* 维护者信息
* 镜像操作指令
* 容器启动时执行的命令
1.3 说明
* Docker以从上到下的顺序执行Dockerfile指令
* 为了指定基本镜像,第一条指令必须为FROM
* 一个声明以#开头,被视为注释
* 可以使用RUN、CMD、FROM、EXPOSE、ENV、EXTRYPOINT等指令
2. 指令
2.1 FROM
描述:
指定基础镜像,后序的指令都依赖于该指令指定的image,必须为第一个指令。
格式:
FROM <image>
FROM <image>:<tag>
示例:
FROM mysql:8.0
注意:
* tag是可选的,如果不加该参数会使用latest版本的基础镜像
* 基础镜像里包含一些基础环境,例如:jdk、skywalking等
2.2 MAINTAINER
描述:
维护者信息
格式:
MAINTINER <name>
示例:
MAINTINER gxn
2.3 RUN
描述:
构建镜像时执行的命令
shell执行:
格式:
RUN <command>
示例:
RUN mkdir -p /wy/youzanyun
2.4 WORKDIR
描述:
进入工作目录,类似于cd命令
格式:
WORKDIR /path
示例:
WORKDIR /wy/youzanyun
2.4 EXPOSE
描述:
指定与外界交互的端口
格式:
EXPOSE <port> [<port>...]
示例:
EXPOSE 80
EXPOSE 80 443
注意:
EXPOSE并不会让容器的端口访问到主机,要访问的话需要在docker run运行
容器时通过-p来发布这些端口
2.5 ADD
描述:
将本地文件添加到容器中,tar类型的文件会自动解压,可以访问网络资源,类似
wget。
格式:
ADD <src>... <dest>
示例:
ADD ./target/youzanyun.jar ./app.jar
2.6 COPY
描述:
功能类似于ADD,但是不会自动解压文件,不能访问网络。
2.7 ENV
描述:
设置环境变量
格式:
ENV <key> <value>
# 设置一个变量,key之后所有的内容均被视为value的组成部分
ENV <key>=<value>...
# 可以设置多个变量
示例:
ENV SPRING_PROFILES_ACTIVE=dev APP_NAME=wy_youzanyun
2.8 ENTRYPOINT
描述:
格式:
ENTRYPOINT command param1 param2
示例:
ENTRYPOINT java -Dspring.profiles.active=dev -jar app.jar
注意:
* docker run 执行命令的时候不会覆盖ENTRYPOINT,而Docker run命令
中指定的任何参数,都会被当成参数再次传递给ENTRYPOINT。
* Dockerfile只允许有一个ENTRYPOINT命令,多指定时会覆盖前面的设置,
而只执行最后的ENTRYPOINT指令。