【Unbuntu安装docker】
Ubuntu安装docker
使用ubuntu24.04系统部署docker
- 更新软件源
sudo apt update
- 安装基本软件
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common lrzsz -y
- 指定使用阿里云镜像
sudo curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
- 查看可安装的 Docker 版本
apt-cache madison docker-ce
- 安装最新版本docker-ce
sudo apt-get install docker-ce -y
sudo apt install docker-ce=5:26.0.0-1~ubuntu.24.04~noble docker-ce-cli=5:26.0.0-1~ubuntu.24.04~noble containerd.io
5.查看docker
遇到问题:
没有指定版本,默认安装了最新版本的docker(28.01),Docker 28.01 使用 cgroup v2,/proc/self/mountinfo 的路径结构发生了变化,导致容器中获取容器id脚本失效:
- 使用cgroup1获取容器id,打印出来没有值
cat /proc/self/cgroup | grep -o -E "[0-9a-f]{64}" | head -n 1
- 通过 cgroup v2 正确获取容器 ID,虽然能获取到id但是不是容器id并不能使用,且程序也需要改动
cgroup2 on /sys/fs/cgroup type cgroup2 (rw,nosuid,nodev,noexec,relatime)
解决方案:
既然找到了原因,于是想到了能不能降低cgroup版本,然后去查了下docker对于cgroup的兼容性如下表,28.0.x的版本无法支持cgroup v1
Docker 版本 | 默认 cgroup 版本 | 说明 |
---|---|---|
< 20.10 | cgroup v1 | 默认使用 cgroup v1 |
20.10.x | cgroup v1 | 默认使用 cgroup v1,但已支持 cgroup v2(需手动切换) |
24.0.x | cgroup v2 | 默认使用 cgroup v2,可手动切回 cgroup v1 |
28.0.x | (最新) cgroup v2 | 强制使用 cgroup v2,不再支持 cgroup v1 |
- 切换获取到容器id方法,但是使用
cat /etc/hostname
存在不稳定性,而且程序已经现场部署,更新迭代成本高,故没有采用
cat /etc/hostname
- 选择降低docker版本
一、降级 Docker 到 28.0.x 以下版本
- 卸载当前 Docker 版本
sudo apt remove docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc -y
- 添加 Docker 官方仓库
sudo apt update
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common lrzsz -y
sudo curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
- 查看当前系统支持的docker版本
apt-cache madison docker-ce
- 安装指定版本的 Docker
sudo apt install docker-ce=5:26.0.0-1~ubuntu.24.04~noble docker-ce-cli=5:26.0.0-1~ubuntu.24.04~noble containerd.io
- 检查 Docker 版本
docker version
二、切换系统回 cgroup v1
- 编辑 GRUB 配置
sudo nano /etc/default/grub
- 找到以下行:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
- 在末尾添加:
systemd.unified_cgroup_hierarchy=0
- 修改后:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash systemd.unified_cgroup_hierarchy=0"
- 更新 GRUB 配置并重启
sudo update-grub
sudo reboot
- 检查是否切换成功
mount | grep cgroup
- 若输出类似以下内容,表示已回到 cgroup v1:
cgroup on /sys/fs/cgroup type cgroup (rw,relatime,blkio)