构建python3.12镜像
·
1 部署Docker Engine
原文地址:https://developer.aliyun.com/mirror/docker-ce?spm=a2c6h.13651102.0.0.72591b11yrsXC1
1.1 卸载可能冲突的旧包
for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do sudo apt-get remove $pkg; done
1.1 设置Docker的apt仓库
# step 1: 安装必要的一些系统工具
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
# step 2: 信任 Docker 的 GPG 公钥
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
# Step 3: 写入软件源信息
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# Step 4: 安装Docker
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 安装指定版本的Docker-CE:
# Step 1: 查找Docker-CE的版本:
# apt-cache madison docker-ce
# docker-ce | 17.03.1~ce-0~ubuntu-xenial | https://mirrors.aliyun.com/docker-ce/linux/ubuntu xenial/stable amd64 Packages
# docker-ce | 17.03.0~ce-0~ubuntu-xenial | https://mirrors.aliyun.com/docker-ce/linux/ubuntu xenial/stable amd64 Packages
# Step 2: 安装指定版本的Docker-CE: (VERSION例如上面的17.03.1~ce-0~ubuntu-xenial)
# sudo apt-get -y install docker-ce=[VERSION]
1.2 安装校验
docker version
Client: Docker Engine - Community
Version: 29.3.1
API version: 1.54
Go version: go1.25.8
Git commit: c2be9cc
Built: Wed Mar 25 16:13:43 2026
OS/Arch: linux/amd64
Context: default
Server: Docker Engine - Community
Engine:
Version: 29.3.1
API version: 1.54 (minimum version 1.40)
Go version: go1.25.8
Git commit: f78c987
Built: Wed Mar 25 16:13:43 2026
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: v2.2.2
GitCommit: 301b2dac98f15c27117da5c8af12118a041a31d9
runc:
Version: 1.3.4
GitCommit: v1.3.4-0-gd6d73eb8
docker-init:
Version: 0.19.0
GitCommit: de40ad0
1.3 将当前用户加入 docker 组(避免每次使用 sudo):
sudo usermod -aG docker $USER
2 构建 ubuntu 基础镜像
创建文件夹 ~/ubuntu-jammy
2.1 下载 ubuntu 根文件系统并保存在~/ubuntu-jammy
ubuntu-base-22.04.5-base-amd64.tar.gz
2.2 编辑Dockerfile并保存在~/ubuntu-jammy
# 使用 scratch 这个特殊的空镜像作为起点
FROM scratch
# 将下载好的 Ubuntu 根文件系统添加到镜像根目录
ADD ubuntu-base-22.04.5-base-amd64.tar.gz \
ENV DEBIAN_FRONTEND=noninteractive
# 换源(阿里云)
RUN echo "deb http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse" > /etc/apt/sources.list && \
echo "deb http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse" >> /etc/apt/sources.list && \
echo "deb http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse >> /etc/apt/sources.list && \
echo "deb http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multivers >> /etc/apt/sources.list && \
apt-get update && \
apt-get install -y --no-install-recommends \
ca-certificates \
curl \
gnupg \
software-properties-common
RUN apt-get clean && rm -rf /var/lib/apt/lists/*
WORKDIR /root
CMD ["/bin/bash"]
2.3 在~/ubuntu-jammy执行构建镜像命令。
docker build -t ubuntu:jammy .
3 在 Jammy 环境中下载 python3.12 离线包
不同版本的ubuntu,它们的软件源是完全独立的。因此,必须在 jammy 环境中下载 python3.12 离线包。下面的方案是使用 Docker 运行一个 Jammy 容器。
- 新建文件夹 ~/python-3.12-jammy 用于存放 Dockerfile 和 ubuntu 根文件系统
- 新建文件夹 ~/python-3.12-jammy/debs 用于存放 python3.12 离线包
3.1 启动一个 Jammy 容器并挂载一个本地目录(用于存放下载的包)
cd ~/python-3.12-jammy
docker run -it --rm -v $PWD/debs:/packages ubuntu:jammy /bin/bash
这会在当前目录下创建 debs 文件夹,并映射到容器的 /packages 目录。
3.2 安装必要的工具并下载 Python 3.12 的离线包
add-apt-repository ppa:deadsnakes/ppa -y
apt update
apt install -y apt-rdepends
cd /packages
apt-rdepends python3.12 python3.12-venv | grep -v "^ " | grep -v "^debconf" | sort -u | xargs apt-get download
4 构建 python3.12 镜像
前面已经在 ~/python-3.12-jammy 准备好根文件系统和 python3.12 离线包,现在编辑 Dockerfile 文件。
# 使用 scratch 这个特殊的空镜像作为起点
FROM scratch
# 将下载好的 Ubuntu 根文件系统添加到镜像根目录
ADD ubuntu-base-22.04.5-base-amd64.tar.gz /
ENV DEBIAN_FRONTEND=noninteractive
# 换源(阿里云)
RUN echo "deb http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse" > /etc/apt/sources.list && \
echo "deb http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse" >> /etc/apt/sources.list && \
echo "deb http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse >> /etc/apt/sources.list && \
echo "deb http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multivers >> /etc/apt/sources.list && \
apt-get update && \
apt-get install -y --no-install-recommends \
ca-certificates \
curl \
gnupg \
software-properties-common
# 1. 复制所有本地的 deb 包到镜像中
COPY debs/*.deb /tmp/debs/
# 2. 使用 dpkg 本地安装所有包
# 第一次执行可能会报依赖顺序错误,但会继续
RUN cd /tmp/debs && dpkg -i *.deb || true
# 3. 修复可能存在的依赖关系(这步会尝试从配置的源获取缺失的包)
# 注意:你的 sources.list 应该是阿里云等国内源,速度很快
RUN apt-get update && apt-get install -f -y && \
python3.12 -m ensurepip --upgrade
RUN apt-get clean && rm -rf /var/lib/apt/lists/*
# 4. 清理临时文件
RUN rm -rf /tmp/debs
# 5. 验证安装
RUN python3.12 --version
WORKDIR /root
CMD ["/bin/bash"]
进入 ~/python-3.12-jammy 运行 docker build
docker build -t python:3.12-jammy .
最后,构建了两个 docker 镜像
vboxuser@ubuntudesktop:~/python-3.12-jammy$ docker images
i Info → U In Use
IMAGE ID DISK USAGE CONTENT SIZE EXTRA
python:3.12-jammy 3621339778dd 1.27GB 338MB
ubuntu:jammy 3ead8567699e 806MB 209MB
更多推荐



所有评论(0)