Watchtower memecahkan masalah umum tentang cara memperbarui wadah Docker yang berjalan saat gambar baru dirilis. Watch Tower secara otomatis “mengawasi” kontainer Anda, secara berkala melakukan polling untuk versi baru gambar mereka, dan memulai ulang sehingga mereka menjalankan rilis baru.
Dalam artikel ini kami akan menunjukkan cara menggunakan Watch Tower untuk menyederhanakan administrasi armada kontainer Anda. Kami juga akan melihat opsi lanjutan yang dapat Anda gunakan untuk menyesuaikan perilaku Watch Tower.
Menyebarkan Watch Tower
Langkah pertama adalah memulai instance Watch Tower di dalam wadah Dockernya sendiri. Jalankan perintah berikut untuk mengunduh gambar Watch Tower dan membuat wadah:
$ docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower
Docker host Anda soket dipasang ke wadah Watch Tower dengan bendera -v. Ini memungkinkan Watchtower untuk berinteraksi dengan instance daemon Docker host Anda. Ini diperlukan agar Watch Tower dapat menghitung dan memulai container.
Watch Tower dapat digunakan dengan host Docker jarak jauh. Buka daemon Docker host tersebut pada port TCP, lalu mulai Watch Tower dengan variabel lingkungan DOCKER_HOST alih-alih ikatan soket:
$ docker run -d --name watchtower -e DOCKER_HOST="tcp://192.168.0.1:2375" containrrr/watchtower
Jika host Docker Anda dilindungi dengan TLS, gunakan flag –tlsverify Watchtower dan pasang sertifikat Anda ke direktori /etc/ssl/docker container:
$ docker run -d --name watchtower -e DOCKER_HOST="tcp ://192.168.0.1:2375" -e DOCKER_CERT_PATH=/etc/ssl/docker -v ./certs:/etc/ssl/docker containrrr/watchtower --tlsverify
Watchtower dirancang untuk dijalankan sekali per host Docker. Saat instance Watch Tower baru dimulai, itu akan membersihkan wadah Watch Tower lainnya yang sudah ada. Anda dapat menjalankan beberapa instance dengan menetapkan masing-masing cakupan unik, tetapi ini biasanya tidak diperlukan di sebagian besar penerapan.
Menggunakan Watch Tower
Wadah Watch Tower Anda segera mulai memantau wadah lain di host Docker Anda. Ini akan melakukan polling untuk pembaruan gambar setiap 24 jam sekali dan memulai ulang penampung Anda saat terjadi perubahan.
Penampung baru mempertahankan opsi yang sama seperti aslinya tempat mereka dibuat. Pengikatan port, pemasangan volume, variabel lingkungan, dan pengaturan lainnya semuanya akan utuh pada replacement.
Watchtower juga sadar akan ketergantungan: ketika wadah ditautkan bersama, Watch Tower akan berhenti dan memulainya dalam urutan yang logis. Layanan yang bergantung pada penampung tertentu akan dihentikan sebelum penampung tersebut diperbarui, kemudian dimunculkan kembali setelah penggantinya tersedia. Ini memastikan aplikasi Anda tidak mengalami kesalahan saat dependensinya diperbarui.
Watchtower mengirimkan sinyal SIGTERM ke container saat perlu dihentikan untuk pembaruan. Anda dapat mengubah sinyal ini dengan menetapkan label pada wadah Anda. Berikut cara beralih ke SIGHUP daripada SIGTERM:
$ docker run -d --label=com.centurylinklabs.watchtower.stop-signal=SIGHUP my-image
Excluding and Include Containers
Anda dapat menyesuaikan container mana yang dipantau menggunakan kombinasi argumen perintah Watch Tower dan label Docker pada wadah individual Anda. Berikut adalah contoh memulai wadah yang tidak disertakan dalam pembaruan Watch Tower menggunakan label:
$ docker run -d --label=com.centurylinklabs.watchtower.enable=false my-image
Dimungkinkan juga untuk memasukkan wadah yang seharusnya masuk ke daftar putih diperbarui, alih-alih menyisih dari yang seharusnya tidak. Mulai Watch Tower dengan flag –label-enable untuk mengaktifkan perilaku ini:
$ docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower - -label-enable
Sekarang gunakan label untuk menetapkan beberapa wadah yang memenuhi syarat untuk menerima pembaruan:
$ docker run -d --label=com.centurylinklabs.watchtower.enable=true my-imageLifecycle Hooks
Watchtower secara opsional dapat menjalankan skrip di dalam wadah Anda saat peristiwa tertentu terjadi. Empat pengait tersedia:
- pre-check – Sebelum Watchtower memeriksa apakah pembaruan tersedia untuk container.
- pre-update – Setelah pembaruan ditemukan tetapi sebelum container dimulai ulang.
- post-update – Setelah pembaruan selesai.
- post- check – Setelah pemeriksaan container untuk pembaruan telah selesai.
Hooks dikonfigurasi menggunakan label container. Nilai label harus berupa jalur ke file yang dapat dieksekusi di dalam gambar kontainer. Ini akan dipanggil setiap kali hook fires.
Berikut adalah contoh penggunaan hook pra-pembaruan:
$ docker run -d --label=com.centurylinklabs.watchtower.lifecycle.pre-update="/backup.sh -- create" my-image
Hook lainnya dikonfigurasi dengan cara yang sama dengan mengganti namanya ke dalam label.
Notifications dan Monitoring
Watchtower dapat mengirimi Anda pemberitahuan melalui email, Slack, Microsoft Teams, Gotify, dan Shoutrrr saat pembaruan container tersedia. Masing-masing mekanisme pengiriman ini perlu dikonfigurasi secara terpisah dengan menyetel variabel lingkungan di wadah Watch Tower Anda.
Berikut adalah contoh dasar yang menggunakan Gmail:
$ docker run -d --name watchtower -e WATCHTOWER_NOTIFICATIONS=email -e WATCHTOWER_NOTIFICATION_EMAIL_FROM=you@gmail / .com -e WATCHTOWER_NOTIFICATION_EMAIL_TO=anda@gmail.com -e WATCHTOWER_NOTIFICATION_EMAIL_SERVER=smtp.gmail.com -e WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PORT=587 -e WATCHTOWER_NOTIFICATION_EMAIL_anda@gmail.com_USER_WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PORT=587 -e WATCHTOWER_NOTIFICATION_EMAIL_Anda@gmail.com_USER /var/run/docker.sock containrrr/watchtower
Watchtower juga mendukung mode operasi yang memeriksa pembaruan container tanpa menerapkannya. Anda dapat menggunakan ini untuk diberi tahu saat pembaruan tersedia, kemudian memulai ulang container Anda sendiri pada waktu yang tepat.
Aktifkan mode ini dengan flag –monitor-only:
$ docker run -d --name watchtower -v /var/ run/docker.sock:/var/run/docker.sock containrrr/watchtower --monitor-only
Ada juga label yang dapat diatur pada masing-masing wadah untuk memasukkannya ke mode pemantauan:
$ docker run -d --label =com.centurylinklabs.watchtower.monitor-only=true my-imageMengubah Interval Polling Pembaruan
Watchtower memeriksa gambar baru setiap 24 jam. Interval ini dapat diubah dengan flag –interval atau variabel lingkungan WATCHTOWER_POLL_INTERVAL. Ia menerima nilai dalam detik.
# Perbarui setiap jam $ docker run -d --name watchtower -e WATCHTOWER_POLL_INTERVAL=3600 -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower
Atau Anda dapat menentukan jadwal polling tetap menggunakan sintaks cron. Ini diterima sebagai flag –schedule atau variabel lingkungan WATCHTOWER_SCHEDULE.
# Perbarui setiap lima menit $ docker run -d --name watchtower -e WATCHTOWER_SCHEDULE="*/5 * * * *" -v /var/run/ docker.sock:/var/run/docker.sock containrrr/watchtower
Membersihkan Gambar Lama
Watchtower meninggalkan versi lama gambar kontainer di host Anda setelah yang baru ditarik. Menyetel tanda –cleanup atau variabel lingkungan WATCHTOWER_CLEANUP akan menghapus gambar lama setelah pembaruan. Ini dapat secara signifikan mengosongkan ruang disk dari waktu ke waktu.
$ docker run -d --name watchtower -e WATCHTOWER_CLEANUP=true -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower
Running On -Demand
Watchtower dirancang untuk berjalan sebagai daemon berumur panjang yang terus memantau container untuk pembaruan. Terkadang Anda mungkin ingin memeriksa gambar baru secara manual sesuai permintaan. Anda dapat melakukannya dengan perintah –run-once flag:
$ docker run --rm -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower --run-once
This akan melakukan satu upaya pembaruan untuk semua wadah Anda yang sedang berjalan. Wadah Watch Tower kemudian akan berhenti dan dihapus.
Menggunakan Registrasi Pribadi
Watchtower memerlukan detail autentikasi untuk memeriksa pembaruan gambar di registri pribadi. Salah satu cara untuk menyediakannya adalah dengan memasang file Docker config.json Anda ke /config.json di Wadah Watch Tower Anda:
$ docker run -d --name watchtower -v $HOME:/.docker/config.json:/config .json -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower
Ada peringatan dengan pendekatan ini: pembaruan ke config.json di Host Anda tidak selalu tercermin di dalam wadah. Perintah seperti login buruh pelabuhan sebenarnya mengganti file, bukan langsung mengeditnya. Ini membuat inode baru, memutus ikatan Docker mount.
Cara lain untuk memberikan kredensial registri ke Watch Tower adalah variabel REPO_USER dan REPO_PASS-nya. Ini akan login sebagai pengguna yang ditentukan sebelum mencoba menarik gambar Anda.
$ docker run -d --name watchtower -e REPO_USER=demo-user -e REPO_PASS=users-password -v /var/run/docker.sock :/var/run/docker.sock containrrr/watchtower
Kesimpulan
Watchtower memungkinkan Anda mengotomatiskan pembaruan wadah Docker saat gambar baru didorong ke registri. Ini adalah sistem yang sangat dapat disesuaikan yang mendukung daftar hitam dan daftar putih container, penjadwalan lanjutan dengan sintaks cron, dan pemberitahuan yang dikirimkan ke beberapa penyedia populer.
Parameter konfigurasi opsional memaparkan fungsionalitas lebih lanjut, seperti memulai ulang bergulir, pembaruan memulai ulang dan menghentikan wadah, dan dukungan untuk memaparkan metrik yang memberi Anda cara lain untuk memvisualisasikan aktivitas pembaruan. Hal ini membuat Watchtower menjadi pilihan yang baik untuk mengelola sekumpulan container Docker produksi yang sibuk.