W dzisiejszym artykule kontynuujemy opis możliwości, jakie daje nam Docker Swarm. Wyjaśnimy, w jaki sposób wykorzystać Docker Compose do orkiestracji kontenerów oraz pokażemy, że przejście na inne systemy orkiestracji, takie jak np. Kubernetes, może być również wsparte za pomocą dostępnych narzędzi.
Na początku artykułu przyjrzyjmy się kilku ważnym funkcjonalnościom pozwalającym na lepsze zarządzanie kontenerami, działającym pod kontrolą Docker Swarma.
Aktualizacja
W pewnym momencie pracy kontenerów zachodzi konieczność ich aktualizacji. Do tego celu służy komenda:
docker service update <...>
Należy jednak pamiętać, że w przypadku skorzystania z tagu latest przy uruchomieniu kolejnych instancji istnieje realne ryzyko użycia obrazów, które będą miały inną wersję niż aktualnie działające w naszym środowisku. Szczególnie dotyczy to sytuacji, gdy korzystamy z obrazów, których nie jesteśmy autorami, np. pobieramy obraz z Internetu.
Bezpieczeństwo
Do mocnych stron Docker Swarm niewątpliwie należy bezpieczeństwo. Umożliwia on bowiem zapisywanie takich danych jak klucze prywatne SSH, hasła czy certyfikaty SSL w postaci zbioru danych zwanych sekretem (ang. Docker secret). Dane te mogą być przesyłane i przechowywane w Dockerze w sposób zaszyfrowany. Dodatkowo są one dostępne tylko dla usług, dla których zostały nadane im prawa dostępu. Do wygenerowania sekretu używamy komendy:
docker secret create <...>
Przechowywanie konfiguracji
Kolejną przydatną funkcjonalnością jest możliwość przechowywania konfiguracji dla usług Docker Swarm poza samymi kontenerami. Oczywiście w tym przypadku mówimy o przechowywaniu danych niewrażliwych. Do wygenerowania konfiguracji służy polecenie:
docker config create <...>
Uruchamianie Swarma na podstawie pliku docker-compose
Możemy uruchomić Docker Swarm korzystając z definicji zawartych w docker-compose.yml
. W naszym przypadku użyjemy pliku, który przygotowaliśmy podczas instalacji pakietu EuroDB w kontenerach. Pisaliśmy o tym w artykule o dockerowej instalacji komponentów EuroDB.
Przechodzimy do katalogu, w którym mamy zapisany nasz plik docker-compose.yml
, a następnie wydajemy komendę:
docker stack deploy -c docker-compose.yml EuroDB
W jej wyniku otrzymujemy:
[wz@wz-host blog]$ docker stack deploy -c docker-compose.yml EuroDB Creating network EuroDB_default Creating service EuroDB_eurodb_statsanalyzer Creating service EuroDB_eurodb_datagenerator Creating service EuroDB_eurodb_db Creating service EuroDB_eurodb_barman Creating service EuroDB_eurodb_loganalyzer
Możemy wyświetlić działający stack:
[wz@wz-host blog]$ docker stack ps EuroDB
Aby wyświetlić działające kontenery, możemy także posłużyć się graficznym narzędziem dockersamples/visualizer:
docker run -d -p 5000:8080 -v /var/run/docker.sock:/var/run/docker.sock dockersamples/visualizer
Jeżeli chcemy dokonać migracji naszych usług na platformę Kubernetes, możemy skorzystać z narzędzia kompose.io. Po jego instalacji (szczegóły instalacji na stronie www kompose.io) możemy w katalogu z plikiem docker-compose.yml
wydać polecenie:
[wz@wz-host blog]$ kompose convert -f docker-compose.yml -o kubernetes-deployment.yml INFO Service name in docker-compose has been changed from "eurodb_loganalyzer" to "eurodb-loganalyzer" INFO Service name in docker-compose has been changed from "eurodb_statsanalyzer" to "eurodb-statsanalyzer" INFO Service name in docker-compose has been changed from "eurodb_datagenerator" to "eurodb-datagenerator" INFO Service name in docker-compose has been changed from "eurodb_db" to "eurodb-db" INFO Service name in docker-compose has been changed from "eurodb_barman" to "eurodb-barman"
Jak widać, konwerter zmienił także nazwy serwisów w plikach, a wynik konwersji został zapisany do pliku kubernetes-deployment.yml
. Korzytając z kubernetes-deployment.yml
możemy uruchomić obrazy w Kubernetesie. Jednak temat ten będzie poruszony w kolejnych artykułach.
Podsumowanie
Przedstawiliśmy dziś mechanizm orkiestracji bazujący na rozwiązaniu Docker Swarm, które ma bardzo wiele zalet. Jednak obecnie na zdecydowane prowadzenie (pod względem popularności) wysuwają się systemy orkiestracji bazujące na rozwiązaniach Kubernetesa. Oprócz czystego Kubernetesa (K8s) mamy do dyspozycji szereg produktów bazujących na K8s, ale oferujących dodatkowe funkcjonalności: OpenShift, Rancher, OKD. Przedstawiliśmy także narzędzie, które pozwoli podjąć próbę przeniesienia działającego rozwiązania bazującego na Docker Swarm na platformę Kubernetsa. W kolejnych artykułach przybliżymy kolejne systemy orkiestracji.