Kontenery Docker mają być zamiennikiem aplikacji. Mają być jednorazowe i łatwe do wymiany. Ta właściwość jest w rzeczywistości kamieniem węgielnym wielu rurociągów CI/CD. Kiedy dokonana jest zmiana, popchnięta do repozytorium źródłowego, które wyzwala łańcuch zdarzeń. Obrazy dokera są automatycznie budowane, testowane i (czasem) nawet wdrażane bezpośrednio w produkcji, zastępując starsze wersje bezproblemowo.
Ale często istnieją trwałe dane, które należy zachować między różnymi uwolnieniami aplikacji. Przykłady obejmują bazy danych, pliki konfiguracyjne dla aplikacji, pliki dziennika i poświadczenia bezpieczeństwa, takie jak klucze API i certyfikaty TLS.
Aby umożliwić utrzymanie wszystkich tych danych, użyjemy woluminów Docker, które są tylko częściami systemu plików hosta Docker (katalog lub urządzenie blokowe sformatowane z systemem plików), które można zamontować w pojemniku w dowolnej pożądanej lokalizacji systemu plików kontenera kontenera.
Organizować coś
Aby upewnić się, że wszyscy jesteśmy na tej samej stronie, oto wersja Docker Runtime i kompozycji Docker, której używam:
Przykład: hosting strony internetowej Ghost CMS
Praca z Compose jest naprawdę prosta do przodu. Piszesz plik YAML opisujący twoje wdrożenie, a następnie uruchamiasz go za pomocą CLI kompozycji Docker. Zacznijmy od prostego wdrożenia CMS Ghost.
Utwórz katalog o nazwie ComposeSamples i w nim utwórz plik o nazwie Docker-Compose.Yaml
$ mkdir kompozycje
$ CD komponuje się
Treść kompozycji dokera.YAML:
Wersja: "3.0 "
Usługi:
sieć:
Zdjęcie: Ghost: najnowszy
Porty:
- „2368: 2368”
wolumeny:
- cms-content:/var/lib/ghost/content
wolumeny:
CMS-Content:
Ten plik komponuje pojedynczą usługę, która jest w sieci, która działa najnowsze zdjęcie CMS Ghost z oficjalnego repozytorium Docker Hub. Port Exposed wynosi 2368 (więcej na ten temat w nieco później), a tom to tom o nazwie CMS-Content zamontowany w/var/lib/ghost/treść dokumentacja. Na przykład domyślny port Ghost Container 2368 i domyślny punkt montażu dla zawartości witryny/var/lib/ghost/treść są wspominając o oficjalnej dokumentacji kontenera.
Jeśli piszesz nową aplikację, pomyśl o wszystkich trwałych danych, do których będzie wymagał dostępu i odpowiednio ustaw punkty montażu dla tomów dokera.
Aby przetestować, że trwałe objętość działa, wypróbuj to:
Składnia i gadatliwość
Składnia do wprowadzenia głośności za pomocą kompozycji Docker jest dość prosta. Zaczynasz od czegoś podobnego do pojemnika i wspominasz nazwę głośności, którą chcesz zamontować. Jeśli nie wymieniasz nazwy, możesz wybrać leniwą składnię jak poniżej:
Wersja: "3.0 "
Usługi:
sieć:
Zdjęcie: Ghost: najnowszy
Porty:
- „2368: 2368”
wolumeny:
- /var/lib/duch/treść
Jeśli chcesz być nieco bardziej pełen zawodnicy, musisz wspomnieć o tomie Docker jako definicji najwyższego poziomu:
Wersja: "3.0 "
Usługi:
sieć:
Zdjęcie: Ghost: najnowszy
Porty:
- „2368: 2368”
wolumeny:
- cms-content:/var/lib/ghost/content
## Zdefiniuj, że CMS-Content jest w rzeczywistości tomem.
wolumeny:
CMS-Content:
Chociaż ta ostatnia wersja wymaga więcej pisania, jest bardziej pełna. Wybierz odpowiednią nazwę dla swoich tomów, aby twoi koledzy mogą zrozumieć, co zostało zrobione. Możesz pójść jeszcze dalej i wspomnieć o rodzaju głośności (więcej na ten temat) i wskazać źródło i cel.
wolumeny:
- Typ: objętość
Źródło: CMS-DATA
Target:/var/lib/ghost/content
Mocowania wiązania
Mocowania wiązania to części systemu plików hosta, które można zamontować bezpośrednio wewnątrz kontenera Docker. Aby wprowadzić mocowanie wiązania, po prostu wspomnij o katalogu hosta, który chcesz podzielić i punkt montażu wewnątrz pojemnika Docker, w którym należy go zamontować:
wolumeny:
- /dom//Projects/Ghost:/var/lib/duch/treść
Użyłem ścieżki/domu // Projekty/Ghost jako przykładu, możesz użyć dowolnej ścieżki na swoim hoście Docker, pod warunkiem, że masz do niej dostęp.
Możesz także użyć względnych ścieżek, używając $ PWD lub ~, ale może to z łatwością prowadzić do błędów i katastrof w scenariuszach rzeczywistych, w których współpracujesz z wieloma innymi ludźmi z własnym środowiskiem Linux. Z drugiej strony, czasami względne ścieżki są w rzeczywistości łatwiejsze do zarządzania. Na przykład, jeśli twoje repozytorium GIT ma być również twoim montażem wiązania za pomocą DOT (.) symbolizacja obecnego katalogu może być bardzo idealna.
Nowi użytkownicy klonujący repozytorium i klonują je w dowolnym miejscu w systemie hosta i uruchamiają Docker -Compose -W -D i uzyskują prawie ten sam wynik.
Jeśli użyjesz bardziej pełnometrażowej składni, to właśnie będzie zawierał Twój plik kompozycji:
wolumeny:
- Typ: wiązanie
Źródło:/home/użytkownik/projekty/duch
Target:/var/lib/ghost/content
W celu zorganizowania aplikacji, aby aplikacja była oddzielona od danych, może być bardzo pomocna. Wolume to rozsądne sposoby, aby to osiągnąć. Pod warunkiem, że są kopie zapasowe i bezpieczne, możesz swobodnie używać pojemników jako środowisk jednorazowych, nawet w produkcji!
Uaktualnienie z jednej wersji aplikacji do następnej lub za pomocą różnych wersji aplikacji do testowania A/B może stać się bardzo usprawnione, o ile sposób przechowywane lub dostępne są takie same dla obu wersji.