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

Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐