最近把Docker的Gitlab和Nextcloud的容器版本更新了一下。Gitlab和Nextcloud跨版本更新可能会出现比较难修复的问题。这两个容器上的数据比较重要,而且数据量也比较大,本文记录这两个容器的更新流程以作备忘。
我的机器装的是PVE系统,上面通过LXC(Linux软件容器)安装了Ubuntu容器,而并非通过虚拟机安装的系统。然后在该Ubuntu容器上装的Docker。
注意事项
- 本文介绍到的升级方法是利用创建旧容器的时候通过路径映射将存储重要数据的目录映射到容器之外。然后删除旧容器,再创建新容器。利用新容器的自动更新实现版本更新。因此,旧容器的重要数据的目录【必须】是映射在外部的。否则在删除旧容器的时候数据会被一同删除,无法恢复。本文介绍的数据备份的方法也是基于这个前提。
- Gitlab和Nextcloud并不总能跨版本更新。有时候能够跨大版本更新,但有时候跨若干小版本就会出错,出错以后很修复会比较麻烦。因此建议每次执行更新之前都把数据备份一下。
备份数据
因为数据量比较大,备份数据的时候最好把数据备份到外设存储。这样可以让两个存储同时读写,提升备份速度。
登录PVE后台,停止Ubuntu LXC(ID:101)
pct stop 101
- 把备份用的存储接入机器,然后挂载。这里用的是一个移动硬盘(设备路径:
/dev/dds
)
mkdir /backup
mount /dev/sdd /backup
- 把存储挂载到LXC容器中,编辑LXC容器的配置文件
vi /etc/pve/lxc/101.conf
,在文件中把目录/backup
挂载到容器/backup
目录下。
mp0: /data,mp=/data
# 前面已经有一个mount point,所以mp的编号加1
mp1: /backup,mp=/backup
- 通过命令
pct start 101
启动容器。这样LXC容器的/backup
目录就能映射到到PVE系统中挂载的存储。我们将会把Gitlab和Nextcloud容器的数据备份到这个存储下。
更新Nextcloud
登录到LXC容器后台。
先把容器停止,这包括Nextcloud数据库容器和Nextcloud容器本身。
docker stop nextcloud
docker stop nextcloud-db
- 备份数据,我Nextcloud数据库容器的数据保存在
/data/app/nextcloud/database
目录下,所以只备份/data/app/nextcloud
即可。
sudo rsync -avh /data/app/nextcloud/ /backup/nextcloud-23.0.2
- 备份好数据以后把原来的容器删除。
docker rm nextcloud
docker rm nextcloud-db
- 用新版本的镜像重新创建容器。
docker run -d --name=nextcloud-db \
-p ????:3306 \
-v /app/nextcloud/database:/var/lib/mysql \
-e PUID=???? \
-e PGID=???? \
-e MYSQL_ROOT_PASSWORD=???? \
-e MYSQL_DATABASE=????? \
-e MYSQL_USER=???? \
-e MYSQL_PASSWORD=???? \
--restart unless-stopped \
mariadb:10.7.3
docker run -d --name=nextcloud \
-p ????:80 \
-v /app/nextcloud/html:/var/www/html \
-v /app/nextcloud/data:/var/www/html/data \
--restart unless-stopped \
nextcloud:23.0.3
- Nextcloud容器启动以后会执行更新,过一段时间就能正常访问了。
更新Gitlab
登录到LXC容器后台。
先把Gitlab容器停止。
docker stop gitlab
- 备份Gitlab数据。
sudo rsync -avh /data/app/gitlab/ /backup/bitlab-14.8.2-ce.0
- 备份好数据以后把原来的容器删除。
docker rm gitlab
- 用新版本的镜像重新创建容器。
docker run -d --name gitlab \
-p ????:443 \
-p ????:80 \
-p ????:22 \
-v /app/gitlab/config:/etc/gitlab \
-v /app/gitlab/logs:/var/log/gitlab \
-v /app/gitlab/data:/var/opt/gitlab \
--restart always \
--hostname my-gitlab-host.com \
gitlab/gitlab-ce:14.9.2-ce.0
- Gitlab容器启动以后会执行更新,过一段时间就能正常访问了。