目录
一、引子
最近发现docker里的homeassitant版本太低了,想升级一下。应用里的升级按钮压根没反应,群晖官方倒是说了可以在docker里直接点按钮升级,但我死活没找到按钮在哪,最后才发现人家说的是DSM7.2的Container Mnager,咱现在还在7.1,尴尬~~
免不了要折腾一下了,这方面实在是太外行了,找了很多资料,总算是折腾出来了。
二、大概docker工作原理
升级前需要了解一下群晖docker的工作原理(不是专家,这部分全靠推理,如有不对,纯属正常,敬请纠正)。
1. 容器在工作的时候,实际是要依赖于映像的。当映像存在对应的容器时,映像是删除不掉的
2. 容器停止时,能进行“重置”操作,实际就是将各种基础文件从映像里拉取覆盖一遍,划重点:不会更新个性化的配置文件。
3. 当映像存在多个版本时,“重置”操作会从哪一个映像去拉去文件呢?划重点: 自动会去找与容器相同的版本
三、解决思路
好了,原理了解到这个程度就差不多了。接下来说说具体思路:
1. 下载映像,不论是什么默认的latest或者指定版本号,都可以
2. 修改新的映像的版本号,最终目的的让它与容器的版本号一致。(这一步不一定需要,后面实操详细描述)
3. 备份容器
4. 重置容器
ok,就这么简单。
四、下面来实操:
背景:我的homeassitant版本是2023.1.1,目前最新版是2023.12.
现在的容器在安装的时候,是下载的指定版本,所以在容器里显示的并不是latest。
1.下载映像
这一步,方法就比较多了,总结一下我自己用过的3个:
1.docker里“注册表里”:因为服务器不在国内、国内的镜像网站也很难找,一般很容易失败
2.有一些代pull的网站,提交你想下的映像名字+版本,网站会帮你pull,然后给打包好自行下载,下载后可以将文件导入docker
3. 走SSH,直接从官网copy命令就行了,而且不会存在网络原因,推荐。
我这里就用SSH来演示了:
docker pull homeassitant/home-assitant
默认就会下载latest版本,也就是2023.12版本
下载完之后,就有2个版本了,此时在docker的映像列表里也会看到有2个:一个是2023.1.1,一个是latest
2.版本号调整
修改新的映像的版本号最终目的的让它与容器的版本号一致。(这一步不一定需要,后面实操详细描述)
现在需要把版本号改成一致,latest改成2023.1.1
命令:docker tag homeassitant/home-assitant:latest homeassitant/home-assitant:2023.1.1
改完之后就如下图了,出现3个版本,一个个解释一下:
1. 版本①、②实际是同一个映像,image_ID相同,版本1是从latest改名后产生的新映像,版本2就是原始的
2. 本版③是老版本,因为版本号被①占用了,就被迫成了“none”
此时在docker映像界面看到是这样的:
PS:啥时候这一步可以不需要呢?
当容器原本就是安装的latest版本,现在也是pull的latest版本,虽然这两个latest代表的实际版本并不一样,但在TAG那里显示的都是latet。在step1-下载映像 之后,就会出现2个映像:一个是latest,这是新下载的最新版本;另一个是none,这是原映像,被迫改名了。
3. 备份容器
老容器复制一份出来,名字改一下,不要占用老名字
4. 重置容器
先停老调容器,然后重置。
重置成功后再打开,第一次打开会略微慢一点,正常。
五、收工
打开之后验证一下,没问题的话就没问题了。
至于备份的老容器,该删就删把,留着还占空间,这寸土寸金的地方还是拿来干点有用的事情。
网上其实很多分享的升级方法,只是几乎都是针对前后都是latest版本的。前后版本TAG不一致的话,稍微增加了一点工作。