feat: 优化 Dockerfile

This commit is contained in:
2023-08-04 14:14:18 +08:00
parent 7ba5c9d5b2
commit 640e5d76db
+17 -69
View File
@@ -29,95 +29,43 @@ ARG APT_SOURCE=aliyun
# 编译镜像时指定用于加速的本地软件包存储服务器地址
ARG LOCAL_URL=""
# 0. 预处理 ======================================================================
FROM --platform=${TARGETPLATFORM:-linux/amd64} ${REGISTRY_URL}library/debian:${APP_VER}-slim as builder
# 声明需要使用的全局可变参数
ARG APP_NAME
ARG APP_VER
ARG REGISTRY_URL
ARG APT_SOURCE
ARG LOCAL_URL
# 拷贝默认的通用脚本文件
COPY prebuilds /
# 选择软件包源(Optional),以加速后续软件包安装
RUN select_source ${APT_SOURCE};
# 设置工作目录
WORKDIR /usr/local
#RUN install_pkg sudo wget curl git ca-certificates iproute2 net-tools nano dpkg gnupg \
# dirmngr apt-utils apt-transport-https lsb-release iputils-ping \
# build-essential cmake libcmocka-dev pkg-config libssl1.1 libssl-dev \
# libtool libltdl7 libltdl-dev
RUN install_pkg wget ca-certificates dpkg
# 下载并解压软件包
RUN set -eux; \
appVersion=1.16; \
appName=gosu-"$(dpkg --print-architecture | awk -F- '{ print $NF }')"; \
appKeys="0xB42F6819007F00F88E364FD4036A9C25BF357DD4"; \
[ ! -z ${LOCAL_URL} ] && localURL=${LOCAL_URL}/gosu; \
appUrls="${LOCAL_URL:-}/${appVersion} \
https://github.com/tianon/gosu/releases/download/${appVersion} \
"; \
download_pkg install ${appName} "${appUrls}" ; \
chmod +x /usr/local/bin/${appName};
# 1. 生成镜像 =====================================================================
FROM --platform=${TARGETPLATFORM:-linux/amd64} ${REGISTRY_URL}library/debian:${APP_VER}-slim
# 声明需要使用的全局可变参数
ARG APP_NAME
ARG APP_VER
ARG REGISTRY_URL
ARG APT_SOURCE
ARG LOCAL_URL
ARG TARGETARCH
LABEL \
"Version"="v${APP_VER}" \
"Description"="Docker image for Debian." \
"Github"="https://github.com/colovu/docker-debian" \
"Github"="https://github.com/colovu/docker-${APP_NAME}" \
"Vendor"="Endial Fang (endial@126.com)"
# 拷贝默认的通用脚本文件
COPY prebuilds /
# 从预处理过程中拷贝软件包
COPY --from=builder /usr/local/bin/gosu-${TARGETARCH} /usr/local/bin/gosu
# 选择软件包源(Optional),以加速后续软件包安装
RUN select_source ${APT_SOURCE}
# 增加 NSS_WRAPPER 支持
RUN install_pkg locales apt-utils tini libnss-wrapper curl
# 增加locales支持,并设置默认为 UTF-8;配置时区默认为 Shanghai
RUN set -eux; \
sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen; \
sed -i -e 's/# zh_CN.UTF-8 UTF-8/zh_CN.UTF-8 UTF-8/' /etc/locale.gen; \
locale-gen; \
update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8 LANGUAGE=en_US.UTF-8 LC_MESSAGES=POSIX; \
dpkg-reconfigure -f noninteractive locales; \
\
ln -fs /usr/share/zoneinfo/Asia/Shanghai /etc/localtime; \
dpkg-reconfigure -f noninteractive tzdata;
ENV LANG=en_US.UTF-8 \
LANGUAGE=en_US.UTF-8 \
LC_ALL=en_US.UTF-8
# 执行预处理脚本,并验证安装的软件包
RUN set -eux; \
gosu nobody true; \
gosu --version; \
tini --version;
WORKDIR /
# 更新软件源地址
select_source ${APT_SOURCE}; \
\
# 安装常用的软件包
install_pkg gosu dumb-init curl locales; \
\
# 配置 locale 为 en_US.UTF-8
sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen; \
locale-gen; \
update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8 LANGUAGE=en_US.UTF-8 LC_MESSAGES=POSIX; \
dpkg-reconfigure -f noninteractive locales; \
\
# 设置时区为 Shanghai
ln -fs /usr/share/zoneinfo/Asia/Shanghai /etc/localtime; \
dpkg-reconfigure -f noninteractive tzdata;
# 应用程序的服务命令,必须使用非守护进程方式运行。如果使用变量,则该变量必须在运行环境中存在(ENV可以获取)
CMD []