Dockerfile语法规则
INSTRUCTION argument,命令不区分大小写,但约定为全部大写;必须以FROM命令开始,命令出现的顺序就是被执行的顺序
- FROM:指定镜像基于哪个基础镜像创建,后续命令会基于该基础镜像。多次使用表示会创建多个镜像
FROM <image name>
- MAINTAINER:设置该镜像的作者
MAINTAINER <author name>
- RUN:执行的shell命令,该命令会在新创建的镜像上添加新的层面。
RUN <command> 如:cd target && tar -zxvf datastudio.tar.gz && chmod +x datastudio/bin/run-k8s.sh
- ADD:复制文件命令。参数:source 和 destination,destination 是容器内的路径。source 可以是 URL 或者是启动配置上下文中的一个文件
ADD <source> <destination>
- CMD:容器默认的执行命令。Dockerfile只允许使用一次CMD命令。多个CMD会抵消之前所有的命令,只有最后一个命令生效
CMD ["executable","param1","param2"] 或 CMD ["param1","param2"]
- EXPOSE:指定容器在运行时监听的端口。语法如下:
EXPOSE <port>
- ENTRYPOINT:配置给容器的可执行命令,类似于CMD,只允许一个ENTRYPOINT,多个只执行最后一个
ENTRYPOINT ["executable", "param1","param2"]
- WORKDIR:指定RUN、CMD与ENTRYPOINT 命令的工作目录
WORKDIR /path/to/workdir
- ENV:设置环境变量。键值对形式
ENV <key> <value>
- USER:给镜像运行时设置一个UID
USER <uid>
- VOLUME:授权访问从容器内到主机上的目录
VOLUME ["/data"]
一个实例:
FROM af.xxx.com.cn/docker-ssrd/jdk/jdk8 AS stage-unzip LABEL author="zhangsan@xxx.com.cn" # 设置环境变量和容器的 Work 目录 ENV APP_HOME /app ENV APP_TMP /app-tmp WORKDIR $APP_HOME # 复制代码和启动脚本 COPY ./target/*.zip ${APP_TMP}/ RUN unzip ${APP_TMP}/*.zip -d ${APP_HOME}/ FROM af.xxx.com.cn/docker-ssrd/jdk/jdk8 ENV APP_HOME /app WORKDIR $APP_HOME COPY --from=stage-unzip app/ ${APP_HOME} # 设定镜像的启动脚本 ENTRYPOINT [ "sh","/app/bin/loghub/bin/run-k8s.sh" ]