Watchtower – 自动更新 Docker 镜像与容器

7次阅读
没有评论

共计 2273 个字符,预计需要花费 6 分钟才能阅读完成。

Watchtower 是一款实现自动化更新 Docker 镜像与容器的实用工具. 它监控着所有正在运行的容器以及相关镜像, 当检测本地镜像与镜像仓库中的镜像有差异时, 会自动拉取最新镜像并使用最初部署时的参数重新启动相应的容器.

快速启动

执行以下标准命令启动 Watch­tower 容器, 并每 5 分钟一次检查所有容器的镜像是否为最新版, 如发现镜像更新将会自动 停止容器 , 删除容器 , 拉取最新镜像 , 在以之前启动容器的命令 启动容器.

docker run -d \
    --name watchtower \
    -v /var/run/docker.sock:/var/run/docker.sock \
    containrrr/watchtower

清理旧镜像

镜像在更新后旧镜像标签会变为 none, 长期自动更新会导致过多的none 镜像占用空间, 加入 --cleanup 参数可以在每次更新后自动删除 none 镜像.

docker run -d \
    --name watchtower \
    --restart always \
    -v /var/run/docker.sock:/var/run/docker.sock \
    containrrr/watchtower \
    --cleanup

指定容器更新

如无需自动更新所有稳定运行的容器, 可以配置仅更新指定容器, 只需要在命令后加上容器名. 例如 只更新 nginxredis.

docker run -d \
    --name watchtower \
    --restart always \
    -v /var/run/docker.sock:/var/run/docker.sock \
    containrrr/watchtower \
    --cleanup \
    nginx redis

注意指定容器需填写 容器名 , 并非镜像名. 由于部分容器启动时可能没有定义 --name 参数, 请执行 docker ps 查询核对容器名.

配置自动更新频率

Watch­tower 默认每 5 分钟轮询一次, 可以使用以下参数配置更新的频率.

  • --interval,-i 配置更新周期, 默认 300 秒.
  • --schedule,-s 配置定时更新, 使用Cron 表达式, 例如"0 0 1 * * *". 即每天凌晨 1 点更新.

注意: 当使用 -s 参数来配置定时更新时, 由于容器内默认为 UTC 时间, 上述设置的 凌晨 1 点 实际上是北京时间 早上 9 点 . 可以通过加上 -e TZ=Asia/Shanghai 环境变量来定义时区, 此时配置的时间则为北京时间.

每小时更新一次

docker run -d \
    --name watchtower \
    --restart always \
    -v /var/run/docker.sock:/var/run/docker.sock \
    containrrr/watchtower \
    --cleanup \
    -i 3600

每天凌晨 4 点更新(北京时间)

docker run -d \
    --name watchtower \
    --restart always \
    -e TZ=Asia/Shanghai \
    -v /var/run/docker.sock:/var/run/docker.sock \
    containrrr/watchtower \
    --cleanup \
    -s "0 0 4 * * *"

手动更新

使用手动更新的方式, 运行一次 Watch­tower 容器来更新所需的容器, 更新后会自动删除本次运行的 Watch­tower 容器. 只需要加上 --rm--run-once参数即可. 同时也可以配合以上 指定容器 或指 定排除容器 的参数来使用.

手动更新所有容器

docker run --rm \
    -v /var/run/docker.sock:/var/run/docker.sock \
    containrrr/watchtower \
    --cleanup \
    --run-once

手动更新指定容器

docker run --rm \
    -v /var/run/docker.sock:/var/run/docker.sock \
    containrrr/watchtower \
    --cleanup \
    --run-once \
    nginx redis

注意指定容器需填写 容器名 , 并非镜像名. 由于部分容器启动时可能没有定义 --name 参数, 请执行 docker ps 查询核对容器名.

手动运行更新时会出现以下消息, 表示正在更新, 请耐心等待几分钟.

time="2020-02-18T03:58:24Z" level=info msg="Running a one time update."

随后提示找到更新镜像, 停止容器, 更新镜像, 重启容器并移除旧镜像. 至此更新完毕.

time="2020-02-18T04:02:45Z" level=info msg="Found new xxxx/xxxx:latest image (sha256:10383f5b5720d7e1fxxxx137034c69b7f6xxxxxxafcc4e9d508b561af77)"time="2020-02-18T04:02:45Z" level=info msg="Stopping /xxxx (2e9ce1ebe319f3a35d80bxxxxxxxxxx6763ada155da957acb24fe76fc8a8c5) with SIGTERM"time="2020-02-18T04:02:46Z" level=info msg="Creating /xxxx"time="2020-02-18T04:02:46Z" level=info msg="Removing image sha256:ff4ee4caaa237174080c0d545xxxxxxxxxxxxxxx5d740ddc51e7737839cb5"
正文完
 0
苏维歌
版权声明:本站原创文章,由 苏维歌 2022-06-06发表,共计2273字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)
验证码