前置
bash
1. /etc/os-release && echo "$VERSION_CODENAME"
2# 本文按 trixie 写;bookworm 等把下面 URL 里的代号一并改掉
. /etc/os-release && echo "$VERSION_CODENAME"
# 本文按 trixie 写;bookworm 等把下面 URL 里的代号一并改掉
不要用发行版仓库里过时的 docker.io 凑合(可以跑,但版本和管理源往往不如官方 CE 清晰)。开发机推荐 Docker CE + 国内镜像。
依赖与 GPG 密钥
bash
1sudo apt update
2sudo apt install -y ca-certificates curl
3
4sudo install -m 0755 -d /etc/apt/keyrings
5sudo curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/debian/gpg \
6 -o /etc/apt/keyrings/docker.asc
7sudo chmod a+r /etc/apt/keyrings/docker.asc
sudo apt update
sudo apt install -y ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/debian/gpg \
-o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
若阿里云 GPG 地址异常,可用 Docker 官方密钥再继续用阿里云软件源(密钥与仓库可分开)。
添加阿里云 Docker CE 源
bash
1. /etc/os-release
2echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.asc] https://mirrors.aliyun.com/docker-ce/linux/debian ${VERSION_CODENAME} stable" \
3 | sudo tee /etc/apt/sources.list.d/docker.list
. /etc/os-release
echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.asc] https://mirrors.aliyun.com/docker-ce/linux/debian ${VERSION_CODENAME} stable" \
| sudo tee /etc/apt/sources.list.d/docker.list
Debian 13 上生效后类似:
text
1deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.asc] https://mirrors.aliyun.com/docker-ce/linux/debian trixie stable
deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.asc] https://mirrors.aliyun.com/docker-ce/linux/debian trixie stable
安装 Docker Engine
bash
1sudo apt update
2sudo apt install -y \
3 docker-ce \
4 docker-ce-cli \
5 containerd.io \
6 docker-buildx-plugin \
7 docker-compose-plugin
sudo apt update
sudo apt install -y \
docker-ce \
docker-ce-cli \
containerd.io \
docker-buildx-plugin \
docker-compose-plugin
开机自启并立刻启动:
bash
1sudo systemctl enable --now docker
2sudo systemctl status docker --no-pager
sudo systemctl enable --now docker
sudo systemctl status docker --no-pager
当前用户免 sudo
bash
1sudo usermod -aG docker "$USER"
sudo usermod -aG docker "$USER"
注销重新登录(或重启)后再测:
bash
1docker version
2docker run --rm hello-world
docker version
docker run --rm hello-world
配置镜像加速(拉镜像用)
把加速器写进 daemon 配置(示例为阿里云;也可换中科大、DaoCloud 等):
bash
1sudo mkdir -p /etc/docker
2sudo tee /etc/docker/daemon.json >/dev/null <<'EOF'
3{
4 "registry-mirrors": [
5 "https://docker.m.daocloud.io"
6 ],
7 "log-driver": "json-file",
8 "log-opts": {
9 "max-size": "50m",
10 "max-file": "3"
11 }
12}
13EOF
14
15sudo systemctl daemon-reload
16sudo systemctl restart docker
17docker info | grep -A5 'Registry Mirrors'
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json >/dev/null <<'EOF'
{
"registry-mirrors": [
"https://docker.m.daocloud.io"
],
"log-driver": "json-file",
"log-opts": {
"max-size": "50m",
"max-file": "3"
}
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
docker info | grep -A5 'Registry Mirrors'
加速器地址会随服务商变更,以你账号控制台或镜像站文档为准。
常用自检
bash
1docker info
2docker compose version
3docker ps -a
docker info
docker compose version
docker ps -a
数据盘与项目目录建议分开,例如:
bash
1mkdir -p ~/Workspace/datas
mkdir -p ~/Workspace/datas
容器业务数据(MySQL、Redis、对象存储等)优先 bind 到 ~/Workspace/datas/...,不要只依赖匿名卷,方便备份和迁移。
和防火墙的关系(开发机)
UFW 默认拒入站时,Docker 映射到 0.0.0.0 的端口仍可能被局域网访问(走 FORWARD/DNAT,不经 UFW 的 INPUT)。开发本若只想本机用:
- 映射写成
-p 127.0.0.1:3306:3306,或 - 在
DOCKER-USER 链限制外网访问(见 XFCE 开发机整理一文中的防火墙小节)
小结
| 步骤 | 要点 |
|---|
| 源 | mirrors.aliyun.com/docker-ce + 当前 Debian 代号 |
| 包 | docker-ce 及 cli / containerd / buildx / compose 插件 |
| 权限 | 用户进 docker 组后重登 |
| 加速 | /etc/docker/daemon.json 的 registry-mirrors |
下一篇用 Docker 在本机落 Redis + MySQL(开机自启、数据在 Workspace/datas):Debian 安装 Redis 和 MySQL