Docker’ı kullanmak, yazılım geliştirme için uygulamaları standart birimlere paketlemenize olanak sağlamak gibi birçok avantaj sağlar. Bu, uygulamalarınızı dağıtmayı ve ölçeklendirmeyi kolaylaştırır.
Ancak, bir sunucudaki Docker görüntülerinin güncellemelerini yönetmek sıkıcı hale gelebilir. Bir görüntünün yeni sürümlerini manuel olarak çekmeniz ve her güncelleme yayınlandığında her kapsayıcıyı yeniden başlatmanız gerekir.
İşte Watchtower tam da bu noktada işe yarıyor! Watchtower, çalışan Docker konteynerlarınızı izleyecek ve bu konteynerların başlangıçta başlatıldığı imajlardaki değişiklikleri izleyecek konteyner tabanlı bir çözümdür.
Watchtower bir görüntünün değiştiğini tespit ettiğinde, yeni görüntüyü çekip en son sürümle çalıştırmak için ilgili kapsayıcıları otomatik olarak yeniden başlatır.
Bu kapsamlı rehberde, Watchtower’ın Ubuntu 20.04/22.04’te nasıl kurulacağını ve kapsayıcıları otomatik olarak güncelleyecek şekilde nasıl yapılandırılacağını ele alacağız.
Ön koşullar
Watchtower kurulumuna başlamadan önce, ihtiyacınız olan birkaç ön koşul bulunmaktadır:
- Docker yüklü bir Ubuntu 20.04/22.04 sunucusu
- Docker önyüklemede otomatik olarak başlatılacak şekilde yapılandırıldı (varsayılan olmalıdır)
- Sunucuda halihazırda çalışan ve güncel tutmak istediğiniz birkaç Docker konteyneri
Ubuntu sunucunuz hazır olduğunda, Docker aktif olduğunda ve bazı konteynerlar çalıştığında, Watchtower’ı yüklemeye geçebiliriz.
Adım 1 – Watchtower’ı yükleyin
Watchtower bir Docker imajı olarak dağıtılır, bu yüzden kurulum o imajdan bir konteyner çalıştırmak kadar basittir. Watchtower imajı Docker Hub’da barındırılır.
En son Watchtower görüntüsünü aşağı çekin:
$ docker pull containrrr/watchtower
Görüntünün indirilmesi tamamlandıktan sonra bir Watchtower konteyneri çalıştırabilirsiniz:
$ docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower
Docker run komutuna geçirdiğimiz seçeneklere bir göz atalım:
-d – Watchtower konteynerini ayrı modda çalıştırır
--name watchtower – Konteyneri daha kolay tanımlanabilmesi için "watchtower" olarak adlandırır
-v /var/run/docker.sock:/var/run/docker.sock – Docker soketini Watchtower konteynerine bağlar, böylece Docker daemon'uyla iletişim kurabilir
containrrr/watchtower – Kullanılacak Watchtower Docker görüntüsü
Bu, arka planda diğer konteynerlerinizi izlemeye hazır bir Watchtower konteyneri oluşturacak ve başlatacaktır.
Adım 2 – Watchtower Bildirim Seçeneklerini Yapılandırın
Varsayılan olarak, Watchtower size bildirimde bulunmadan arka planda konteyner görüntü güncellemelerini sessizce kontrol edecektir. Watchtower’ı başlatırken birkaç ortam değişkeni ayarlayarak bu davranışı değiştirebilirsiniz:
Konteynerler Üzerindeki Bildirimler
Watchtower kapsayıcıları güncellediğinde bildirim almak için -e WATCHTOWER_NOTIFICATIONS=email ortam değişkenini geçirin.
Bildirimler için birkaç seçenek bulunmaktadır:
- email – E-posta bildirimleri gönderecek. Ek yapılandırma gerektirir.
- slack –Slack’e bildirim gönderebilirsiniz. Webhook URL’si ve kanal gerektirir.
- msteams –MS Teams’e bildirimler gönderin. Webhook URL’si gerektirir.
- gotify – Gotify üzerinden bildirim gönderin. Uygulama belirteci ve sunucu URL’si gerektirir.
Örneğin:
$ docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock -e WATCHTOWER_NOTIFICATIONS=email containrrr/watchtower
Bu, konteynerler güncellendiğinde e-posta bildirimlerinin gönderilmesini sağlayacaktır.
Watchtower Başlatma/Çıkış Bildirimleri
Ayrıca, -e WATCHTOWER_NOTIFICATIONS_LEVEL=start-exit komutunu vererek Watchtower konteyneri başlatıldığında veya kapatıldığında bildirim alabilirsiniz:
$ docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock -e WATCHTOWER_NOTIFICATIONS=email -e WATCHTOWER_NOTIFICATIONS_LEVEL=start-exit containrrr/watchtower
Bu, hem konteyner güncellemelerinde hem de Watchtower başladığında/durduğunda bildirim gönderecektir.
Bildirim Hizmetleri Yapılandırması
Bildirimleri etkinleştirirseniz, bildirim hizmetleri için yapılandırma sağlamanız gerekecektir.
Bu, ek ortam değişkenlerini geçirerek veya YAML yapılandırma dosyalarını konteynera bağlayarak yapılır.
E-posta Yapılandırması
E-posta bildirimleri almak için şunları sağlamanız gerekir:
WATCHTOWER_EMAIL_FROM
– The address to send notification emails fromWATCHTOWER_EMAIL_TO
– The address to send notifications toWATCHTOWER_EMAIL_SERVER
– SMTP server addressWATCHTOWER_EMAIL_SERVER_PORT
– SMTP server portWATCHTOWER_EMAIL_SERVER_USER
– SMTP user nameWATCHTOWER_EMAIL_SERVER_PASSWORD
– SMTP password
Gmail için şöyle görünecektir:
$ docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock \
-e WATCHTOWER_NOTIFICATIONS=email \
-e WATCHTOWER_EMAIL_FROM=[email protected] \
-e WATCHTOWER_EMAIL_TO=[email protected] \
-e WATCHTOWER_EMAIL_SERVER=smtp.gmail.com \
-e WATCHTOWER_EMAIL_SERVER_PORT=587 \
-e WATCHTOWER_EMAIL_SERVER_USER=[email protected] \
-e WATCHTOWER_EMAIL_SERVER_PASSWORD=gmail_password \
containrrr/watchtower
Slack Yapılandırması
Slack’e gönderi yapmak için şunlara ihtiyacınız var:
WATCHTOWER_NOTIFICATIONS_SLACK_WEBHOOK_URL
– Your Slack webhook URLWATCHTOWER_NOTIFICATIONS_SLACK_CHANNEL
– The Slack channel to post to
Örneğin:
$ docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock \
-e WATCHTOWER_NOTIFICATIONS=slack \
-e WATCHTOWER_NOTIFICATIONS_SLACK_WEBHOOK_URL=https://hooks.slack.com/services/xxx \
-e WATCHTOWER_NOTIFICATIONS_SLACK_CHANNEL="#channel-name" \
containrrr/watchtower
MS Teams Yapılandırması
MS Teams bildirimleri için yalnızca şunları sağlamanız gerekir:
WATCHTOWER_NOTIFICATIONS_MSTEAMS_WEBHOOK_URL
– MS Teams webhook URLniz
Örneğin:
$ docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock \
-e WATCHTOWER_NOTIFICATIONS=msteams \
-e WATCHTOWER_NOTIFICATIONS_MSTEAMS_WEBHOOK_URL=https://webhook.teams.microsoft.com/xxx \
containrrr/watchtower
Yapılandırma Dosyalarını Kullanma
Ortam değişkenlerini geçirmek yerine, bildirim yapılandırmalarınızı YAML dosyalarında tanımlayabilir ve bunları Watchtower konteynerine bağlayabilirsiniz.
Bu, yapılandırmalarınızı harici olarak saklamanızı ve uzun komut dizeleri iletmenize gerek kalmamasını sağlar.
Yapılandırma dosyası yolları:
/config/email.yaml
– Email configuration/config/slack.yaml
– Slack configuration/config/msteams.yaml
– MS Teams configuration
Özel YAML dosyalarınızı varsayılan boş dosyaların üzerine yerleştirin.
Örneğin e-posta bildirimleri için:
$ docker run -d --name watchtower \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /path/to/email.yaml:/config/email.yaml \
containrrr/watchtower
Email.yaml dosyanız şunları içerecektir:
email:
from: [email protected]
to: [email protected]
server: smtp.gmail.com
port: 587
user: [email protected]
password: gmail_password
Bu, bildirim yapılandırmalarınızı Watchtower konteynerinin dışında ve ondan ayrılabilir tutar.
Adım 3 – Hangi Kapsayıcıların Güncelleneceğini Kontrol Edin
Varsayılan olarak, Watchtower Docker daemon’unda çalışan tüm kapsayıcıları izleyecek ve imajın yenilendiği tüm kapsayıcıları güncelleyecektir.
Watchtower’ın bunları otomatik olarak güncellemesini önlemek için kapsayıcıları adlarına veya etiketlerine göre hariç tutabilirsiniz:
Konteyner Adına Göre Hariç Tut
İsimler için –exclude seçeneğini bir regex filtresiyle geçirin:
$ docker run -d --name watchtower \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower --exclude "my-container-name|another-container"
Konteyner Etiketi ile Hariç Tutma
Label containers with com.centurylinklabs.watchtower.enable=false
to exclude:
$ docker run -d --label com.centurylinklabs.watchtower.enable=false nginx
Bu etikete sahip konteynerler Watchtower tarafından dikkate alınmayacaktır.
Yalnızca Eşleşen Kapsayıcıları Dahil Etme
Ayrıca –include kullanarak yalnızca bir desenle eşleşen kapsayıcıları güncellemek için kapsayıcıları beyaz listeye alabilirsiniz:
$ docker run -d --name watchtower \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower --include "container-a|container-b"
Artık Watchtower yalnızca container-a veya container-b adlı kapsayıcıları otomatik olarak güncelleyecek, diğerlerini görmezden gelecek.
Adım 4 – Gözcü Kulesi Anket Aralıklarını Değiştirin
Watchtower varsayılan olarak her birkaç dakikada bir yeni görselleri kontrol edecektir. Watchtower’ın yeni görseller için ne sıklıkla anket düzenleyeceğini değiştirebilirsiniz.
Yeni Görüntüleri Kontrol Et
Watchtower’ın yeni görselleri ne sıklıkla kontrol edeceğini değiştirmek için –interval seçeneğini bir süre dizesiyle birlikte geçirin:
$ docker run -d --name watchtower \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower --interval 5m
Bu sayede Watchtower her 5 dakikada bir yeni görselleri kontrol edecek.
Konteynerleri Yeniden Başlat
Varsayılan olarak, Watchtower, kapsayıcıları yeniden başlatmadan önce bir görüntü güncellemesinden sonra 10 dakika bekleyecektir. Watchtower’ın yeniden başlatılmadan önce beklediği süreyi –restart-delay ile değiştirebilirsiniz:
$ docker run -d --name watchtower \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower --restart-delay 2m
Bu, yeniden başlatma gecikmesini 2 dakikaya ayarlayacaktır.
Adım 5 – Watchtower Başlatma İşlemini Otomatikleştirin
Son adım, Docker daemon başlatıldığında Watchtower’ın otomatik olarak başlatıldığından emin olmaktır. Bu, sunucuyu her yeniden başlattığınızda Watchtower’ı çalıştıracaktır.
Watchtower’ı önyüklemede başlatmak için basit bir systemd birim dosyası oluşturabilirsiniz.
/etc/systemd/system/watchtower.service dizininde şu tanımı içeren bir birim dosyası oluşturun:
[Unit]
Description=Watchtower - Auto update Docker containers
Requires=docker.service
After=docker.service
[Service]
Restart=always
ExecStart=/usr/bin/docker start -a watchtower
ExecStop=/usr/bin/docker stop -t 2 watchtower
[Install]
WantedBy=multi-user.target
Bu, Docker daemon başlatıldığında oluşturduğumuz Watchtower konteynerini başlatacaktır.
Systemd’yi yeniden yükleyin ve Watchtower hizmetinin önyükleme sırasında başlamasını sağlayın:
$ sudo systemctl daemon-reload
$ sudo systemctl enable watchtower
Gözetleme Kulesi artık sunucuyu her yeniden başlattığınızda otomatik olarak çalışacak.
Adım 6 – Docker Compose’da Watchtower’ı Kurun
Watchtower’ı Docker Compose yığınının bir parçası olarak da çalıştırabilirsiniz.
Docker-compose.yml dosyanıza şu şekilde bir watchtower servisi ekleyin:
version: "3"
services:
app:
image: myapp
ports:
- "8080:80"
watchtower:
image: containrrr/watchtower
volumes:
- /var/run/docker.sock:/var/run/docker.sock
command: --interval 30
Bu, Watchtower’ı, oluşturduğunuz dosyada tanımlanan uygulama/hizmet kapsayıcılarıyla birlikte başlatacaktır.
Watchtower diğer servisleri izleyecek ve yeni sürümler yayınlandıkça tüm görselleri otomatik olarak güncelleyecektir.
Birimler Docker soketini bağlar, böylece Watchtower Docker daemon’ıyla iletişim kurabilir.
Komut kontrol aralığını 30 saniyeye ayarlar. Bu aralığı gerektiği gibi özelleştirebilirsiniz.
Artık docker-compose up komutunu çalıştırdığınızda Watchtower görsellerinizi anında güncel tutacak!
Docker Compose’u kullanmak, Watchtower izlemeyi yeni ve mevcut yığınlara kolayca eklemenizi sağlar. Herhangi bir yeni veya mevcut görüntüyü otomatik olarak güncellemeye başlamak için sadece watchtower hizmetini ve birim bağlantı noktasını ekleyin.
Yazının orijinalini buradan okuyabilirisniz.

Kariyerime 26 yıl önce başladım. Windows ve Linux sistemlerinin kurulumu, yapılandırılması, yönetimi ve bakımı dahil olmak üzere birden fazla sistem üzerinde uzmanlaştım.
Açık kaynak dünyasındaki en son gelişmelerden haberdar olmaktan ve Linux hakkındaki en son araçları, özellikleri ve hizmetleri denemekten hoşlanıyorum.
Son 6 yıldır sistem ve ağ yöneticisi olarak görev yapıyorum ayrıca Pardus Dönüşüm Projesini yönetiyorum ve Pardus İşletim Sisteminin yaygınlaşması adına uğraş gösteriyorum.
Boş zamanlarımda açık kaynaklı uygulamaların Türkçe çevirisine katılıyorum ve The Document Foundation üyesiyim.