Skip to content

Commit f865e23

Browse files
committed
fix: dockerfile优化
1 parent c636f75 commit f865e23

File tree

1 file changed

+44
-22
lines changed

1 file changed

+44
-22
lines changed

Dockerfile

Lines changed: 44 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,27 @@
1+
# 使用多阶段构建优化镜像大小
12
FROM python:3.11-alpine3.19 AS builder
23

4+
# 减少 COPY 操作的次数
35
COPY ./package_list.txt /tmp/
4-
COPY ./requirements.txt /tmp/
5-
RUN apk add --no-cache --virtual .build-deps \
6-
libffi-dev \
7-
gcc \
8-
musl-dev \
9-
libxml2-dev \
10-
libxslt-dev \
11-
&& apk add --no-cache $(cat /tmp/package_list.txt) \
12-
&& curl https://rclone.org/install.sh | bash \
13-
&& if [ "$(uname -m)" = "x86_64" ]; then ARCH=amd64; elif [ "$(uname -m)" = "aarch64" ]; then ARCH=arm64; fi \
14-
&& curl https://dl.min.io/client/mc/release/linux-${ARCH}/mc --create-dirs -o /usr/bin/mc \
6+
7+
# 安装依赖,安装 rclone 和 mc,清理无用文件
8+
RUN apk add --no-cache $(cat /tmp/package_list.txt) \
9+
&& curl -sSL https://rclone.org/install.sh | bash \
10+
&& ARCH=$(case "$(uname -m)" in x86_64) echo "amd64";; aarch64) echo "arm64";; esac) \
11+
&& curl -sSL https://dl.min.io/client/mc/release/linux-${ARCH}/mc -o /usr/bin/mc \
1512
&& chmod +x /usr/bin/mc \
16-
&& apk del --purge .build-deps \
1713
&& rm -rf /tmp/* /root/.cache /var/cache/apk/*
14+
15+
# 添加 rootfs 文件
1816
COPY --chmod=755 ./docker/rootfs /
17+
18+
# 最小化的运行时镜像
1919
FROM scratch AS app
20-
COPY --from=Builder / /
20+
21+
# 复制 builder 阶段的内容到运行时
22+
COPY --from=builder / /
23+
24+
# 设置环境变量
2125
ENV S6_SERVICES_GRACETIME=30000 \
2226
S6_KILL_GRACETIME=60000 \
2327
S6_CMD_WAIT_FOR_SERVICES_MAXTIME=0 \
@@ -35,23 +39,41 @@ ENV S6_SERVICES_GRACETIME=30000 \
3539
UMASK=000 \
3640
NT_PORT=3000 \
3741
WORKDIR="/nas-tools"
38-
RUN mkdir ${WORKDIR}
42+
43+
# 创建必要的目录
44+
RUN mkdir -p ${WORKDIR} ${HOME}
45+
46+
# 复制应用代码到镜像
3947
ADD ./ ${WORKDIR}/
4048

41-
WORKDIR ${WORKDIR}
42-
RUN mkdir ${HOME} \
49+
# 添加用户和用户组,并设置系统参数
50+
RUN apk add --no-cache --virtual .build-deps \
51+
libffi-dev \
52+
gcc \
53+
musl-dev \
54+
libxml2-dev \
55+
libxslt-dev \
4356
&& addgroup -S nt -g 911 \
4457
&& adduser -S nt -G nt -h ${HOME} -s /bin/bash -u 911 \
4558
&& echo 'fs.inotify.max_user_watches=5242880' >> /etc/sysctl.conf \
4659
&& echo 'fs.inotify.max_user_instances=5242880' >> /etc/sysctl.conf \
47-
&& echo 'vm.overcommit_memory = 1' >> /etc/sysctl.conf \
60+
&& echo 'vm.overcommit_memory=1' >> /etc/sysctl.conf \
4861
&& echo "nt ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers \
49-
&& curl -LsSf https://astral.sh/uv/install.sh | sh \
50-
&& source $HOME/.local/bin/env \
51-
&& uv sync
62+
&& curl -sSL https://astral.sh/uv/install.sh | sh \
63+
&& . $HOME/.local/bin/env \
64+
&& uv sync \
65+
&& apk del --purge .build-deps \
66+
&& rm -rf /tmp/* /root/.cache /var/cache/apk/*
5267

68+
# 健康检查
5369
HEALTHCHECK --interval=30s --timeout=30s --retries=3 \
5470
CMD wget -qO- http://localhost:${NT_PORT}/healthcheck || exit 1
55-
EXPOSE 3000
71+
72+
# 暴露端口
73+
EXPOSE ${NT_PORT}
74+
75+
# 挂载配置目录
5676
VOLUME ["/config"]
57-
ENTRYPOINT [ "/init" ]
77+
78+
# 启动入口
79+
ENTRYPOINT ["/init"]

0 commit comments

Comments
 (0)