一个计算机技术爱好者与学习者

0%

好好学Docker:Docker升级和降级

1. 前言

为了解决稳定性和兼容性等方面的问题,我们可能需要升级或降级Docker。
升级和降级Docker有两个方案:利用包管理工具和利用二进制包。本文中,我们会学习这两种方案。

2. 包管理工具升降级Docker

2.1. ubuntu18中升降级docker

1、停止Docker

1
2
docker version
systemctl stop docker

2、查询Docker可用版本

1
2
3
apt update
apt-cache madison docker-ce
apt-cache madison docker-ce-cli

3、升级/降级Docker(假设目标版本为24.0.2)

1
2
apt install docker-ce=5:24.0.2-1~ubuntu.18.04~bionic
apt install docker-ce-cli=5:24.0.2-1~ubuntu.18.04~bionic

4、启动Docker

1
2
systemctl start docker
docker version

2.2. centos7中升降级docker

1、停止Docker

1
2
3
4
docker version
systemctl stop docker
systemctl stop docker.socket
systemctl stop containerd

2、查询Docker可用版本

1
yum list docker-ce --showduplicates | sort -r

3、升级/降级Docker(假设目标版本为19.03.15)

1
2
3
4
5
version=19.03.15
# 降级
yum downgrade --setopt=obsoletes=0 -y docker-ce-${version} docker-ce-cli-${version} docker-ce-selinux-${version} containerd.io
# 升级
yum upgrade --setopt=obsoletes=0 -y docker-ce-${version} docker-ce-cli-${version} docker-ce-selinux-${version} containerd.io

4、启动Docker

1
2
3
systemctl start containerd
systemctl start docker
docker version

3. 二进制包升降级Docker

二进制包替换不是官方推荐的更新方法,因为它需要手动干预更多的步骤,但是在一些定制化环境或缺少包管理工具的系统上可能是必须的。

在 Linux 系统中,通过二进制包替换方式升级 Docker 主要涉及到以下步骤。

1、下载指定版本的 Docker 二进制文件
Docker Download 官方网站 下载对应的二进制包,例如我们需要 x86_64 系统架构的23.0.6版本。

1
2
3
wget https://download.docker.com/linux/static/stable/x86_64/docker-23.0.6.tgz
tar -xzvf docker-23.0.6.tgz
ls -l docker

其中包含多个二进制文件:

  • containerd
  • containerd-shim-runc-v2
  • ctr
  • docker
  • dockerd
  • docker-init
  • docker-proxy
  • runc

2、确认二进制文件原本的路径

1
2
3
4
5
6
7
8
which containerd  
which containerd-shim-runc-v2
which ctr
which docker
which dockerd
which docker-init
which docker-proxy
which runc

3、停止运行的Docker服务

1
2
3
systemctl stop docker.socket
systemctl stop docker
systemctl stop containerd

4、备份当前的 Docker 程序 (可选)

1
2
3
4
5
6
7
8
cp /usr/bin/containerd{,.bak}
cp /usr/bin/containerd-shim-runc-v2{,.bak}
cp /usr/bin/ctr{,.bak}
cp /usr/bin/docker{,.bak}
cp /usr/bin/dockerd{,.bak}
cp /usr/bin/docker-init{,.bak}
cp /usr/bin/docker-proxy{,.bak}
cp /usr/sbin/runc{,.bak}

5、将二进制文件移动到 /usr/bin 目录下

1
2
cp docker/* /usr/bin/
mv /usr/bin/runc /usr/sbin/runc

拷贝过程中,如果出现报错:cp: 无法创建普通文件’/usr/bin/containerd-shim-runc-v2’: 文本文件忙
解决办法为:

1
2
3
lsof /usr/bin/containerd-shim-runc-v2
# 找到进程后
kill -9 xxx

6、重新启动 Docker 服务

1
2
systemctl start containerd
systemctl start docker

7、检查 Docker 是否已经成功升级

1
2
docker version
docker info