我们在docker中建立了很多容器之后,经常需要对容器进行管理和更新。一般我使用的docker容器更新方法有两种。
重新创建容器
方法1就是重新建立docker容器,这里即可以使用命令,也可以使用一些例如portainer的软件,就跟我们第一次建立容器没有什么区别,就是要使用最新的容器镜像,如果已经持有化相关数据,那么直接挂载即可。
一般我们更新容器需要以下四个步骤
# 停止容器
docker stop <container name/id>
# 删除容器
docker rm <container name/id>
# 更新镜像
docker pull <image>
#重新启动容器
docker run <arg> ... <image>
#或者使用docker-compose命令
docker-compose up -d
使用watchower来进行更新
但是如果我们有大量容器需要更新,那么这么一个个更新会很麻烦,而watchower这个软件给我们提供了一个非常好的选择,不但部署之后可以监控相关容器的更新,而它本身也是一个容器,所以可以快速部署。
部署watchower
docker run -d \\
--name watchtower \\
-v /var/run/docker.sock:/var/run/docker.sock \\
containrrr/watchtower
docker-compose.yml文件
version: "3"
services:
watchtower:
image: containrrr/watchtower
volumes:
- /var/run/docker.sock:/var/run/docker.sock
通过相关参数可以对watchower进行更精确的控制,相关参数可以在官网查看
例如自用创建命令,设置了时区,自动清理过时镜像,执行时间,更新列表等。
docker run -d \\
--name watchtower \\
-v /var/run/docker.sock:/var/run/docker.sock \\
-e TZ=Asia/Shanghai \\
containrrr/watchtower \\
--schedule "0 0 5 * * *" \\
--cleanup \\
# 更新名单,下面都是容器名称
qbittorrent jackett sonarr portainer-ce emby-embyserver ttrss opencc postgres mercury
上面的方法看起来不错,但是我们每次需要去更新执行文件或者执行命令,有没有一种方法可以让我们的更新名单配置化呢?方法就是我们可以使用w
在watchower本地文件中建立watchtower.list
watchtower.list列表内容如下
qbittorrent
jackett
sonarr
portainer-ce
emby-embyserver
ttrss
opencc
postgres
mercury
再次建立容器,使更新名单生效
docker run -d \\
--name watchtower \\
--restart unless-stopped \\
-v /var/run/docker.sock:/var/run/docker.sock \\
-e TZ=Asia/Shanghai \\
containrrr/watchtower \\
--cleanup \\
--schedule "0 0 5 * * *" \\
# 挂载本地化名单
$(cat /volume1/docker/watchower/watchtower.list)