diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..1cc657c --- /dev/null +++ b/Dockerfile @@ -0,0 +1,86 @@ +# Ver: 1.9 by Endial Fang (endial@126.com) +# + +# 默认变量 ======================================================================== +# 该部分变量为系统根据编译命令默认设置 + +# `TARGETPLATFORM`:构建后的目标平台信息。如 `linux/amd64`,`linux/arm/v7`,`windows/amd64` +# `TARGETOS`:目标平台信息(TARGETPLATFORM)中的操作系统部分,如:`linux`、`windows` +# `TARGETARCH`:目标平台信息(TARGETPLATFORM)中的平台架构部分,如:`amd64`、`arm` +# `TARGETVARIANT`:目标平台信息(TARGETPLATFORM)中的版本变体部分,如:`v7` +# `BUILDPLATFORM`:用于构建的节点平台信息 +# `BUILDOS`:用于构建的节点平台信息(BUILDPLATFORM)中的操作系统部分 +# `BUILDARCH`用于构建的节点平台信息(BUILDPLATFORM)中的平台架构部分 +# `BUILDVARIANT`用于构建的节点平台信息(BUILDPLATFORM)中的版本变体部分 + +# 可变参数 ======================================================================== +# 该部分变量,在编译命令中通过 `--build-arg` 传入;如果未设置,则使用下面对应的默认值 + +# 设置当前应用名称及版本 +ARG APP_NAME=golang +ARG APP_VER=1.20.7 + +# 设置默认仓库地址,默认为本地仓库;定义时需要包含末尾的`/` +ARG REGISTRY_URL="docker.colovu.com/" + +# 设置 apt-get 源:default / ustc / aliyun +ARG APT_SOURCE=aliyun + +# 编译镜像时指定用于加速的本地软件包存储服务器地址 +ARG LOCAL_URL="http://local.colovu.com/dist" + +# 0. 预处理 ====================================================================== +FROM --platform=${TARGETPLATFORM:-linux/amd64} ${REGISTRY_URL}colovu/dbuilder:12 as builder + +# 声明需要使用的全局可变参数 +ARG APP_NAME +ARG APP_VER +ARG LOCAL_URL +ARG TARGETARCH + +# 下载并解压软件包 +# https://golang.google.cn/dl/go1.20.7.linux-amd64.tar.gz +# https://golang.google.cn/dl/go1.20.7.linux-arm64.tar.gz +RUN set -eux; \ + appName=go${APP_VER}.linux-${TARGETARCH}.tar.gz; \ + [ -n ${LOCAL_URL} ] && localURL=${LOCAL_URL}/golang; \ + appUrls="${localURL:-} \ + https://golang.google.cn/dl \ + "; \ + download_pkg unpack ${appName} "${appUrls}"; \ + mv "/tmp/go" /usr/local/${APP_NAME}; + +# 1. 生成镜像 ===================================================================== +FROM --platform=${TARGETPLATFORM:-linux/amd64} ${REGISTRY_URL}colovu/debian:12 + +# 声明需要使用的全局可变参数(ARG声明的变量仅编译打包阶段有效) +ARG APP_NAME +ARG APP_VER + +# 定义应用的基础信息变量(ENV声明的变量实例化后容器内有效) +ENV APP_NAME=${APP_NAME} \ + APP_VER=${APP_VER} \ + APP_EXEC=go \ + APP_BASE=/usr/local/${APP_NAME} + +# 增加应用可执行文件及库文件搜索路径 +ENV PATH="${PATH}:/usr/local/${APP_NAME}/bin" + +LABEL \ + "Version"="v${APP_VER}" \ + "Description"="Docker image for ${APP_NAME}." \ + "Github"="https://github.com/colovu/docker-${APP_NAME}" \ + "Vendor"="Endial Fang (endial@126.com)" + +# 从预处理过程中拷贝软件包(Optional),可以使用阶段编号或阶段命名定义来源 +COPY --from=builder /usr/local/${APP_NAME} /usr/local/${APP_NAME} + +RUN set -eux; \ + \ + # 执行后处理脚本,并验证安装的应用 + ${APP_EXEC} version; + +# 应用程序的启动命令,可为应用程序可执行命令或脚本 +# 必须使用非守护进程方式运行 +CMD [] +