{
"type": "note",
"title": "使用 WatchTower 使容器自动化更新(简单用法)",
"tags": [
"post",
"docker",
"watchtower"
],
"sources": [
"xlog"
],
"external_urls": [
"https://mi.mmmm.im/shi-yong-WatchTower-shi-rong-qi-zi-dong-hua-geng-xin--jian-dan-yong-fa-"
],
"date_published": "2023-04-05T07:53:26.857Z",
"content": "随着 `Docker` 的普及,基本上 90% 的项目都会提供 `Docker` 来部署应用并且隔离。部署之前有一些基础经验还好,还能预先设定之后怎么进行更新、数据怎么进行保存。但是有一些对 `Docker` 几乎不了解的用户来说,可能只能跟着用户文档复制粘贴运行,后续更新相当茫然,只能重新部署一次。\n偶然在 `Github` 发现了 `WatchTower` 这个项目,我想这可能就是容器更新的最佳解决方案了。\n\n### 简单介绍\n\nWatchtower 是一个容器管理工具,推荐的安装方式也是使用 Docker。它能够监视 Docker 中的容器,并在其所依赖的镜像更新之后自动更新容器并恢复数据。\n\n### 一些优点\n\n1. 自动更新,不需要人工进行干预,更新时候会保存所有的数据信息。\n2. 简单易用,默认运行方式也是直接 Docker 运行,不需要其他多余配置。\n3. 自定义程度高,支持配置时间点、更新镜像策略、更新容器策略等。\n4. 轻量级且和现有的服务无缝集成,不需要其他多余的配置\n\n\n\n### 简单上手\n\n`WatchTower` 默认只需要执行下以下 `Docker` 命令就可以运行起来。默认为五分钟去检查一次,启动之后日志里面也会包含每次运行的时间、预计下次运行时间。\n\n```\ndocker run -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower\n```\n\n这里我们启动时还可以加上一些其他的设置。\n\n- 设置下默认时区,这里我只直接设置为东八区。\n- 后台运行。\n- 设置重启策略,即使 `docker` 重启了也还会继续运行。\n\n```\n# -d 后台运行\n# -e TZ=\"Asia/Shanghai\" 设置时区为东八区。\n# -v /var/run/docker.sock:/var/run/docker.sock 让 WatchTower 可以查询到容器信息。\ndocker run -d \\\n --name watchtower \\\n -e TZ=\"Asia/Shanghai\" \\\n --restart=always \\\n -v /var/run/docker.sock:/var/run/docker.sock \\\n containrrr/watchtower\n```\n\n### 扩展设置\n\n除了基础的应用,列出了一些比较常用的扩展配置:\n\n- `--run-once` 只执行一次。\n- `--cleanup` 执行完成之后清理未使用的镜像。\n- `--include-stopped` 停止的容器也去检查下。\n- `--schedule` 使用 `cron` 定时策略执行。\n- `--interval` 使用间隔时间去执行,和 `--schedule` 这个配置选择一个。\n\n\n\n结合以上,可以整理出来一些常用的方式\n\n1. 手动执行一次对容器镜像的更新,更新的时候包含已停止的容器,并且更新完之后执行一次清理。\n\n```\ndocker run --rm \\\n --name watchtower \\\n -e TZ=\"Asia/Shanghai\" \\\n -v /var/run/docker.sock:/var/run/docker.sock \\\n containrrr/watchtower \\\n --run-once \\\n --cleanup \\\n --include-stopped\n```\n\n![image](ipfs://bafkreiddgsnvcrotuhk4h46cb6ublizs2m6ikrwjrwjtmcmkflyenirnwm)\n\n\n2. 后台运行,每天早上五点执行一次检查(需要注意这里使用的 `cron` 是六位的,和 `linux` 系统默认支持的有所不同)。\n\n```\ndocker run -d \\\n --name watchtower \\\n -e TZ=\"Asia/Shanghai\" \\\n -v /var/run/docker.sock:/var/run/docker.sock \\\n containrrr/watchtower \\\n --cleanup \\\n --include-stopped \\\n --schedule \"0 0 5 * * *\"\n```\n\n![image](ipfs://bafkreibllackh4kyalfyebxhbgsu5t7rfyt5r5qogqbus4qa6itw2g5mqu)\n\n\n3. 后台运行,每小时执行一次检查(这里的单位是 `s`,所以一小时设置为 `3600`)。\n\n```\ndocker run -d \\\n --name watchtower \\\n -e TZ=\"Asia/Shanghai\" \\\n -v /var/run/docker.sock:/var/run/docker.sock \\\n containrrr/watchtower \\\n --cleanup \\\n --include-stopped \\\n --interval 3600\n```\n\n![image](ipfs://bafkreibo4tvwehctp6hn7qrccmsvwo56as2rpmekwgp2j3qiqewwquuy2u)\n",
"attributes": [
{
"value": "shi-yong-WatchTower-shi-rong-qi-zi-dong-hua-geng-xin--jian-dan-yong-fa-",
"trait_type": "xlog_slug"
}
]
}