易出问题点:
第一步和最后一步必须要做,原因是避免迁移 docker 数据目录和升级 docker 版本后老镜像启动容器时候出现权限问题(一般发生在 sc 容器内 Elasticsearch 和 doc 容器 pg/rabbitmq 上)
接下来上操作步骤:
一、Docker 数据目录变更(或部署方式变更)
第一步:记录一下镜像版本号(便于重新拉取镜像),然后删除所有镜像(community、doc、sc、command)
docker rmi 镜像ID
第二步:停掉当前 docker 环境(这里为避免操作过程中其他原因服务器重启导致 docker 开机自启)
systemctl stop docker docker-ce && systemctl disable docker
第三步:清理 docker 服务启动文件(这里以清理 yum 安装的 docker 环境为例)
重命名进行备份
mv /usr/lib/systemd/system/docker.service /usr/lib/systemd/system/docker.service.bak.old
或直接删除
rm /usr/lib/systemd/system/docker.service
第四步:清理 docker 可执行文件(有时候 docker version 中显示 client 版本和 server 版本不同,就是这里没清理或覆盖的原因)
rm /usr/bin/docker
rm /usr/bin/dockerd
第五步:迁移数据目录到指定数据盘(/data/),也可以直接删除 docker 数据目录(删除的话建议做下备份)
迁移:
mv /var/lib/docker /data/
删除:
rm -rf /var/lib/docker
备份:
cp -r /var/lib/docker /data/docker.bak.old
第六步:安装新版本 docker
参考 Docker 安装
第七步:复制 docker 可执行文件到/usr/bin/目录
cp /usr/local/bin/docker /usr/bin/docker
cp /usr/local/bin/dockerd /usr/bin/dockerd
chmod +x /usr/bin/docker
chmod +x /usr/bin/dockerd
第八步:设置开机自启并启动 docker
systemctl enable docker
systemctl start docker
systemctl status docker
docker version
第九步:根据第一步记录的镜像版本号,重新拉取镜像到服务器
docker pull ${repo_name}:${version}
二、Docker 升级(基于一的部署结果状态;这里以升级至 docker24.0.9 版本为例)
第一步:记录一下镜像版本号(便于重新拉取镜像),然后删除所有镜像(community、doc、sc、command)
docker rmi 镜像ID
第二步:停掉当前 docker 环境
systemctl stop docker
第三步:备份数据目录到指定数据盘(/data/)
cp -r /data/docker /data/docker.bak.`date '+%Y%m%d%H%M%S'`
第四步:清理 docker 可执行文件(有时候 docker version 中显示 client 版本和 server 版本不同,就是这里没清理或覆盖的原因)
rm /usr/bin/docker
rm /usr/bin/dockerd
第五步:Docker 安装以及配置文件覆盖
参考 Docker 安装
第六步:复制 docker 可执行文件到/usr/bin/目录
cp /usr/local/bin/docker /usr/bin/docker
cp /usr/local/bin/dockerd /usr/bin/dockerd
chmod +x /usr/bin/docker
chmod +x /usr/bin/dockerd
第七步:启动 docker
systemctl start docker
systemctl status docker
docker version
第八步:根据第一步记录的镜像版本号,重新拉取镜像到服务器
docker pull ${repo_name}:${version}