分享两个Docker容器更新的方法,适用于大部分的容器更新。
目前碰到两个容器(postgres、tinymediamanager)大版本更新的时候需要特别的方式迁移数据,不适用以下两个方法,大版本更新的时候特别需要做好数据还有映像的备份。
方法一 手动更新
下载最新的映像
下载最新的映像,可以在套件内注册表直接下载,或者连接ssh使用docker pull命令下载。
旧容器备份
停止 旧容器,并且删除旧容器的端口映射 ,为新容器腾出端口。保存。
新建新容器
右键点击停止的旧容器,选择复制设置
通过复制设置新建一个新容器,新容器将会用你下载的最新映像新建,同时保留了旧容器的设置,通过这个方法来进行容器的更新。
新容器建好后,打开新容器设置 ,把原来的端口映射 填好,保存 ,启动新容器。
- 启动新容器之后,查看测试一下新容器是否完全更新启动好。如果没有问题的话,就可以将旧容器删除。
旧映像删除
新容器下载后,旧印象的latest 标签(TAG)会被新容器取代,旧容器的标签(TAG)会变成none。旧容器删除之后并不能删除掉旧映像,并且在套件后台是看不到映像的,需要删除的话要按照以下的方法连接SSH删除。
启动SSH功能
打开控制面板 ,点击终端机和SNMP ,勾选启动SSH功能点击应用。
连接SSH
使用Putty或者Xshell等SSH客户端工具软件连接。本文以Xshell为例。
打开Xshell,新建连接,输入你的NAS地址和端口点击确定,在输入用户名和密码后就进入终端机界面。
查看删除映像
首先输入sudo -i
,回车后在输入一次密码,获取权限。然后在输入docker images
查看映像。 如上图所示,有几个TAG是none 的映像。都是之前更新下载没有删除的。复制好需要删除的映像ID,用docker rmi <image id> <image id>
来删除映像,多个映像ID使用空格隔开。删除映像后可以使用docker images
查看映像,看是否删除成功。
更新失败说明
- 如果发现新容器没有安装成功,可能是容器不适用于此方法更新。
- 可以删除新容器,把旧容器的端口映射设置回来,启动旧容器,大多数时候还能使用回旧容器。
- 然后去查看具体容器的文档,看是否有更新容器的具体方法。
方法二 一键更新
群晖DSM 7.2发布之后,Docker改名为Container Manager。全新的名字,也带来了不少的变化。其中最让我眼前一亮的是支持提醒映像更新,可以一键更新映像,还能提醒移除未使用的一键。
本方法就是采用群晖Container Manager自带的更新功能,更新起来非常方便,会自动删除旧映像,不过就没有备份旧容器的操作。使用本功能更新前建议做好备份!
查看更新
本功能需要NAS可以正常访问Dockerhub才可以使用,不然看不到更新提示。
在映像也可以看到有可用更新的提示才能进行下一步,不然无法用此方法更新。
下载映像及更新
点击可用更新的 后会跳出提示框,提示有数据清除的风险,再次建议事先做好数据备份!!!同时可以去查看一下更新的版本内容,如果是大版本更新不建议采用此方法,还是好好看看具体容器的更新文档。
确认完毕后开始更新,开始下载映像,然后就自动更新。过程非常无感。需要耐心等待一段时间,不要乱停止启动正在更新的容器。
更新完成后,可用更新的提示消失,容器正常启动就说明更新完成。
补充说明
如果容器存在链接的情况下,会出现链接的容器是连接到一个容器名.syno.bak的容器,会导致找不到正确的链接的容器的情况,此时只要去对应的容器中,重新修改链接到更新好的容器名上去就好。
也侧面可以推测该方法的更新原理应该与方法一差不多,先备份旧容器在复制新容器,只不过是一件操作完成了,不需要手动。
- 使用体验下来的感受,此方法用于小版本的容器升级非常高效便携,不过大版本的还是自己手动做好备份更新,不然可能带来更多的不便(T_T 本人经历过惨痛的教训...
- 一些容器更新频率高,如果看到更新提醒一定要管住自己的手,如没有需要不建议频繁更新,不然也会带来更多的不便(T_T 又是一个惨痛的教训...