1 - 在 Debian13 上安装

在 Debian13 上安装 docker

1.1 - 在线安装 Docker

在 debian13 上在线安装 docker

安装docker

参考 docker 官网的安装文档:

https://docs.docker.com/engine/install/debian/

卸载旧版本

for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do sudo apt-get remove $pkg; done

用 apt 安装

添加 docker 的 apt 仓库:

# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

如果想使用 neuxs 的 apt 仓库来进行加速,可以修改 apt 源为本地 nexus 的代理源。

参考: http://skyao.net/learning-debian/docs/develop/tools/nexus/#apt-%E4%BB%93%E5%BA%93

然后更新 apt 源:

sudo apt-get update

如果要安装最新版本,可以直接:

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

也可以选择要安装版本。查看可选的 docker 版本:

apt-cache madison docker-ce | awk '{ print $3 }'

列出的版本有:

$ apt-cache madison docker-ce | awk '{ print $3 }'
5:29.1.1-1~debian.13~trixie
5:29.1.0-1~debian.13~trixie
5:29.0.4-1~debian.13~trixie
5:29.0.3-1~debian.13~trixie
5:29.0.2-1~debian.13~trixie
5:29.0.1-1~debian.13~trixie
5:29.0.0-1~debian.13~trixie
5:28.5.2-1~debian.13~trixie
5:28.5.1-1~debian.13~trixie
5:28.5.0-1~debian.13~trixie
......

这里可以选择使用一个版本,我直接选了最新的 5:29.1.1-1 版本, 执行安装命令:

VERSION_STRING=5:29.1.1-1~debian.13~trixie

sudo apt-get install docker-ce=$VERSION_STRING docker-ce-cli=$VERSION_STRING containerd.io docker-buildx-plugin docker-compose-plugin

安装完成后检验一下:

sudo docker run hello-world

查看安装的版本:

$ docker --version
Docker version 29.1.1, build 0aedba5

安装后设置

参考 docker 官网的设置文档:

https://docs.docker.com/engine/install/linux-postinstall/

设置权限避免每次sudo

为了以非 root 用户使用 docker, 可以将用户加入 “docker” 组.

# sudo groupadd docker
sudo usermod -aG docker $USER

重新登录之后生效。或者用下面的命令直接生效:

newgrp docker

验证一下:

docker run hello-world

设置 docker 为系统服务

sudo systemctl enable docker.service
sudo systemctl enable containerd.service

取消 apt source 更新

docker 安装之后,没有必要时刻保持更新,因此可以取消 apt source的设置,加速 apt update 的执行:

sudo vi /etc/apt/sources.list.d/docker.list

安装 docker compose

可以选择用 apt 安装:

sudo apt-get install docker-compose

但安装出来的不是最新版本:

$ docker-compose --version
docker-compose version 1.29.2, build 5becea4c

要安装最新的版本,可以手工下载:

https://github.com/docker/compose/releases

可以远程下载最新的版本:

wget https://github.com/docker/compose/releases/download/v2.40.3/docker-compose-linux-x86_64

也可以从开发服务器上下载:

wget http://192.168.3.193/downloads/docker-compose/docker-compose-linux-x86_64

安装:

sudo mv docker-compose-linux-x86_64 /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

验证:

$  docker-compose --version
Docker Compose version v2.40.3

参考资料

1.2 - 离线安装 Docker

在 debian13 上离线安装 docker

制作离线安装包

参考在线安装的方式, 同样需要先添加 docker 的 apt 仓库,然后找到需要安装的版本, 下载离线安装包。

sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

注意:要在一个没有安装 docker 的机器上下载。比如从 debian 的 basic 模板 clone,不要从 dev 模板 clone.

# 创建临时目录
mkdir -p ~/temp/docker-offline && cd ~/temp/docker-offline

VERSION_STRING=5:29.1.1-1~debian.13~trixie

# 下载 Docker CE 的 .deb 包(替换版本号为最新版)
apt-get download docker-ce=$VERSION_STRING docker-ce-cli=$VERSION_STRING containerd.io docker-buildx-plugin docker-compose-plugin

# 下载所有依赖(可能需要运行多次直到无新依赖)
apt-get download $(apt-cache depends docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin | grep -E 'Depends|Recommends' | cut -d ':' -f 2 | tr -d ' ' | grep -v "^docker" | sort -u)

# 下载 iptables 的几个依赖包
apt-get download libip4tc2 libip6tc2 libnetfilter-conntrack3 libnfnetlink0

参考下载安装文档,下载最新的 docker-compose 离线安装包:

wget https://github.com/docker/compose/releases/download/v2.40.3/docker-compose-linux-x86_64

完成后的离线安装包如下:

$ ls -lh

total 175M
-rw-r--r-- 1 sky sky 694K Apr 11  2025 apparmor_4.1.0-1_amd64.deb
-rw-r--r-- 1 sky sky 158K Apr 19  2025 ca-certificates_20250419_all.deb
-rw-r--r-- 1 sky sky  23M Nov 29 00:12 containerd.io_2.2.0-2~debian.13~trixie_amd64.deb
-rw-r--r-- 1 sky sky  16M Nov 29 00:08 docker-buildx-plugin_0.30.1-1~debian.13~trixie_amd64.deb
-rw-r--r-- 1 sky sky  21M Nov 29 00:08 docker-ce_5%3a29.1.1-1~debian.13~trixie_amd64.deb
-rw-r--r-- 1 sky sky  16M Nov 29 00:08 docker-ce-cli_5%3a29.1.1-1~debian.13~trixie_amd64.deb
-rw-rw-r-- 1 sky sky  74M Oct 30 17:20 docker-compose-linux-x86_64
-rw-r--r-- 1 sky sky  14M Nov  5 18:19 docker-compose-plugin_2.40.3-1~debian.13~trixie_amd64.deb
-rw-r--r-- 1 sky sky 8.5M Aug 23 05:05 git_1%3a2.47.3-0+deb13u1_amd64.deb
-rw-r--r-- 1 sky sky  39K Aug 23 05:05 init-system-helpers_1.69~deb13u1_all.deb
-rw-r--r-- 1 sky sky 353K Nov 20  2024 iptables_1.8.11-2_amd64.deb
-rw-r--r-- 1 sky sky 2.8M Aug  6 02:48 libc6_2.41-12_amd64.deb
-rw-r--r-- 1 sky sky  20K Nov 20  2024 libip4tc2_1.8.11-2_amd64.deb
-rw-r--r-- 1 sky sky  20K Nov 20  2024 libip6tc2_1.8.11-2_amd64.deb
-rw-r--r-- 1 sky sky  42K Sep 26  2024 libnetfilter-conntrack3_1.1.0-1_amd64.deb
-rw-r--r-- 1 sky sky  15K Mar 29  2024 libnfnetlink0_1.0.2-3_amd64.deb
-rw-r--r-- 1 sky sky 325K Jun 30 00:49 libnftables1_1.1.3-1_amd64.deb
-rw-r--r-- 1 sky sky  51K Mar 21  2025 libseccomp2_2.6.0-2_amd64.deb
-rw-r--r-- 1 sky sky 443K Oct 19 20:34 libsystemd0_257.9-1~deb13u1_amd64.deb
-rw-r--r-- 1 sky sky  75K Jun 30 00:49 nftables_1.1.3-1_amd64.deb
-rw-r--r-- 1 sky sky  62K Aug 23  2023 pigz_2.8-1_amd64.deb
-rw-r--r-- 1 sky sky 862K Jul 30 20:31 procps_2%3a4.0.4-9_amd64.deb
-rw-r--r-- 1 sky sky 645K Apr  4  2025 xz-utils_5.8.1-1_amd64.deb

将这个离线安装包压缩成一个 tar 包(注意要加入下面提到的安装脚本), 然后复制到 devserver 上以便后续使用:

cd ~/temp/
tar -czvf docker-offline-debian13-v29.1.1-1.tar.gz docker-offline

scp ./docker-offline-debian13-v29.1.1-1.tar.gz sky@192.168.3.193:/home/sky/temp

# 用 sky 帐号登录 192.168.3.193 机器后再执行:
# 安全期间不容许 root 帐号直接 ssh 登录
ssh sky@192.168.3.193
sudo mv ~/temp/docker-offline-debian13-v29.1.1-1.tar.gz /mnt/data/downloads/docker

用浏览器打开如下地址就可以看到离线安装包:

http://192.168.3.193/downloads/docker/

离线安装

获取离线安装文件

在某台没有安装 docker 的机器上,比如重新从 debian basic 模板 clone 一个新的虚拟机.

下载离线安装包到本地:

mkdir -p ~/temp/ && cd ~/temp/

wget http://192.168.3.193/downloads/docker/docker-offline-debian13-v29.1.1-1.tar.gz

解压离线安装包:

tar -xvf docker-offline-debian13-v29.1.1-1.tar.gz

手工安装 docker

备注: 这里的操作仅仅是用来为后面的离线安装包做验证。

备注2: 后面使用脚本安装,这里的版本信息就没有及时更新了。

cd ~/temp/docker-offline

# 安装各种依赖
sudo dpkg -i apparmor_4.1.0-1_amd64.deb
sudo dpkg -i ca-certificates_20250419_all.deb
sudo dpkg -i libc6_2.41-12_amd64.deb
sudo dpkg -i libseccomp2_2.6.0-2_amd64.deb
sudo dpkg -i libsystemd0_257.8-1\~deb13u2_amd64.deb
sudo dpkg -i pigz_2.8-1_amd64.deb
sudo dpkg -i git_1%3a2.47.3-0+deb13u1_amd64.deb 
sudo dpkg -i procps_2%3a4.0.4-9_amd64.deb
sudo dpkg -i xz-utils_5.8.1-1_amd64.deb

# 安装 iptables 和它的依赖
sudo dpkg -i libnfnetlink0_1.0.2-3_amd64.deb
sudo dpkg -i libnetfilter-conntrack3_1.1.0-1_amd64.deb
sudo dpkg -i libip4tc2_1.8.11-2_amd64.deb
sudo dpkg -i libip6tc2_1.8.11-2_amd64.deb
sudo dpkg -i iptables_1.8.11-2_amd64.deb

# 安装 docker
sudo dpkg -i containerd.io_2.1.5-1\~debian.13\~trixie_amd64.deb                   
sudo dpkg -i docker-buildx-plugin_0.29.1-1\~debian.13\~trixie_amd64.deb
sudo dpkg -i docker-ce-cli_5%3a29.0.0-1\~debian.13\~trixie_amd64.deb
sudo dpkg -i docker-ce_5%3a29.0.0-1\~debian.13\~trixie_amd64.deb
sudo dpkg -i docker-compose-plugin_2.40.3-1\~debian.13\~trixie_amd64.deb

添加用户到 docker 组:

sudo usermod -aG docker $USER
newgrp docker

启动 docker 服务:

sudo systemctl enable docker.service
sudo systemctl enable containerd.service

设置 docker 的镜像源:

sudo mkdir -p /etc/docker && sudo tee /etc/docker/daemon.json <<EOF
{
  "registry-mirrors": ["http://192.168.3.193:5000/"],
  "insecure-registries": ["192.168.3.193:5000"]
}
EOF

验证一下:

docker run hello-world

手工安装 docker-compose

sudo mv ./docker-compose-linux-x86_64 /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

验证一下:

docker-compose version

制作离线安装脚本

离线安装避免在线安装的网络问题,非常方便,考虑写一个离线安装脚本,方便以后使用。

cd ~/temp
vi install_docker_offline_debian13.zsh

内容为:

#!/usr/bin/env zsh

# ------------------------------------------------------------
# Docker & Docker Compose 离线安装脚本 (Debian 13)
# 前提条件:
# 1. 所有 .deb 文件和 docker-compose 二进制文件已放在 ~/docker-offline
# ------------------------------------------------------------

set -e  # 遇到错误立即退出

DOCKER_OFFLINE_DIR="./docker-offline"

# 检查是否在 Debian 13 上运行
if ! grep -q "Debian GNU/Linux 13" /etc/os-release; then
    echo "❌ 错误:此脚本仅适用于 Debian 13!"
    exit 1
fi

# 检查是否已安装 Docker
if command -v docker &>/dev/null; then
    echo "⚠️ Docker 已安装,跳过安装步骤。"
    exit 0
fi

# 检查离线目录是否存在
if [[ ! -d "$DOCKER_OFFLINE_DIR" ]]; then
    echo "❌ 错误:离线目录 $DOCKER_OFFLINE_DIR 不存在!"
    exit 1
fi

echo "🔧 开始离线安装 Docker 和 Docker Compose..."

# ------------------------------------------------------------
# 1. 安装 Docker CE 及其依赖
# ------------------------------------------------------------
echo "📦 安装 Docker CE 的依赖包..."
cd "$DOCKER_OFFLINE_DIR"

# 按顺序安装依赖(防止 dpkg 报错)
for pkg in apparmor ca-certificates libc6 libseccomp2 libsystemd0 pigz git procps xz-utils libip6tc2 libnfnetlink0 libnetfilter-conntrack3 libip4tc2 iptables ; do
    if ls "${pkg}"*.deb &>/dev/null; then
        echo "➡️ 正在安装: ${pkg}"
        sudo dpkg -i "${pkg}"*.deb || true  # 忽略部分错误,后续用 apt-get -f 修复
    fi
done

# 修复依赖关系
echo "🛠️ 修复依赖关系..."
sudo apt-get -f install -y

# 按顺序安装 docker 组件(防止 dpkg 报错)
echo "📦 安装 Docker CE 组件..."
for pkg in containerd.io docker-buildx-plugin docker-ce-cli docker-ce docker-compose-plugin; do
    if ls "${pkg}"*.deb &>/dev/null; then
        echo "➡️ 正在安装: ${pkg}"
        sudo dpkg -i "${pkg}"*.deb || true  # 忽略部分错误,后续用 apt-get -f 修复
    fi
done

# 修复依赖关系
echo "🛠️ 修复依赖关系..."
sudo apt-get -f install -y

# ------------------------------------------------------------
# 2. 安装 Docker Compose
# ------------------------------------------------------------
echo "📦 安装 Docker Compose..."
if [[ -f "./docker-compose-linux-x86_64" ]]; then
    sudo cp "./docker-compose-linux-x86_64" /usr/local/bin/docker-compose
    sudo chmod +x /usr/local/bin/docker-compose
else
    echo "⚠️ 未找到 docker-compose 二进制文件,跳过安装。"
fi

# ------------------------------------------------------------
# 3. 配置 Docker 并启动服务
# ------------------------------------------------------------
echo "⚙️ 配置 Docker 使用本地镜像源..."

# 创建 daemon.json(优化配置)
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<EOF
{
  "registry-mirrors": ["http://192.168.3.193:5000/"],
  "insecure-registries": ["192.168.3.193:5000"]
}
EOF

echo "⚙️ 配置 Docker 使用代理..."

# 创建 http-proxy.conf
sudo mkdir -p /etc/systemd/system/docker.service.d/
sudo tee /etc/systemd/system/docker.service.d/http-proxy.conf <<EOF
[Service]
Environment="HTTP_PROXY=http://192.168.3.1:7890"
Environment="HTTPS_PROXY=http://192.168.3.1:7890"
Environment="NO_PROXY=127.0.0.1,localhost,local,.local,.lan,192.168.0.0/16,10.0.0.0/16"
EOF

# 启动并启用 Docker 服务
echo "🚀 启动 Docker 服务..."
sudo systemctl enable --now docker.service
sudo systemctl enable --now containerd.service
sudo systemctl daemon-reload
sudo systemctl restart docker

# ------------------------------------------------------------
# 4. 验证安装
# ------------------------------------------------------------
echo "✅ 安装完成!验证版本:"
docker --version
docker-compose --version

echo "✨ docker 和 docker-compose 安装完成!"

# 添加当前用户到 docker 组(避免每次用 sudo)
echo "👥 为避免每次用 sudo ,将当前用户加入 docker 组..."
echo "👥 执行命令: sudo usermod -aG docker \$USER"
sudo usermod -aG docker $USER
    
echo "👥 为避免重新登录,即将执行命令 newgrp docker 以便立即生效"
echo "请在脚本执行结束后, 手工执行 docker run hello-world 以检验 docker 安装是否成功."
echo ""
echo "docker run hello-world"

cd ..
newgrp docker

这个离线安装脚本可以和 docker 离线安装文件一起打包,方便以后使用。

cd ~/temp
chmod +x docker-offline install_docker_offline_debian13.zsh
tar -czvf docker-offline-debian13-v29.1.1-1.tar.gz docker-offline install_docker_offline_debian13.zsh

然后将这个离线安装包拷贝备份到 devserver 机器下,以后就可以方便的重用了。

用脚本安装

从 devserver 机器获取离线安装包,解压离线安装包,执行离线安装脚本:

mkdir -p ~/temp/
cd ~/temp/
wget http://192.168.3.193/downloads/docker/docker-offline-debian13-v29.1.1-1.tar.gz
tar -xvf docker-offline-debian13-v29.1.1-1.tar.gz
./install_docker_offline_debian13.zsh

现在就非常方便了!

2 - 在 Debian12 上安装

在 Debian12 上安装 docker

2.1 - 在线安装 Docker

在 debian12 上在线安装 docker

安装docker

参考 docker 官网的安装文档:

https://docs.docker.com/engine/install/debian/

卸载旧版本

for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do sudo apt-get remove $pkg; done

用 apt 安装

添加 docker 的 apt 仓库:

# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

如果要安装最新版本,可以直接:

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

也可以选择要安装版本。查看可选的 docker 版本:

apt-cache madison docker-ce | awk '{ print $3 }'

列出的版本有:

$ apt-cache madison docker-ce | awk '{ print $3 }'
5:28.1.1-1~debian.12~bookworm
5:28.1.0-1~debian.12~bookworm
5:28.0.4-1~debian.12~bookworm
5:28.0.3-1~debian.12~bookworm
5:28.0.2-1~debian.12~bookworm
......

这里可以选择使用一个版本,我直接选了最新的 5:28.1.1-1 版本, 执行安装命令:

VERSION_STRING=5:28.1.1-1~debian.12~bookworm

sudo apt-get install docker-ce=$VERSION_STRING docker-ce-cli=$VERSION_STRING containerd.io docker-buildx-plugin docker-compose-plugin

安装完成后检验一下:

sudo docker run hello-world

查看安装的版本:

$ docker --version
Docker version 28.1.1, build 4eba377

安装后设置

参考 docker 官网的设置文档:

https://docs.docker.com/engine/install/linux-postinstall/

设置权限避免每次sudo

为了以非 root 用户使用 docker, 可以将用户加入 “docker” 组.

# sudo groupadd docker
sudo usermod -aG docker $USER

重新登录之后生效。或者用下面的命令直接生效:

newgrp docker

验证一下:

docker run hello-world

设置 docker 为系统服务

sudo systemctl enable docker.service
sudo systemctl enable containerd.service

取消 apt source 更新

docker 安装之后,没有必要时刻保持更新,因此可以取消 apt source的设置,加速 apt update 的执行:

sudo vi /etc/apt/sources.list.d/docker.list

安装 docker compose

可以选择用 apt 安装:

sudo apt-get install docker-compose

但安装出来的不是最新版本:

$ docker-compose --version
docker-compose version 1.29.2, build 5becea4c

要安装最新的版本,可以手工下载:

https://github.com/docker/compose/releases

下载最新的版本:

wget https://github.com/docker/compose/releases/download/v2.36.0/docker-compose-linux-x86_64

安装:

sudo mv docker-compose-linux-x86_64 /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

验证:

$  docker-compose --version
Docker Compose version v2.36.0

参考资料

2.2 - 离线安装 Docker

在 debian12 上离线安装 docker

制作离线安装包

参考在线安装的方式, 同样需要先添加 docker 的 apt 仓库,然后找到需要安装的版本, 下载离线安装包。

# 创建临时目录
mkdir -p ~/temp/docker-offline && cd ~/temp/docker-offline

# 下载 Docker CE 的 .deb 包(替换版本号为最新版)
apt-get download docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# 下载所有依赖(可能需要运行多次直到无新依赖)
apt-get download $(apt-cache depends docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin | grep -E 'Depends|Recommends' | cut -d ':' -f 2 | tr -d ' ' | grep -v "^docker" | sort -u)

# 下载 iptables 的几个依赖包
apt-get download libip6tc2 libnetfilter-conntrack3 libnfnetlink0

参考下载安装文档,下载最新的 docker-compose 离线安装包:

wget https://github.com/docker/compose/releases/download/v2.36.0/docker-compose-linux-x86_64

完成后的离线安装包如下:

ls -lh
total 192M
-rw-r--r-- 1 sky sky 602K Feb 14  2023 apparmor_3.0.8-3_amd64.deb
-rw-r--r-- 1 sky sky 150K Mar 11  2023 ca-certificates_20230311_all.deb
-rw-r--r-- 1 sky sky  30M Apr  2 18:54 containerd.io_1.7.27-1_amd64.deb
-rw-r--r-- 1 sky sky  34M Apr 25 21:06 docker-buildx-plugin_0.23.0-1~debian.12~bookworm_amd64.deb
-rw-r--r-- 1 sky sky  19M Apr 25 21:06 docker-ce_5%3a28.1.1-1~debian.12~bookworm_amd64.deb
-rw-r--r-- 1 sky sky  16M Apr 25 21:06 docker-ce-cli_5%3a28.1.1-1~debian.12~bookworm_amd64.deb
-rw-r--r-- 1 sky sky  71M May  7 19:24 docker-compose-linux-x86_64
-rw-r--r-- 1 sky sky  14M Apr 25 21:06 docker-compose-plugin_2.35.1-1~debian.12~bookworm_amd64.deb
-rw-r--r-- 1 sky sky 7.0M Jan 13 04:28 git_1%3a2.39.5-0+deb12u2_amd64.deb
-rw-r--r-- 1 sky sky 352K Jan 16  2023 iptables_1.8.9-2_amd64.deb
-rw-r--r-- 1 sky sky 2.7M Mar  8 05:26 libc6_2.36-9+deb12u10_amd64.deb
-rw-r--r-- 1 sky sky  19K Jan 16  2023 libip6tc2_1.8.9-2_amd64.deb
-rw-r--r-- 1 sky sky 384K Apr 23  2024 libltdl7_2.4.7-7~deb12u1_amd64.deb
-rw-r--r-- 1 sky sky  40K Jan  3  2023 libnetfilter-conntrack3_1.0.9-3_amd64.deb
-rw-r--r-- 1 sky sky  15K Apr  9  2022 libnfnetlink0_1.0.2-2_amd64.deb
-rw-r--r-- 1 sky sky  46K Jun 17  2024 libseccomp2_2.5.4-1+deb12u1_amd64.deb
-rw-r--r-- 1 sky sky 325K Mar  8 05:01 libsystemd0_252.36-1~deb12u1_amd64.deb
-rw-r--r-- 1 sky sky  63K Feb  6  2021 pigz_2.6-1_amd64.deb
-rw-r--r-- 1 sky sky 693K Dec 20  2022 procps_2%3a4.0.2-3_amd64.deb
-rw-r--r-- 1 sky sky 460K Apr  4 05:20 xz-utils_5.4.1-1_amd64.deb

将这个离线安装包压缩成一个 tar 包:

cd ~/temp/
tar -czvf docker-offline-v28.1.1-1.tar.gz docker-offline

离线安装

获取离线安装文件

下载离线安装包到本地:

mkdir -p ~/temp/ && cd ~/temp/

scp sky@192.168.3.179:/home/sky/temp/docker-offline-v28.1.1-1.tar.gz .

解压离线安装包:

tar -xvf docker-offline-v28.1.1-1.tar.gz
cd docker-offline

手工安装 docker

# 安装各种依赖
sudo dpkg -i apparmor_3.0.8-3_amd64.deb
sudo dpkg -i ca-certificates_20230311_all.deb
sudo dpkg -i libc6_2.36-9+deb12u10_amd64.deb
sudo dpkg -i libltdl7_2.4.7-7~deb12u1_amd64.deb
sudo dpkg -i libseccomp2_2.5.4-1+deb12u1_amd64.deb
sudo dpkg -i libsystemd0_252.36-1~deb12u1_amd64.deb
sudo dpkg -i pigz_2.6-1_amd64.deb
sudo dpkg -i git_1%3a2.39.5-0+deb12u2_amd64.deb   
sudo dpkg -i procps_2%3a4.0.2-3_amd64.deb
sudo dpkg -i xz-utils_5.4.1-1_amd64.deb

# 安装 iptables 和它的依赖
sudo dpkg -i libip6tc2_1.8.9-2_amd64.deb 
sudo dpkg -i libnetfilter-conntrack3_1.0.9-3_amd64.deb
sudo dpkg -i libnfnetlink0_1.0.2-2_amd64.deb
sudo dpkg -i iptables_1.8.9-2_amd64.deb

# 安装 docker
sudo dpkg -i containerd.io_1.7.27-1_amd64.deb                             
sudo dpkg -i docker-buildx-plugin_0.23.0-1~debian.12~bookworm_amd64.deb   
sudo dpkg -i docker-ce_5%3a28.1.1-1~debian.12~bookworm_amd64.deb          
sudo dpkg -i docker-ce-cli_5%3a28.1.1-1~debian.12~bookworm_amd64.deb      
sudo dpkg -i docker-compose-plugin_2.35.1-1~debian.12~bookworm_amd64.deb

添加用户到 docker 组:

sudo usermod -aG docker $USER
newgrp docker

启动 docker 服务:

sudo systemctl enable docker.service
sudo systemctl enable containerd.service

设置 docker 的镜像源:

sudo mkdir -p /etc/docker && sudo tee /etc/docker/daemon.json <<EOF
{
  "registry-mirrors": ["http://192.168.3.91:5000/"],
  "insecure-registries": ["192.168.3.91:5000"]
}
EOF

验证一下:

docker run hello-world

手工安装 docker-compose

sudo mv ./docker-compose-linux-x86_64 /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

制作离线安装脚本

离线安装避免在线安装的网络问题,非常方便,考虑写一个离线安装脚本,方便以后使用。

install_docker_offline.zsh

内容为:

#!/usr/bin/env zsh

# ------------------------------------------------------------
# Docker & Docker Compose 离线安装脚本 (Debian 12)
# 前提条件:
# 1. 所有 .deb 文件和 docker-compose 二进制文件已放在 ~/docker-offline
# ------------------------------------------------------------

set -e  # 遇到错误立即退出

DOCKER_OFFLINE_DIR="./docker-offline"

# 检查是否在 Debian 12 上运行
if ! grep -q "Debian GNU/Linux 12" /etc/os-release; then
    echo "❌ 错误:此脚本仅适用于 Debian 12!"
    exit 1
fi

# 检查是否已安装 Docker
if command -v docker &>/dev/null; then
    echo "⚠️ Docker 已安装,跳过安装步骤。"
    exit 0
fi

# 检查离线目录是否存在
if [[ ! -d "$DOCKER_OFFLINE_DIR" ]]; then
    echo "❌ 错误:离线目录 $DOCKER_OFFLINE_DIR 不存在!"
    exit 1
fi

echo "🔧 开始离线安装 Docker 和 Docker Compose..."

# ------------------------------------------------------------
# 1. 安装 Docker CE 及其依赖
# ------------------------------------------------------------
echo "📦 安装 Docker CE 的依赖包..."
cd "$DOCKER_OFFLINE_DIR"

# 按顺序安装依赖(防止 dpkg 报错)
for pkg in apparmor ca-certificates libc6 libltdl7 libseccomp2 libsystemd0 pigz git procps xz-utils libip6tc2 libnetfilter-conntrack3 libnfnetlink0 iptables ; do
    if ls "${pkg}"*.deb &>/dev/null; then
        echo "➡️ 正在安装: ${pkg}"
        sudo dpkg -i "${pkg}"*.deb || true  # 忽略部分错误,后续用 apt-get -f 修复
    fi
done

# 修复依赖关系
echo "🛠️ 修复依赖关系..."
sudo apt-get -f install -y

# 按顺序安装 docker 组件(防止 dpkg 报错)
echo "📦 安装 Docker CE 组件..."
for pkg in containerd.io docker-buildx-plugin docker-ce docker-ce-cli docker-compose-plugin; do
    if ls "${pkg}"*.deb &>/dev/null; then
        echo "➡️ 正在安装: ${pkg}"
        sudo dpkg -i "${pkg}"*.deb || true  # 忽略部分错误,后续用 apt-get -f 修复
    fi
done

# 修复依赖关系
echo "🛠️ 修复依赖关系..."
sudo apt-get -f install -y

# ------------------------------------------------------------
# 2. 安装 Docker Compose
# ------------------------------------------------------------
echo "📦 安装 Docker Compose..."
if [[ -f "./docker-compose-linux-x86_64" ]]; then
    sudo cp "./docker-compose-linux-x86_64" /usr/local/bin/docker-compose
    sudo chmod +x /usr/local/bin/docker-compose
else
    echo "⚠️ 未找到 docker-compose 二进制文件,跳过安装。"
fi

# ------------------------------------------------------------
# 3. 配置 Docker 并启动服务
# ------------------------------------------------------------
echo "⚙️ 配置 Docker 使用本地镜像源..."

# 创建 daemon.json(优化配置)
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<EOF
{
  "registry-mirrors": ["http://192.168.3.91:5000/"],
  "insecure-registries": ["192.168.3.91:5000"]
}
EOF

echo "⚙️ 配置 Docker 使用代理..."

# 创建 http-proxy.conf
sudo mkdir -p /etc/systemd/system/docker.service.d/
sudo tee /etc/systemd/system/docker.service.d/http-proxy.conf <<EOF
[Service]
Environment="HTTP_PROXY=http://192.168.3.1:7890"
Environment="HTTPS_PROXY=http://192.168.3.1:7890"
Environment="NO_PROXY=127.0.0.1,localhost,local,.local,.lan,192.168.0.0/16,10.0.0.0/16"
EOF

# 启动并启用 Docker 服务
echo "🚀 启动 Docker 服务..."
sudo systemctl enable --now docker.service
sudo systemctl enable --now containerd.service

# ------------------------------------------------------------
# 4. 验证安装
# ------------------------------------------------------------
echo "✅ 安装完成!验证版本:"
docker --version
docker-compose --version

echo "✨ docker 和 docker-compose 安装完成!"

# 添加当前用户到 docker 组(避免每次用 sudo)
echo "👥 为 避免每次用 sudo ,请将当前用户加入 docker 组..."
echo "👥 请执行命令: sudo usermod -aG docker \$USER"
echo "👥 然后重新登录,或者执行命令立即生效: newgrp docker"
echo "🟢 之后请运行测试容器: docker run hello-world"

这个离线安装脚本可以和 docker 离线安装文件一起打包,方便以后使用。

tar -czvf docker-offline-v28.1.1-1.tar.gz docker-offline install_docker_offline.zsh

然后将这个离线安装包拷贝备份到 devserver 机器下,以后就可以方便的重用了。

用脚本安装

从 devserver 机器获取离线安装包,解压离线安装包,执行离线安装脚本:

mkdir -p ~/temp/
scp sky@192.168.3.91:/mnt/data/backup/soft/docker/docker-offline/docker-offline-v28.1.1-1.tar.gz ~/temp/
cd ~/temp/
tar -xvf docker-offline-v28.1.1-1.tar.gz
./install_docker_offline.zsh

现在就非常方便了!

3 - linux mint 22

在 linux mint 22 上在线安装 docker

安装docker

参考 docker 官网的安装文档:

https://docs.docker.com/engine/install/ubuntu/

卸载旧版本

for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do sudo apt-get remove $pkg; done

用 apt 安装

添加 docker 的 apt 仓库:

# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

如果要安装最新版本,可以直接:

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

也可以选择要安装版本。查看可选的 docker 版本:

apt-cache madison docker-ce | awk '{ print $3 }'

列出的版本有:

5:28.2.2-1~ubuntu.24.04~noble
5:28.2.1-1~ubuntu.24.04~noble
5:28.2.0-1~ubuntu.24.04~noble
5:28.1.1-1~ubuntu.24.04~noble
5:28.1.0-1~ubuntu.24.04~noble
......

这里可以选择使用一个版本,我直接选了最新的 5:28.2.2-1 版本, 执行安装命令:

VERSION_STRING=5:28.2.2-1~ubuntu.24.04~noble

sudo apt-get install docker-ce=$VERSION_STRING docker-ce-cli=$VERSION_STRING containerd.io docker-buildx-plugin docker-compose-plugin

安装完成后检验一下:

sudo docker run hello-world

查看安装的版本:

$ docker --version
Docker version 28.2.2, build e6534b4

安装后设置

参考 docker 官网的设置文档:

https://docs.docker.com/engine/install/linux-postinstall/

设置权限避免每次sudo

为了以非 root 用户使用 docker, 可以将用户加入 “docker” 组.

# sudo groupadd docker
sudo usermod -aG docker $USER

重新登录之后生效。或者用下面的命令直接生效:

newgrp docker

验证一下:

docker run hello-world

设置 docker 为系统服务

sudo systemctl enable docker.service
sudo systemctl enable containerd.service

取消 apt source 更新

docker 安装之后,没有必要时刻保持更新,因此可以取消 apt source的设置,加速 apt update 的执行:

sudo vi /etc/apt/sources.list.d/docker.list

安装 docker compose

可以选择用 apt 安装:

sudo apt-get install docker-compose

但安装出来的不是最新版本:

$ docker-compose --version
docker-compose version 1.29.2, build 5becea4c

要安装最新的版本,可以手工下载:

https://github.com/docker/compose/releases

下载最新的版本:

wget https://github.com/docker/compose/releases/download/v2.36.0/docker-compose-linux-x86_64

安装:

sudo mv docker-compose-linux-x86_64 /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

验证:

$  docker-compose --version
Docker Compose version v2.37.0

参考资料

4 - 安装后的镜像加速

Docker 安装后的镜像加速设置

国内镜像加速

备注:如果是我家里的机器,会采用私有镜像仓库进行加速。

如果遇到镜像无法下载下来,比如报错:

$ docker run hello-world

Unable to find image 'hello-world:latest' locally
docker: Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)

就需要考虑配置镜像地址。

可用的镜像地址

为了加速拉取 Docker ,需要配置镜像地址:

修改镜像地址

mac下修改

任务栏点击 Docker for mac 应用图标 -> Perferences… -> Daemon -> Registry mirrors。

linux下修改

通过修改 daemon 配置文件 /etc/docker/daemon.json 来使用加速器:

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://registry.docker-cn.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

私有镜像仓库加速

为了加速下载,避免重复下载,可以考虑使用私有镜像仓库进行加速。

参考:harbor私有镜像仓库加速

5 - 安装 cri-dockerd

cri-dockerd 安装

安装 cri-dockerd

cri-dockerd 的安装参考:

https://mirantis.github.io/cri-dockerd/usage/install/

从 release 页面下载:

https://github.com/Mirantis/cri-dockerd/releases

debian 13 选择下载文件并安装:

mkdir -p ~/temp/
cd ~/temp/
# 从官方下载
# wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.4.0/cri-dockerd_0.4.0.3-0.debian-bookworm_amd64.deb
# 可以使用 devserver 上准备好的文件
wget http://192.168.3.193/downloads/cri-dockerd/cri-dockerd_0.4.0.3-0.debian-bookworm_amd64.deb
sudo dpkg -i ./cri-dockerd_0.4.0.3-0.debian-bookworm_amd64.deb

安装后会提示:

Selecting previously unselected package cri-dockerd.
(Reading database ... 68005 files and directories currently installed.)
Preparing to unpack .../cri-dockerd_0.4.0.3-0.debian-bookworm_amd64.deb ...
Unpacking cri-dockerd (0.4.0~3-0~debian-bookworm) ...
Setting up cri-dockerd (0.4.0~3-0~debian-bookworm) ...
Created symlink /etc/systemd/system/multi-user.target.wants/cri-docker.service → /lib/systemd/system/cri-docker.service.
Created symlink /etc/systemd/system/sockets.target.wants/cri-docker.socket → /lib/systemd/system/cri-docker.socket.

安装后查看状态:

sudo systemctl status cri-docker.service

如果成功则状态为:

● cri-docker.service - CRI Interface for Docker Application Container Engine
     Loaded: loaded (/lib/systemd/system/cri-docker.service; enabled; preset: enabled)
     Active: active (running) since Sat 2025-05-10 20:39:41 CST; 19s ago
TriggeredBy: ● cri-docker.socket
       Docs: https://docs.mirantis.com
   Main PID: 8294 (cri-dockerd)
      Tasks: 9
     Memory: 13.1M
        CPU: 18ms
     CGroup: /system.slice/cri-docker.service
             └─8294 /usr/bin/cri-dockerd --container-runtime-endpoint fd://

May 10 20:39:41 debian12 cri-dockerd[8294]: time="2025-05-10T20:39:41+08:00" level=info msg="Hairpin mode is set to none"
May 10 20:39:41 debian12 cri-dockerd[8294]: time="2025-05-10T20:39:41+08:00" level=info msg="The binary conntrack is not installed, this can cau>
May 10 20:39:41 debian12 cri-dockerd[8294]: time="2025-05-10T20:39:41+08:00" level=info msg="The binary conntrack is not installed, this can cau>
May 10 20:39:41 debian12 cri-dockerd[8294]: time="2025-05-10T20:39:41+08:00" level=info msg="Loaded network plugin cni"
May 10 20:39:41 debian12 cri-dockerd[8294]: time="2025-05-10T20:39:41+08:00" level=info msg="Docker cri networking managed by network plugin cni"
May 10 20:39:41 debian12 cri-dockerd[8294]: time="2025-05-10T20:39:41+08:00" level=info msg="Setting cgroupDriver systemd"
May 10 20:39:41 debian12 cri-dockerd[8294]: time="2025-05-10T20:39:41+08:00" level=info msg="Docker cri received runtime config &RuntimeConfig{N>
May 10 20:39:41 debian12 cri-dockerd[8294]: time="2025-05-10T20:39:41+08:00" level=info msg="Starting the GRPC backend for the Docker CRI interf>
May 10 20:39:41 debian12 cri-dockerd[8294]: time="2025-05-10T20:39:41+08:00" level=info msg="Start cri-dockerd grpc backend"
May 10 20:39:41 debian12 systemd[1]: Started cri-docker.service - CRI Interface for Docker Application Container Engine.

pause 镜像的版本问题

后面执行 init 命令时遇到警告:

W1127 11:14:12.643662   17241 checks.go:827] detected that the sandbox image "registry.k8s.io/pause:3.10" of the container runtime is inconsistent with that used by kubeadm. It is recommended to use "192.168.3.193:5000/k8s-proxy/pause:3.10.1" as the CRI sandbox image.

这个警告的意思是:容器运行时(CRI)默认使用的 sandbox 镜像版本和 kubeadm 期望的不一致。

Kubernetes 在运行 Pod 时,会用一个特殊的“pause”容器作为 Pod 的基础(sandbox). 目前我安装的 CRI(cri-dockerd 或 containerd)默认拉的是:

registry.k8s.io/pause:3.10

而 kubeadm 在 v1.34.2 对应的版本期望的是:

registry.k8s.io/pause:3.10.1

因为版本号不一致,就出现了这个警告。

解决方法, 修改 CRI 默认 sandbox 镜像, 对于 cri-dockerd, 需要在 cri-dockerd 的 systemd 启动参数里指定

sudo vi /lib/systemd/system/cri-docker.service

找到这行:

ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd://

在后面加入内容:

 --pod-infra-container-image=pause:3.10.1

或者如果有代码仓库:

 --pod-infra-container-image=192.168.3.193:5000/k8s-proxy/pause:3.10.1
sudo systemctl daemon-reexec
sudo systemctl daemon-reload
sudo systemctl restart cri-docker

验证:

ps -ef | grep cri-dockerd

root       19302       1  0 11:40 ?        00:00:00 /usr/bin/cri-dockerd --container-runtime-endpoint fd:// --pod-infra-container-image=192.168.3.193:5000/k8s-proxy/pause:3.10.1