Dockerfile 镜像构建示例
Dockerfile 是一个用于编写 Docker 镜像生成过程的文件,其有特定的语法。
基本操作:在一个文件目录中,拥有一个 Dockerfile 文件,其内容满足语法要求,在此路径下执行命令 docker build --tag name:tag .
,就可构建一个镜像
注:alpine 最小、slim 稍大、默认的最大,Repository 提供的基础镜像,建议采用使用 alpine
openjdk:<version>
openjdk:<version>-slim
openjdk:<version>-alpine
【常规示例】
| # From 基础镜像
FROM openjdk:8-alpine
# 工作目录[可选]
WORKDIR /home/xx
# 定义镜像创建者[可选]
LABEL maintainer=user@example.com
# 前端界面路径[可选]
# RUN mkdir -p /opt/java/front/spring-boot-example-web
# 后端程序路径
WORKDIR /opt/java/spring-boot-example
COPY ./*.jar ./spring-boot-example.jar
COPY ./libsigar-amd64-linux.so /usr/lib/
# 设置环境或者编码utf8[可选]
#jdk enviroment
ENV JAVA_HOME=/usr/java/jdk1.8.0_231
ENV JRE_HOME=/usr/java/jdk1.8.0_231/jre
ENV CLASSPATH=$JAVA_HOME/lib:$JAVA_HOME/jre/lib
ENV PATH=$JAVA_HOME/bin:$PATH
# 设置端口
EXPOSE 8888
# 设置容器中用户组和用户[可选]
RUN set -eux && addgroup --gid 1000 DemoUser && adduser -S -u 1000 -g DemoUser -h /opt/java/ -s /bin/sh -D DemoUser
# 采用此用户进行操作怕[可选]
USER Rambo
ENTRYPOINT ["java", "-jar", "./spring-boot-example.jar"]
# 执行命令
CMD ["java", "-jar", "/xxx/xxx.jar"]
或者
CMD ["/data/xxx.sh"]
|
【示例一】设置容器正确时区
| FROM openjdk:8-alpine
# 效果一样,调用或下载安装
ENV TZ=Asia/Shanghai
RUN set -eux \
&& ln -snf /usr/share/zoneinfo/${TZ} /etc/localtime \
&& echo ${TZ} > /etc/timezone
ENV TZ=Asia/Shanghai
RUN set -eux \
&& apk add --no-cache --update tzdata \
&& ln -snf /usr/share/zoneinfo/${TZ} /etc/localtime \
&& echo ${TZ} > /etc/timezone \
&& rm -rf /var/cache/apk/*
|
【示例二】非 root 用户权限启动应用程序
| FROM openjdk:8-alpine
# 全称与简写效果是一样的,具体要求:创建用户组/用户、指定家目录和指令环境,并以新用户登陆操作
RUN set -eux \
&& addgroup --gid 1000 userName \
&& adduser --system --uid 1000 --gid 1000 \
--home=opt/java/ --shell=/bin/sh \
--disabled-password userName
USER userName
RUN set -eux \
&& addgroup --gid 1000 userName \
&& adduser -S -u 1000 -g userName \
-h /opt/java/ -s /bin/sh -D userName
USER userName
|