Podczas wdrażania aplikacji na serwerach zwykle występuje oddzielenie między tym, co aplikacja łączy ze sobą, a tym, czego oczekuje od platformy (system operacyjny i zainstalowane pakiety). Jednym z nich jest to, że platformę można aktualizować niezależnie od aplikacji. Jest to przydatne na przykład, gdy aktualizacje zabezpieczeń muszą być pilnie stosowane do pakietów dostarczanych przez platformę bez przebudowywania całej aplikacji.
Tradycyjnie aktualizacje zabezpieczeń były stosowane po prostu przez wykonanie polecenia menedżera pakietów, aby zainstalować zaktualizowane wersje pakietów w systemie operacyjnym (na przykład „yum update” na RHEL). Ale wraz z pojawieniem się technologii kontenerów, takich jak Docker, w której obrazy kontenerów zasadniczo obejmują zarówno aplikację, jak i platformę, jaki jest kanoniczny sposób aktualizowania systemu z kontenerami? Zarówno host, jak i kontenery mają własne, niezależne zestawy pakietów, które wymagają aktualizacji, a aktualizacja na hoście nie aktualizuje żadnych pakietów w kontenerach. Wraz z wydaniem RHEL 7, w którym szczególnie polecane są kontenery Docker, ciekawie byłoby usłyszeć zalecany przez Redhat sposób obsługi aktualizacji zabezpieczeń kontenerów.
Myśli na temat kilku opcji:
- Zezwolenie menedżerowi pakietów na aktualizację pakietów na hoście nie zaktualizuje pakietów w kontenerach.
- Konieczność ponownego wygenerowania wszystkich obrazów kontenera w celu zastosowania aktualizacji wydaje się przerywać separację między aplikacją a platformą (aktualizacja platformy wymaga dostępu do procesu kompilacji aplikacji, który generuje obrazy Docker).
- Uruchamianie ręcznych poleceń w każdym z uruchomionych kontenerów wydaje się kłopotliwe, a zmiany mogą zostać zastąpione przy następnej aktualizacji kontenerów z artefaktów wydania aplikacji.
Żadne z tych podejść nie wydaje się zadowalające.
docker pull debian/jessie
zaktualizować obraz, następnie odbudować moje istniejące obrazy, a następnie zatrzymać pojemniki i uruchomić je ponownie ( z nowym obrazem). Obrazy, które buduję, mają taką samą nazwę jak poprzednie, więc uruchamianie odbywa się za pomocą skryptu. Następnie usuwam „nienazwane” obrazy. Z pewnością doceniłbym lepszy przepływ pracy.