|
@@ -1,85 +1,78 @@
|
|
|
# 基础镜像构建Dockerfile
|
|
|
# 包含系统依赖和ODBC组件
|
|
|
+# 优化版本:减少镜像层数,提高构建效率
|
|
|
|
|
|
# 基础系统依赖镜像
|
|
|
FROM python:3.13-slim
|
|
|
|
|
|
-# 创建并配置阿里云APT源
|
|
|
-RUN echo "deb http://mirrors.aliyun.com/debian bullseye main contrib non-free" > /etc/apt/sources.list && \
|
|
|
- echo "deb http://mirrors.aliyun.com/debian bullseye-updates main contrib non-free" >> /etc/apt/sources.list && \
|
|
|
- echo "deb http://mirrors.aliyun.com/debian-security bullseye-security main contrib non-free" >> /etc/apt/sources.list
|
|
|
-
|
|
|
-# 修改动态生成的APT源配置文件
|
|
|
-RUN find /etc/apt/sources.list.d/ -type f -exec sed -i 's|http://deb.debian.org|http://mirrors.aliyun.com|g' {} \; && \
|
|
|
- find /etc/apt/sources.list.d/ -type f -exec sed -i 's|http://security.debian.org|http://mirrors.aliyun.com|g' {} \;
|
|
|
-
|
|
|
-# 清理APT缓存并更新源列表
|
|
|
-RUN rm -rf /var/lib/apt/lists/* && \
|
|
|
- apt-get update
|
|
|
-
|
|
|
-RUN mkdir /app
|
|
|
-# 设置工作目录
|
|
|
+# 创建工作目录
|
|
|
WORKDIR /app
|
|
|
|
|
|
-# 安装基础依赖
|
|
|
-RUN apt-get install -y --no-install-recommends \
|
|
|
- apt-utils \
|
|
|
- libc6 \
|
|
|
- && rm -rf /var/lib/apt/lists/*
|
|
|
-
|
|
|
-COPY ./apt-packages/base/* /tmp/apt-packages/
|
|
|
-RUN set -eux; \
|
|
|
- # 安装基础依赖包
|
|
|
- dpkg -i /tmp/apt-packages/*.deb || true; \
|
|
|
- apt-get update && apt-get -f install -y --no-install-recommends; \
|
|
|
- # 清理临时文件
|
|
|
- rm -rf /tmp/apt-packages /var/lib/apt/lists/*
|
|
|
-
|
|
|
-# 安装ODBC依赖 - 分步安装以避免包冲突
|
|
|
-# 第1步:复制所有依赖包
|
|
|
-COPY ./apt-packages/odbc/* /tmp/apt-packages/
|
|
|
+# 设置环境变量
|
|
|
+ENV FREETDS_VERSION=7.3 \
|
|
|
+ ODBCSYSINI=/etc \
|
|
|
+ ODBCINI=/etc/odbc.ini \
|
|
|
+ DEBIAN_FRONTEND=noninteractive \
|
|
|
+ TZ=Asia/Shanghai
|
|
|
|
|
|
-# 第2步:安装基础依赖
|
|
|
+# 配置阿里云APT源并安装基础依赖
|
|
|
RUN set -eux; \
|
|
|
- apt-get update && apt-get install -y --no-install-recommends \
|
|
|
- libltdl7 \
|
|
|
- libodbc1 \
|
|
|
- odbcinst \
|
|
|
- odbcinst1debian2 \
|
|
|
- unixodbc-common && \
|
|
|
- rm -rf /var/lib/apt/lists/*
|
|
|
-
|
|
|
-# 第3步:逐个安装ODBC依赖包
|
|
|
-RUN set -eux; \
|
|
|
- # 设置环境变量接受许可协议
|
|
|
- export DOCKER_BUILDKIT=1; \
|
|
|
- # 先安装libodbcinst2
|
|
|
- dpkg -i /tmp/apt-packages/libodbcinst2*.deb || true; \
|
|
|
- apt-get update && apt-get -f install -y --no-install-recommends; \
|
|
|
- # 再安装libodbc1
|
|
|
- dpkg -i /tmp/apt-packages/libodbc1*.deb || true; \
|
|
|
- apt-get update && apt-get -f install -y --no-install-recommends; \
|
|
|
- # 最后安装unixodbc和unixodbc-dev
|
|
|
- dpkg -i /tmp/apt-packages/unixodbc*.deb || true; \
|
|
|
- apt-get update && apt-get -f install -y --no-install-recommends && \
|
|
|
- rm -rf /var/lib/apt/lists/*
|
|
|
-
|
|
|
-COPY ./odbc-drivers/* /tmp/odbc-drivers/
|
|
|
-# 第4步:安装Microsoft ODBC驱动
|
|
|
-RUN set -eux; \
|
|
|
- # 设置环境变量接受许可协议
|
|
|
- export DOCKER_BUILDKIT=1; \
|
|
|
- export ACCEPT_EULA=Y; \
|
|
|
- export DEBIAN_FRONTEND=noninteractive; \
|
|
|
- # 安装Microsoft ODBC驱动
|
|
|
- dpkg -i /tmp/odbc-drivers/*.deb || true; \
|
|
|
- apt-get update && apt-get -f install -y --no-install-recommends; \
|
|
|
- # 更新动态链接库缓存
|
|
|
- ldconfig; \
|
|
|
- # 显示安装的ODBC库文件
|
|
|
- ls -l /usr/lib/x86_64-linux-gnu/libodbc*; \
|
|
|
- ldconfig -p | grep libodbc; \
|
|
|
- # 清理临时文件
|
|
|
- rm -rf /tmp/apt-packages /tmp/odbc-drivers /var/lib/apt/lists/*
|
|
|
-
|
|
|
+ # 配置阿里云APT源 - 提高下载速度
|
|
|
+ echo "deb http://mirrors.aliyun.com/debian bullseye main contrib non-free" > /etc/apt/sources.list && \
|
|
|
+ echo "deb http://mirrors.aliyun.com/debian bullseye-updates main contrib non-free" >> /etc/apt/sources.list && \
|
|
|
+ echo "deb http://mirrors.aliyun.com/debian-security bullseye-security main contrib non-free" >> /etc/apt/sources.list && \
|
|
|
+ # 修改动态生成的APT源配置文件
|
|
|
+ find /etc/apt/sources.list.d/ -type f -exec sed -i 's|http://deb.debian.org|http://mirrors.aliyun.com|g' {} \; && \
|
|
|
+ find /etc/apt/sources.list.d/ -type f -exec sed -i 's|http://security.debian.org|http://mirrors.aliyun.com|g' {} \; && \
|
|
|
+ # 更新源并安装基础系统依赖 - 合并安装所有依赖减少层数
|
|
|
+ apt-get update && \
|
|
|
+ apt-get install -y --no-install-recommends \
|
|
|
+ # 系统基础依赖
|
|
|
+ apt-utils \
|
|
|
+ libc6 \
|
|
|
+ curl \
|
|
|
+ gnupg2 \
|
|
|
+ ca-certificates \
|
|
|
+ # ODBC基础依赖
|
|
|
+ libltdl7 \
|
|
|
+ libodbc1 \
|
|
|
+ libodbcinst2 \
|
|
|
+ odbcinst \
|
|
|
+ odbcinst1debian2 \
|
|
|
+ unixodbc \
|
|
|
+ unixodbc-common \
|
|
|
+ unixodbc-dev \
|
|
|
+ # FreeTDS相关依赖
|
|
|
+ freetds-bin \
|
|
|
+ freetds-dev \
|
|
|
+ tdsodbc && \
|
|
|
+ # 配置FreeTDS - 使用单一配置文件
|
|
|
+ { \
|
|
|
+ echo "[global]"; \
|
|
|
+ echo " tds version = 7.3"; \
|
|
|
+ echo " client charset = UTF-8"; \
|
|
|
+ echo " timeout = 60"; \
|
|
|
+ echo " connect timeout = 15"; \
|
|
|
+ } > /etc/freetds/freetds.conf && \
|
|
|
+ # 配置ODBC驱动 - 使用单一配置文件
|
|
|
+ { \
|
|
|
+ echo "[FreeTDS]"; \
|
|
|
+ echo "Description = TDS driver (Sybase/MS SQL)"; \
|
|
|
+ echo "Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so"; \
|
|
|
+ echo "CPTimeout ="; \
|
|
|
+ echo "CPReuse ="; \
|
|
|
+ echo "UsageCount = 1"; \
|
|
|
+ } > /etc/odbcinst.ini && \
|
|
|
+ # 验证驱动安装 - 确保配置正确
|
|
|
+ if [ ! -f /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so ]; then \
|
|
|
+ echo "ERROR: FreeTDS ODBC driver not found"; \
|
|
|
+ exit 1; \
|
|
|
+ fi && \
|
|
|
+ # 清理临时文件 - 减小镜像大小
|
|
|
+ apt-get clean && \
|
|
|
+ apt-get autoremove -y && \
|
|
|
+ rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
|
|
|
|
|
|
+# 健康检查 - 验证ODBC配置是否正确
|
|
|
+HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
|
|
|
+ CMD [ "odbcinst", "-q", "-d", "-n", "FreeTDS" ]
|