Zarządzanie wolumenami Docker za pomocą Docker Compose

Zarządzanie wolumenami Docker za pomocą Docker Compose

Cel wolumenów dokera

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:

  1. Docker wersja 18.09.2, buduj 6247962
  2. Wersja 1 Docker-Compose.23.2, buduj 1110AD01
  3. Komponuj wersję 3: działa z 1.13.0 i powyżej

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:

  1. Otwórz przeglądarkę i wprowadź adres IP swojego hosta Dockera, to znaczy http: // DockerHostip: 2368/Ghost (lub po prostu http: // localhost: 2368/Ghost) i utwórz konto administracyjne. Zmodyfikuj jeden z istniejących postów i zapisz.
  2. Wymień wszystkie komponenty Docker, które są uruchomione za pomocą poleceń: Docker PS, Docker Network LS, Docker Volume LS
  3. W tym samym katalogu, co plik komponsu, wykonaj polecenie $ Docker-Compose Down. Co ciekawe, zauważysz, że chociaż kontener i sieć utworzona przez kompose dokera są usuwane, wolumin dokera jest nadal nienaruszony.
  4. Uruchom Docker -Compose -D -D, a zauważysz, że zmodyfikowany post jest tam, gdzie go zostawiłeś, nawet dane logowania administratora można użyć ponownie i nie musisz tworzyć nowego konta administracyjnego.
  5. Usuń sekcje z woluminem zarówno z usług: Sekcja Web: Sekcja i z głównej sekcji, a teraz, jeśli powtórzysz powyższe trzy kroki, zauważysz 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

Wniosek

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.