30.12.2025
Wraz z upływem czasu i zwiększaniem się liczby aplikacji niezawodne aktualizowanie wielu kontenerów Dockera może stać się sporym wyzwaniem. Na szczęście do dyspozycji mamy platformę o wdzięcznej nazwie "What’s up Docker?".
Wraz z upływem czasu i zwiększaniem się liczby aplikacji niezawodne aktualizowanie wielu kontenerów Dockera może stać się sporym wyzwaniem. Na szczęście do dyspozycji mamy platformę o wdzięcznej nazwie "What’s up Docker?".
Gdy zaczniesz uruchamiać różne usługi w kontenerach na swoich serwerach domowych, będziesz potrzebował niezawodnej metody ich aktualizacji. Projekty stale wydają nowe wersje, nie tylko w celu wprowadzenia nowych funkcji, ale także w celu wyeliminowania luk w zabezpieczeniach. Nawet jeśli jesteś zadowolony z obecnego zestawu funkcji, zaniedbanie aktualizacji może narazić Cię na ryzyko związane z bezpieczeństwem.
Jednak aktualizacja kontenerów wiąże się również z pewnym ryzykiem. Nowa wersja może wprowadzać niekompatybilne zmiany, wymagające uwagi użytkownika. W najgorszym przypadku trzeba spędzić kilka godzin na rozwiązywaniu tych problemów, a to oczywiście zawsze dzieje się w najbardziej niewygodnych momentach. Dlatego nie zaleca się okresowego aktualizowania wszystkich kontenerów do najnowszej wersji lub automatycznego instalowania każdej nowej wersji i liczenia na najlepsze.
Najlepsze praktyki
Jak zarządzać tym ryzykiem? Przed wykonaniem jakichkolwiek aktualizacji należy przejrzeć informacje o wydaniu każdej nowej wersji kontenera, aby sprawdzić, czy nie wprowadzono w niej zmian. Wymaga to jednak najpierw znalezienia tych informacji o wydaniu. W związku z tym potrzebny jest system powiadamiający o dostępności nowej aktualizacji, najlepiej z bezpośrednim linkiem do informacji o wydaniu, aby zaoszczędzić czas.
Co więcej, solidna strategia aktualizacji wymaga kontroli nad dokładnymi wersjami, które są instalowane. Jeśli użyjesz tagu latest do pobrania najnowszej wersji obrazu kontenera, możesz pobrać inną wersję niż zamierzona, potencjalnie powodując problemy z kompatybilnością. Określenie dokładnych wersji wszystkich obrazów kontenerów do pobrania, przy użyciu znaczników takich jak v1.3.2, może zapobiec takim problemom.
Narzędzie What’s up Docker?
What’s up Docker? (WUD) [1] to praktyczne narzędzie, które może pomóc w utrzymaniu tych najlepszych praktyk. Program składa się z trzech głównych komponentów: obserwatorów, rejestrów i wyzwalaczy (zobacz rysunek 1, aby zapoznać się z przeglądem architektury). Obserwatorzy skanują i monitorują kontenery na lokalnym hoście Dockera i/lub innych sieciowych hostach Dockera. Rejestry sprawdzają internetowe rejestry Dockera, takie jak Docker Hub [2], pod kątem dostępnych aktualizacji obrazów. Wyzwalacze uruchamiają się po wykryciu aktualizacji dla jednego z kontenerów, powiadamiając użytkownika za pośrednictwem wiadomości e-mail, webhook, MQTT, skryptu aktualizacji lub innych działań, takich jak aktualizacja pliku Docker Compose.
Rysunek 1: What’s up Docker? ma obserwatorów, rejestry i wyzwalacze.
Wyzwalacze powiadomień zawierają link do informacji o wydaniu wykrytej wersji, umożliwiając łatwe przeglądanie zmian. Dodatkowo WUD posiada interfejs sieciowy, w którym można w każdej chwili sprawdzić status wszystkich kontenerów. Ponieważ WUD może skonfigurować obserwatorów dla wielu hostów Dockera, pojedyncza instalacja WUD zapewnia przegląd kontenerów na wszystkich hostach Dockera w jednym interfejsie internetowym.
Instalacja WUD
Najprostszym sposobem na uruchomienie WUD jest kontener Dockera. Zakładając, że wszystkie kontenery są skonfigurowane w pliku Docker Compose, dodasz WUD do tej konfiguracji. Aby poprawnie monitorować wersję samego obrazu WUD, należy określić numer wersji. Plik docker-compose.yml będzie przypominał Listing 1.
Listing 1: Definicja kontenera WUD w pliku docker-compose.yml
services:
whatsupdocker:
image: getwud/wud:8.1.1
container_name: wud
restart: unless-stopped
ports:
- 3000:3000
volumes:
- /var/run/docker.sock:/var/run/docker.sock
Gniazdo /var/run/docker.sock, które montujesz w kontenerze, umożliwia WUD odpytywanie wersji (lub, dokładniej, tagów) lokalnych obrazów kontenerów.
Upewnij się, że dodałeś znaczniki wersji do innych kontenerów w docker-compose.yml, jeśli jeszcze tego nie zrobiłeś. (Jeśli używasz Podmana, zobacz ramkę „Używanie WUD z kontenerami Podman bez korzeni”). Musisz znaleźć odpowiednie tagi na stronie Docker Hub obrazu lub w rejestrze, z którego go pobrałeś. Niektóre tagi mogą mieć prefiks v, taki jak v0.1.53. Zapisz zmiany w pliku i uruchom ponownie kontenery za pomocą docker-compose up -d. Następnie odwiedź interfejs sieciowy WUD pod adresem http://IP:3000, gdzie IP to adres IP twojego hosta Dockera (rysunek 2).
Używanie WUD z bezkorzeniowymi kontenerami Podman
@KL:Pomimo swojej nazwy What’s up Docker? działa doskonale z Podmanem, w tym z bezrootowymi kontenerami Podmana. Jedyne dostosowanie, jakiego potrzebujesz, to zamontowanie gniazda Dockera. Wolumin Podmana przypomina /run/user/1000/podman/podman.sock:/var/run/docker.sock:ro, gdzie /run/user/1000/podman/podman.sock to gniazdo Podmana użytkownika. Można to znaleźć w danych wyjściowych podman info pod RemoteSocket. W kontenerze to gniazdo jest po prostu montowane w lokalizacji, w której oczekuje go WUD, /var/run/docker/sock.
Rysunek 2: WUD pokazuje kontenery, wyzwalacze, obserwatorów i rejestry.
Monitorowanie znaczników wersji
Kliknięcie bloku kontenera na stronie głównej WUD wyświetli listę kontenerów uruchomionych na tym samym hoście, wraz z ich wersją obrazu. Ponieważ kontener WUD ma dostęp do gniazda Dockera, może pobrać te informacje bezpośrednio z silnika Dockera dla wszystkich kontenerów. Możesz szybko zidentyfikować, czy kontener jest przestarzały, z sugestią uaktualnienia do określonej wersji.
Ogólnie rzecz biorąc, proces ten działa dobrze, choć WUD czasami wymaga pewnych wskazówek. Domyślnie nawet błędnie interpretuje informacje o samym WUD. WUD może sugerować aktualizację z wersji 8.1.1 do obrazu oznaczonego jako 667-feature-request-support-for-homarr-labs-dashboards-icons (rysunek 3), który nie jest zwykłą wersją. Deweloper przesłał obraz z tym tagiem do testów w Docker Hub, a WUD widzi 667 jako liczbę większą niż osiem, sugerując tym samym, że jest to aktualizacja. Na szczęście można dodać etykietę do kontenera Dockera z wyrażeniem regularnym, które filtruje, które tagi mają być traktowane jako wersje. Dla typowego formatu major.minor.patch dodaj etykietę w następujący sposób do kontenera WUD w docker-compose.yml:
labels:
- wud.tag.include=^\d+\.\d+\.\d+$$
Rysunek 3: Musisz powiedzieć WUD, aby nie uwzględniał tego typu tagów wersji.
Zauważ, że musisz zduplikować każdy znak dolara w wyrażeniu regularnym.
Rysunek 4: WUD pokazuje poprawki na zielono, pomniejsze wydania na pomarańczowo, a główne wydania na czerwono.
Po uruchomieniu docker-compose up -d WUD skupi się wyłącznie na tagach, które zaczynają się od cyfr, po których następuje kropka, więcej cyfr, kolejna kropka i znowu więcej cyfr. Jeśli znaczniki obrazu kontenera zawsze zaczynają się od v, dodaj to v przed pierwszym \dw wyrażeniu regularnym. Jeśli kontener oferuje również wersje alpejskie, zwykle uzyskuje się je przez dołączenie -alpine przed $$. Dzięki odpowiednim wyrażeniom regularnym masz teraz ładny przegląd dostępnych aktualizacji dla wszystkich kontenerów (rysunek 4).
Uwagi do wydania
Teraz, gdy wiesz, które nowe wersje są dostępne dla Twoich kontenerów, musisz znaleźć informacje o wydaniu. Są one zazwyczaj publikowane na przewidywalnych adresach URL, więc możesz oznaczyć każdy kontener, aby określić, jak wygląda link do informacji o wydaniu konkretnej wersji. W przypadku projektów, których wydania są publikowane w serwisie GitHub, dodaj link, dołączając do kontenera etykietę w następujący sposób:
- wud.link.template=https://github.com/getwud/wud/releases/
tag/$${major}.$${minor}.$${patch}
Jeśli dany projekt używa innego systemu wersjonowania niż major.minor.patch, możesz również użyć $${original} dla pełnego znacznika obrazu. WUD wstawia numer wersji do adresu URL, aby zapewnić poprawny adres URL informacji o wydaniu dla każdej nowej wersji. Pamiętaj, aby zduplikować dowolny znak dolara.
Możesz także dostosować nazwę i ikonę wyświetlaną przez WUD dla kontenera za pomocą następujących etykiet (patrz ramka „Źródła ikon”, aby dowiedzieć się, gdzie znaleźć ikony):
- wud.display.name=What’s up Docker
- wud.display.icon=sh-wud
Źródła ikon
WUD obsługuje ikony z różnych stron internetowych do wyświetlania obok kontenerów. Źródło można wskazać za pomocą prefiksu: sh- dla selfh.st [3]; si- dla Simple Icons [4]; mdi- dla Material Design Icons [5]; hl- dla Dashboard Icons [6]; oraz fab-, far- i fas- odpowiednio dla ikon marki, zwykłych i jednolitych z Font Awesome [7]. Wystarczy wyszukać projekt na jednej z tych stron internetowych i użyć nazwy z wyników wyszukiwania z odpowiednim prefiksem w etykiecie kontenera.
Teraz dodaj te same informacje z etykietami dla innych kontenerów w pliku Docker Compose. Po uruchomieniu docker-compose up -d, lista kontenerów w WUD stanie się znacznie bardziej przejrzysta, z ikoną i czytelną nazwą dla każdego kontenera. Po rozwinięciu wpisu kontenera zobaczysz również klikalny link do informacji o wydaniu nowej wersji, którą znalazł WUD (rysunek 5).
Rysunek 5: WUD pokazuje klikalny link do informacji o wydaniu aktualizacji tego kontenera.
Dostosuj domyślnego obserwatora
Zauważ, że WUD ma skonfigurowanego jednego obserwatora w swoim interfejsie internetowym. WUD tworzy go domyślnie, jeśli nie zostanie skonfigurowany. Kliknięcie na 1 watchers na stronie głównej rozwija się, aby pokazać docker / local watcher. Kliknięcie go ujawnia jego właściwości, takie jak skonfigurowane gniazdo Dockera. Właściwość Cron jest ustawiona na 0 * * * *, wskazując, że WUD sprawdza aktualizacje co godzinę. Aby uzyskać więcej informacji na temat tej notacji, odwiedź Crontab Guru [8].
Dodatkowo, Watchall jest ustawione na false, co oznacza, że WUD sprawdza tylko uruchomione kontenery pod kątem aktualizacji zamiast wszystkich utworzonych. Watchbydefault, ustawione na true, oznacza, że kontenery nie muszą określać, że powinny być monitorowane przez WUD. Jeśli chcesz monitorować tylko określone kontenery, musisz ustawić tę opcję na false i oznaczyć kontenery, które chcesz monitorować za pomocą wud.watch=true. Gdy Watchevents jest ustawione na true, WUD sprawdza aktualizacje po uruchomieniu kontenera.
Aby zmodyfikować domyślne właściwości obserwatora, należy ustawić zmienne środowiskowe dla kontenera WUD. Na przykład, aby monitorować aktualizacje tylko raz dziennie o 3:05, należy dodać tę zmienną środowiskową do kontenera WUD w pliku docker-compose.yml:
environment:
- WUD_WATCHER_LOCAL_CRON=5 3 * * * *
Inne właściwości obserwatora mają odpowiednie zmienne środowiskowe, na przykład WUD_WATCHER_LOCAL_WATCHBYDEFAULT dla Watchbydefault. Po uruchomieniu docker-compose up -d lokalna konfiguracja obserwatora zostanie zaktualizowana.
Monitorowanie innych hostów Dockera
Aby umożliwić WUD monitorowanie kontenerów na innych hostach Dockera, należy dodać dodatkową zmienną środowiskową dla hosta zamiast gniazda (opcja domyślna). Możesz także ustawić różne właściwości dla tego hosta, na przykład
environment:
- WUD_WATCHER_LOCAL_CRON=5 3 * * *.
- WUD_WATCHER_RUBUS_HOST=rubus.home
- WUD_WATCHER_RUBUS_CRON=5 4 * * * *
Na tym hoście silnik Dockera musi być skonfigurowany do nasłuchiwania na porcie 2375. Instrukcje można znaleźć w dokumentacji Dockera dotyczącej zdalnego dostępu [9]. RUBUS w zmiennej środowiskowej to nazwa, którą można wybrać (która może różnić się od nazwy hosta), podczas gdy LOCAL zawsze odnosi się do hosta, na którym działa WUD.
Po uruchomieniu docker-compose up -d, WUD pokazuje kontenery ze wszystkich hostów zdefiniowanych w jego obserwatorach, w notacji podobnej do ścieżki: najpierw nazwa obserwatora, następnie rejestr kontenera, kontener (ze zdefiniowaną nazwą i ikoną), a następnie wersja, po której opcjonalnie następuje najnowsza dostępna nowa wersja (rysunek 6).
Rysunek 6: WUD z łatwością monitoruje kontenery z wielu hostów Dockera.
Dodaj wyzwalacze
Teraz, gdy widzisz wszystkie dostępne aktualizacje dla swoich kontenerów w interfejsie internetowym WUD, nadal musisz ręcznie sprawdzać tę stronę internetową. Możesz jednak zdefiniować wyzwalacze, aby otrzymywać powiadomienia, gdy aktualizacja stanie się dostępna dla Twoich kontenerów. WUD obsługuje obecnie około 15 typów wyzwalaczy, w tym e-mail, ntfy [10], MQTT, Slack, Telegram i Discord.
Pokażę, jak skonfigurować wyzwalacz, który wysyła e-maile z każdą dostępną aktualizacją. Użyj zmiennych środowiskowych z Listingu 2 dla kontenera WUD. W tym przykładzie wykorzystano Mailjet [11], francuskiego dostawcę poczty e-mail, który umożliwia wysyłanie do 200 wiadomości e-mail dziennie w ramach bezpłatnego planu. Wypełnij te pola informacjami o koncie od własnego dostawcy poczty e-mail.
Listing 2: Konfiguracja wyzwalacza wiadomości e-mail
environment:
- WUD_TRIGGER_SMTP_MAILJET_HOST=in-v3.mailjet.com
- WUD_TRIGGER_SMTP_MAILJET_PORT=587
- WUD_TRIGGER_SMTP_MAILJET_USER=17326117626d402d
adc3864b59000095
- WUD_TRIGGER_SMTP_MAILJET_PASS=73c460f8d48b4d15
9c273b1a6ba4ae8a
Po ponownym uruchomieniu kontenera WUD otrzymasz wiadomość e-mail za każdym razem, gdy dostępna będzie nowa wersja dla jednego z Twoich kontenerów, w tym link do informacji o wydaniu w celu szybkiej weryfikacji, czy aktualizacja jest zalecana.
Rysunek 7: Otrzymuj powiadomienia o aktualizacjach kontenerów w aplikacji ntfy dla Androida.
Jeśli skonfigurowałeś usługę powiadomień ntfy, możesz dodać wyzwalacz z konfiguracją z Listingu 3. Upewnij się, że ustawiłeś nazwę użytkownika i hasło dla konta, które ma uprawnienia do zapisu dla tematu, i użyj poprawnego adresu URL. Jeśli kontener ntfy działa z tego samego pliku Docker Compose, oba kontenery znajdują się w tej samej sieci, więc można po prostu użyć nazwy kontenera (ntfy w tym przykładzie) jako nazwy hosta. Jeśli się powiedzie, zobaczysz powiadomienia o nowych aktualizacjach w aplikacji ntfy na Androida (rysunek 7).
Listing 3: Konfiguracja wyzwalacza ntfy
environment:
- WUD_TRIGGER_NTFY_LOCAL_URL=http://ntfy
- WUD_TRIGGER_NTFY_LOCAL_AUTH_USER=wud
- WUD_TRIGGER_NTFY_LOCAL_AUTH_
PASSWORD=wafpjuN04CCSFy8TFnGK
- WUD_TRIGGER_NTFY_LOCAL_TOPIC=wud
Zaktualizuj swój plik Docker Compose
Wyzwalacze WUD są przydatne nie tylko do powiadomień. Jednym z dostępnych wyzwalaczy jest Docker Compose. Po skonfigurowaniu tej funkcji WUD aktualizuje plik Docker Compose o nowy znacznik wersji i odtwarza kontener po wykryciu aktualizacji. Jak wyjaśniono wcześniej, automatyzacja tego procesu nie jest zalecana. Można jednak dodać wyzwalacz i skonfigurować WUD tak, aby nie wykonywał go automatycznie. Pozwala to na ręczne wyzwalanie z interfejsu internetowego WUD w celu aktualizacji kontenera. Należy pamiętać, że ta funkcja jest dostępna tylko dla lokalnego hosta Dockera.
Konfiguracja odbywa się ponownie przy użyciu odpowiednich zmiennych środowiskowych dla kontenera WUD, ale należy również zamontować plik Docker Compose wewnątrz kontenera w celu modyfikacji. Listing 4 ilustruje tę konfigurację. Z WUD_TRIGGER_DOCKERCOMPOSE_LOCAL_PRUNE=true, WUD usuwa stary obraz po aktualizacji, podczas gdy WUD_TRIGGER_DOCKERCOMPOSE_LOCAL_AUTO=false wyłącza automatyczne wykonywanie wyzwalacza.
Listing 4: Aktualizacja pliku Docker Compose z poziomu interfejsu sieciowego WUD
volumes:
- ./docker-compose.yml:/wud/docker-compose.yml
environment:
- WUD_TRIGGER_DOCKERCOMPOSE_LOCAL_FILE=/wud/
docker-compose.yml
- WUD_TRIGGER_DOCKERCOMPOSE_LOCAL_PRUNE=true
- WUD_TRIGGER_DOCKERCOMPOSE_LOCAL_AUTO=false
Po docker-compose up -d, zbadaj zakładkę Triggers w interfejsie internetowym WUD, aby wyświetlić wszystkie skonfigurowane wyzwalacze dla każdego kontenera (rysunek 8). Kliknij Run obok wyzwalacza Docker Compose, aby zaktualizować kontener poprzez modyfikację pliku Docker Compose. Jeśli kontenery są zdefiniowane w wielu plikach Docker Compose, wystarczy dodać wszystkie pliki jako woluminy i dodać dodatkowe zmienne środowiskowe WUD_TRIGGER_DOCKERCOMPOSE_{OTHER}_FILE, WUD_TRIGGER_DOCKERCOMPOSE_{OTHER}_PRUNE i WUD_TRIGGER_DOCKERCOMPOSE_{OTHER}_AUTO.
Rysunek 8: Modyfikacja pliku Docker Compose i ponowne utworzenie kontenera jednym kliknięciem.
Uwierzytelnianie
Domyślnie interfejs sieciowy WUD jest dostępny dla wszystkich. Aby uniemożliwić dostęp w całej sieci do przeglądania lub wyzwalania akcji na kontenerach, zdefiniuj użytkowników i hasła. WUD będzie wtedy wymagał uwierzytelnienia. Najpierw utwórz hash hasła zgodny z narzędziem htpasswd serwera WWW Apache. Jeśli nie masz zainstalowanego tego narzędzia, po prostu użyj OpenSSL:
$ openssl passwd -apr1 my_secret_password
Wynik przypomina $apr1$xKTGamqS$x5d43GZTZfPDP4Sb3KK0p0, składający się z trzech części oddzielonych znakiem dolara: algorytmu hashowania (apr1), soli (losowy ciąg znaków) oraz wartości hashowania hasła i soli połączonych w Base64.
Następnie dodaj nazwę użytkownika i odpowiedni skrót hasła jako zmienne środowiskowe do kontenera WUD, upewniając się, że każdy znak dolara został zduplikowany:
environment:
- WUD_AUTH_BASIC_KOAN_USER=koan
- WUD_AUTH_BASIC_KOAN_HASH=$apr1$$xKTGamqS$$x5
d43GZTZfPDP4Sb3KK0p0
Aby zdefiniować wielu użytkowników, wystarczy dodać więcej zmiennych środowiskowych, postępując w ten sam sposób, odpowiednio dostosowując nazwę użytkownika.
Należy pamiętać, że WUD domyślnie działa przez nieszyfrowane połączenie HTTP. Aby zwiększyć bezpieczeństwo, rozsądne jest użycie protokołu HTTPS. Instrukcje dotyczące włączania HTTPS i konfigurowania certyfikatu i klucza prywatnego można znaleźć w dokumentacji WUD. Alternatywą jest uruchomienie WUD za odwrotnym serwerem proxy, który obsługuje połączenia HTTPS.
Alternatywy dla What’s up Docker?
WUD nie jest jedynym rozwiązaniem open source do monitorowania i aktualizowania obrazów kontenerów. Popularną alternatywą jest watchtower [12], który koncentruje się na automatycznej aktualizacji kontenerów, gdy dostępna jest nowa wersja obrazu, chociaż oferuje również monitorowanie aktualizacji. Brakuje mu jednak interfejsu internetowego. Inna alternatywa, Diun [13], to skrót od Docker Image Update Notifier. Koncentruje się na monitorowaniu aktualizacji, ale również nie posiada interfejsu internetowego. Wybór narzędzia zależy od priorytetów użytkownika, ale WUD jest najbardziej wszechstronnym rozwiązaniem spośród tych trzech.
Podsumowanie
WUD oferuje elastyczny sposób monitorowania kontenerów pod kątem aktualizacji ich obrazów. Ten artykuł omawia jedynie podstawowe zagadnienia, warto więc pamiętać, że program zawiera szereg zaawansowanych opcji. Można na przykład zastąpić wiele ogólnych ustawień programu dla określonych kontenerów bądź przypisać różne wyzwalacze do różnych kontenerów.
Info
[1] What’s up Docker?: https://getwud.github.io/wud/
[2] Docker Hub: https://hub.docker.com
[3] selfh.st: https://selfh.st/icons/
[4] Proste ikony: https://simpleicons.org
[5] Ikony Material Design: https://pictogrammers.com/library/mdi/
[6] Ikony pulpitu nawigacyjnego: https://dashboardicons.com
[7] Font Awesome: https://fontawesome.com
[8] Crontab Guru: https://crontab.guru
[9] Zdalny dostęp Docker: https://docs.docker.com/engine/daemon/remote-access/
[10] "Wysyłanie powiadomień push za pomocą ntfy" Koen Vervloesem, Linux Magazine, wydanie 297, sierpień 2025
[11] Mailjet: https://www.mailjet.com
[12] watchtower: https://containrrr.dev/watchtower/
[13] Diun: https://crazymax.dev/diun/
