基本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

  1. WORKDIR /tmp
  2. COPY test.txt .

ENTRYPOINT

ENTRYPOINT指令,往往用于设置容器启动后的第一个命令,这对一个容器来说往往是固定的。
CMD指令,往往用于设置容器启动的第一个命令的默认参数,这对一个容器来说可以是变化的。
docker run 往往用于给出替换CMD的临时参数。

模式

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

引用

https://www.5axxw.com/questions/content/f3p59d