基本Dockerfile
下面是一个可以构建常用jar文件的Dockerfile
WORKDIR
https://blog.csdn.net/qq_33801641/article/details/121122328
- 切换到镜像中的指定路径,设置工作目录
- 在 WORKDIR 中需要使用绝对路径,如果镜像中对应的路径不存在,会自动创建此目录
- 一般用 WORKDIR 来替代 RUN cd
&& 切换目录进行操作的指令
WORKDIR 指令为 Dockerfile 中跟随它的任何 RUN、CMD、ENTRYPOINT、COPY、ADD 指令设置工作目录
- 如果 WORKDIR 不存在,即使它没有在任何后续 Dockerfile 指令中使用,它也会被创建
示例:将宿主机的 test.txt 文件复制到镜像的 /tmp/test.txt
WORKDIR /tmpCOPY test.txt .
ENTRYPOINT
ENTRYPOINT指令,往往用于设置容器启动后的第一个命令,这对一个容器来说往往是固定的。
CMD指令,往往用于设置容器启动的第一个命令的默认参数,这对一个容器来说可以是变化的。
docker run
模式
ENTRYPOINT的指令有exec模式(有[]的数组形式)和shell模式(没有[]),其中exec模式不会替换变量
exec模式
该模式不会替换变量,要使用变量在shell模式使用
ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom","-Dfile.encoding=UTF-8", "-jar", "/home/xxx.jar"]
shell模式
#使用变量
ENTRYPOINT java -Djava.security.egd=file:/dev/./urandom -Dfile.encoding=UTF-8 -jar ${proj_dire}/${jar_name}
使用变量
WORKDIR 指令可以使用前面 ENV 设置的环境变量
#定义
ENV DIRPATH /path
#使用
WORKDIR $DIRPATH /$DIRNAME
传递参数
https://blog.csdn.net/huangjiazhi_/article/details/107204137
使用—build-arg指令配合ARG使用,指令
docker build -f /home/jar_file/Dockerfile -t xxx:latest . --build-arg port=8020 --build-arg proj_dire="/home/jar_file" --build-arg jar_name=xxx.jar
也可以在docker run -e传入
docker run --name=blade-gateway -e port=8020 -e proj_dire=/home/jar_file -e jar_name=xxx.jar -p 8020:8020 -d -it blade-gateway
Dockerfile中使用:
FROM jdk8_image:V1.0
MAINTAINER liuyang "123@q.c"
ENV TimeZone=Asia/Shanghai
RUN ln -sf /usr/share/zoneinfo/$TimeZone /etc/localtime && echo $TimeZone > /etc/timezone
# 定义传入的参数
ARG port
ARG proj_dire
ARG jar_name
ENV proj_dire_env $proj_dire
ENV jar_name_env $jar_name
# 工作目录
WORKDIR $proj_dire
# 对外暴露端口
EXPOSE $port
# 将jar添加到容器
ADD $jar_name $jar_name
# 启动命令,该节点使用需要将参数传递到ENV节点
ENTRYPOINT java -Djava.security.egd=file:/dev/./urandom -Dfile.encoding=UTF-8 -jar ${proj_dire_env}/${jar_name_env}
# 启动环境
CMD ["--server.port=${port}"]
ENTRYPOINT节点使用需要将参数传递到ENV节点
ENV jar_name_env $jar_name
