From 6799a1c1f8887d25e803dfc8e92df027ea3cd80a Mon Sep 17 00:00:00 2001 From: Endial Fang Date: Wed, 16 Aug 2023 18:06:03 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=88=87=E6=8D=A2=E4=B8=BA=E4=BD=BF?= =?UTF-8?q?=E7=94=A8Debian=2012?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile | 43 ++++++++++++++++++++++++++----------------- 1 file changed, 26 insertions(+), 17 deletions(-) diff --git a/Dockerfile b/Dockerfile index e241be5..71dde40 100644 --- a/Dockerfile +++ b/Dockerfile @@ -27,10 +27,10 @@ ARG REGISTRY_URL="docker.colovu.com/" ARG APT_SOURCE=aliyun # 编译镜像时指定用于加速的本地软件包存储服务器地址 -ARG LOCAL_URL="" +ARG LOCAL_URL="http://local.colovu.com/dist" # 0. 预处理 ====================================================================== -FROM --platform=${TARGETPLATFORM:-linux/amd64} ${REGISTRY_URL}colovu/dbuilder:11 as builder +FROM --platform=${TARGETPLATFORM:-linux/amd64} ${REGISTRY_URL}colovu/dbuilder:12 as builder # 声明需要使用的全局可变参数 ARG APP_NAME @@ -118,25 +118,28 @@ RUN set -eux; \ find /usr/local/${APP_NAME} -type f -executable -exec ldd '{}' ';' | \ awk '/=>/ { print $(NF-1) }' | \ sort -u | \ + xargs -r readlink -f | \ xargs -r dpkg-query --search 2>/dev/null | \ cut -d: -f1 | \ - sort -u >/usr/local/${APP_NAME}/runDeps; + sort -u >>/usr/local/${APP_NAME}/runDeps; # 1. 生成镜像 ===================================================================== -FROM --platform=${TARGETPLATFORM:-linux/amd64} ${REGISTRY_URL}colovu/debian:11 +FROM --platform=${TARGETPLATFORM:-linux/amd64} ${REGISTRY_URL}colovu/debian:12 -# 声明需要使用的全局可变参数 + +# 声明需要使用的全局可变参数(ARG声明的变量仅编译打包阶段有效) ARG APP_NAME ARG APP_VER ARG APT_SOURCE -# 镜像所包含应用的基础信息,定义环境变量,供后续脚本使用 +# 定义应用的基础信息变量(ENV声明的变量实例化后容器内有效) ENV APP_NAME=${APP_NAME} \ APP_VER=${APP_VER} \ APP_EXEC=${APP_NAME} \ APP_HOME_DIR=/usr/local/${APP_NAME} \ APP_DEF_DIR=/etc/${APP_NAME} +# 增加应用可执行文件及库文件搜索路径 ENV PATH="${APP_HOME_DIR}/sbin:${APP_HOME_DIR}/bin:${PATH}" \ LD_LIBRARY_PATH="${APP_HOME_DIR}/lib" @@ -149,20 +152,21 @@ LABEL \ # 从预处理过程中拷贝软件包(Optional),可以使用阶段编号或阶段命名定义来源 COPY --from=0 /usr/local/${APP_NAME} /usr/local/${APP_NAME} -# 拷贝应用使用的客制化脚本,并创建对应的用户及数据存储目录 +# 拷贝应用使用的客制化脚本 COPY customer / RUN set -eux; \ + \ + # 创建对应的用户及数据存储目录 + prepare_env; \ + /bin/bash -c "ln -sf /usr/local/${APP_NAME}/etc/${APP_NAME} /etc/"; \ + \ # 选择软件包源(Optional),以加速后续软件包安装 select_source ${APT_SOURCE}; \ \ # 安装依赖的软件包及库(Optional) install_pkg `cat /usr/local/${APP_NAME}/runDeps`; \ \ - # 项目资源准备 - prepare_env; \ - /bin/bash -c "ln -sf /usr/local/${APP_NAME}/etc/${APP_NAME} /etc/"; \ - \ # 执行后处理脚本,并验证安装的应用 override_file="/usr/local/overrides/overrides-${APP_VER}.sh"; \ [ -e "${override_file}" ] && /bin/bash "${override_file}"; \ @@ -171,10 +175,13 @@ RUN set -eux; \ # 默认提供的数据卷 VOLUME ["/srv/conf", "/srv/data", "/srv/cert", "/var/log"] -# 默认non-root用户启动,必须保证端口在1024之上 +# 默认使用gosu切换为新建用户启动,必须保证端口在1024之上 EXPOSE 8080 8443 -# 应用健康状态检查 +# 关闭基础镜像的健康检查 +#HEALTHCHECK NONE + +# 应用健康状态检查(需要使用 EXPOSE 定义的端口) #HEALTHCHECK --interval=30s --timeout=30s --retries=3 \ # CMD curl -fs http://localhost:8080/ || exit 1 HEALTHCHECK --interval=10s --timeout=10s --retries=3 \ @@ -186,8 +193,10 @@ USER 1001 # 设置工作目录 WORKDIR /srv/conf -# 容器初始化命令 -ENTRYPOINT ["/usr/local/bin/entry.sh"] +# 容器入口命令脚本,'/usr/local/bin/entry.sh' +ENTRYPOINT ["entry.sh"] + +# 应用程序的启动命令,可为应用程序可执行命令或脚本 +# 必须使用非守护进程方式运行,'/usr/local/bin/run.sh' +CMD ["run.sh"] -# 应用程序的启动命令,必须使用非守护进程方式运行 -CMD ["/usr/local/bin/run.sh"]