Files
alpine/Dockerfile
T

102 lines
3.4 KiB
Docker

# Ver: 1.4 by Endial Fang (endial@126.com)
#
# 预处理 =========================================================================
ARG registry_url="registry.cn-shenzhen.aliyuncs.com"
FROM ${registry_url}/colovu/abuilder as builder
# sources.list 可使用版本:default / tencent / ustc / aliyun / huawei
ARG apt_source=aliyun
# 编译镜像时指定用于加速的本地服务器地址
ARG local_url=""
WORKDIR /usr/local
# 选择软件包源(Optional),以加速后续软件包安装
RUN select_source ${apt_source};
# 下载并解压软件包
RUN set -eux; \
appVersion=1.12; \
appName=gosu-"$(dpkg --print-architecture | awk -F- '{ print $NF }')"; \
appKeys="0xB42F6819007F00F88E364FD4036A9C25BF357DD4"; \
[ ! -z ${local_url} ] && localURL=${local_url}/gosu; \
appUrls="${localURL:-} \
https://github.com/tianon/gosu/releases/download/${appVersion} \
"; \
download_pkg install ${appName} "${appUrls}" -g "${appKeys}"; \
chmod +x /usr/local/bin/${appName};
# 增加 NSS_WRAPPER 支持
RUN set -ex; \
mkdir -p /usr/local/include; \
echo -e "#ifndef NSS__H\n#define NSS__H\n\nenum nss_status\n{\n\tNSS_STATUS_TRYAGAIN = -2,\n\tNSS_STATUS_UNAVAIL,\n\tNSS_STATUS_NOTFOUND,\n\tNSS_STATUS_SUCCESS,\n\tNSS_STATUS_RETURN\n};\n\n#endif\n" > /usr/local/include/nss.h; \
appVersion=1.1.11; \
appName=nss_wrapper-${appVersion}.tar.gz; \
[ ! -z ${local_url} ] && localURL=${local_url}/cwrap; \
appUrls="${localURL} \
https://ftp.samba.org/pub/cwrap \
"; \
download_pkg unpack ${appName} "${appUrls}"; \
mkdir nss_wrapper-${appVersion}/build; \
(cd nss_wrapper-${appVersion}/build; \
cmake .. -DUNIT_TESTING:BOOL=ON; \
make -j "$(nproc)"; \
find . -name nss.h -print; \
# make -j "$(nproc)" CTEST_OUTPUT_ON_FAILURE=TRUE test; \
make install);
# 镜像生成 ========================================================================
FROM alpine:3.12
# sources.list 可使用版本:default / tencent / ustc / aliyun / huawei
ARG apt_source=aliyun
ENV APP_NAME=alpine-os
LABEL \
"Version"="v3.12" \
"Description"="Docker image for Alpine OS v3.12." \
"Dockerfile"="https://github.com/colovu/docker-alpine" \
"Vendor"="Endial Fang (endial@126.com)"
# 拷贝默认的通用脚本文件
COPY prebuilds /
# 从预处理过程中拷贝软件包
COPY --from=builder /usr/local/lib64/libnss_wrapper.so /usr/lib/
COPY --from=builder /usr/local/bin/gosu-amd64 /usr/local/bin/gosu
# 选择软件包源(Optional),以加速后续软件包安装
RUN select_source ${apt_source}
# 配置时区默认为 Shanghai
RUN install_pkg bash tini tzdata; \
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime;
# 增加musl版本的locales支持,并设置默认为 UTF-8
RUN apk add --no-cache libintl; \
apk add --no-cache --virtual .locale_build git cmake make musl-dev gcc gettext-dev; \
git clone https://gitlab.com/rilian-la-te/musl-locales; \
cd musl-locales && cmake -DLOCALE_PROFILE=OFF -DCMAKE_INSTALL_PREFIX:PATH=/usr . && make && make install; \
cd .. && rm -r musl-locales; \
apk del .locale_build; \
rm -rf /var/cache/apk/*;
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 /
# 应用程序的服务命令,必须使用非守护进程方式运行。如果使用变量,则该变量必须在运行环境中存在(ENV可以获取)
CMD []