Ubuntu 26. 04 LTSがでて、まだ対応していないかと思ったら、早速Dockerは対応していた。実は、Dockerだけではなく、incusも対応していた。
Dockerのインストール
# prerequisites
sudo apt update
sudo apt install -y ca-certificates curl gnupg
# keyring
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
sudo gpg –dearmor -o /etc/apt/keyrings/docker.gpg
# repo
echo \
“deb [arch=$(dpkg –print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu \
resolute stable” | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# install
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# Install via script
curl https://raw.githubusercontent.com/jesseduffield/lazydocker/master/scripts/install_update_linux.sh | bash
cp ~/.local/bin/lazydocker /usr/local/bin/
curl -L https://github.com/bcicen/ctop/releases/download/v0.7.7/ctop-0.7.7-linux-amd64 -o /usr/local/bin/ctop
chmod +x /usr/local/bin/ctop
Watchtowerのインストール
containrrr/watchtowerは、いつの間にかPublic Archiveになっていたので、nickfedor/watchtowerを使う。(ググると、containrrr/watchtowerばかりなので知らなかった。)
watchtower を Docker Compose で常駐させれば、対象コンテナの latest を定期的に pull して、更新があれば再作成をしてくれる。全コンテナ自動更新ではなく、label (com.centurylinklabs.watchtower.enable: “true”)が付いたものだけ更新 させる。
更新は人知れずやられても困るので、Discordに連絡を入れてもらうようにする。
注意点
-
DOCKER_API_VERSION: “1.40”を有効にすると下に合わさってしまうので、コメントアウト。コメントアウトをすれば、1.51で稼働
-
WATCHTOWER_ROLLING_RESTART: “true”だとDependしているcompose.ymlでエラーになってしまうので、コメントアウト
mkdir -p /opt/containers/watchtower
cd /opt/containers/watchtower
cat << ‘EOF’ > .env
DISCORD_WEBHOOK=discord://123456789012345678/XXXXXXXXXXXXXXXX
EOF
chmod 600 .env
cat << ‘EOF’ > compose.yml
services:
watchtower:
image: nickfedor/watchtower:latest
container_name: watchtower
restart: unless-stopped
volumes:
– /var/run/docker.sock:/var/run/docker.sock
environment:
TZ: Asia/Tokyo
# DOCKER_API_VERSION: “1.40”
# Update method
WATCHTOWER_LABEL_ENABLE: “true”
# WATCHTOWER_ROLLING_RESTART: “true”
WATCHTOWER_TIMEOUT: “30s”
# Schedule
WATCHTOWER_SCHEDULE: “0 30 4 * * *”
# Cleanup
WATCHTOWER_CLEANUP: “true”
WATCHTOWER_REMOVE_VOLUMES: “false”
# Notify
WATCHTOWER_NOTIFICATIONS: shoutrrr
WATCHTOWER_NOTIFICATION_URL: “${DISCORD_WEBHOOK}”
WATCHTOWER_NOTIFICATIONS_LEVEL: “info”
WATCHTOWER_NOTIFICATION_TITLE_TAG: “{{.Hostname}}”
# Log
WATCHTOWER_LOG_FORMAT: “json”
# Stable
WATCHTOWER_INCLUDE_RESTARTING: “true”
# Enable this only for the first test run.
# WATCHTOWER_MONITOR_ONLY: “true”
# WATCHTOWER_DEBUG: “true”
labels:
com.centurylinklabs.watchtower.enable: “true”
EOF
docker compose config | grep WATCHTOWER_NOTIFICATION_URL
docker compose up -d
docker logs -f watchtower
あっさりできてしまった。