Tl; dr
Dla tych, którzy znają działanie MongoDB i Docker Volumes, a także dla tych, którzy chcą tylko szybkiego fragmentu kompozycji.YML dla ich projektu bez wielu szczegółowych szczegółów, oto plik kompozytowy, który załatwi sprawę. Zrób nowy katalog o nazwie MongoDB i w nim utwórz plik o nazwie Docker-Compose.YML i umieść w nim następujące zawartość:
Wersja: „3”
Usługi:
My-MongoDB:
Zdjęcie: Mongo: najnowszy
wolumeny:
- db-data:/data/db
- Mongo-config:/data/configdb
wolumeny:
DB-DATA:
Mongo-Config:
Zapisz plik i uruchom z tego samego katalogu:
$ Docker -Compose Up -d
To rozpocznie usługę MongoDB z dwoma tomami o nazwie DB-DATA i Mongo-Config następnym razem, gdy pojawi się nowa wersja MonogDB:
$ Docker-Compose Down
Usuń obecny obraz Docker RMI Mongo Pobierz nowy One Docker Pull Mongo: Najnowszy i uruchom:
$ Docker -Compose Up -d
Żadne z twoich danych nie zostanie utracone, o ile celowo nie usuniesz woluminów Docker dla DB-DATA i Mongo-Config. Oczywiście możesz dodać usługi dla swojego serwera WWW i innych różnych usług wraz z usługą My-MongoDB.
Co zrobiliśmy?
Cóż, mogę po prostu powiedzieć, gdzie MongoDB spodziewa się zamontowania woluminów i dlaczego napisałem usługę w ten konkretny sposób. Nie pomogłoby to jednak napisać własnego pliku kompozycji dla własnej niestandardowej aplikacji. Może nie używasz MongoDB, ale Mariadb lub Postgres. Cofnijmy się o krok i idźmy i zbadaj pojemnik MongoDB i zrozummy proces myślowy za napisaniem pliku kompozytowego.
Zacznijmy od instalacji Docker Clean Slate. Bez uruchomionego kontenera, bez sieci zdefiniowanych przez użytkownika, bez woluminów. Uruchommy pojemnik MongoDB za pomocą CLI:
$ Docker Run -d --name mydb Mongo: najnowszy
Teraz, jeśli wymienimy kontenery, wolumeny i sieci, jak pokazano poniżej, zobaczymy nowych członków:
$ Docker Ps
Polecenie obrazu ID kontenera utworzone porty statusu nazwy
F22758A73BA0 MONGO: Najnowszy „Docker-entrypoint.s… "9 sekund temu w górę 7 sekund 27017/tcp mydb
$ Docker Volume LS
Nazwa woluminu sterownika
Lokalny C5F99E7D82894C1A1DEF4C48EDFDF43220EBF6B92FCD49A15C0CAFE0325D369
Lokalny DAA36A6F496075EF30BAF99B6AF9F6B6CFB9C60E96CED88C102E27381C243233
$ Docker Network LS
Identyfikator sieci Nazwa Zakres sterownika
C41B287F67AB Bridge Most Local
A49B31643FA9 Host Host Local
A69138357C76 Brak zerowy lokalny
Nic nowego nie zostało dodane do sekcji Networks (pokazano tylko wartości domyślne), ale dwa nowe tomy zostały utworzone z długimi hasłami jako ich nazwą.
Nowy kontener nazywa się MYDB i odsłania port 27017. W tym miejscu klient Mongo może połączyć się i czytać lub zapisywać do bazy danych. Sprawdźmy ten pojemnik dalej:
$ Docker Inspect mydb
…
„Mocowania”: [
„Typ”: „Tom”,
„Nazwa”: „DAA36A6F496075EF30BAF99B6AF9F6B6CFB9C60E96CED88C102E27381C243233”,
„Źródło”: "/var/lib/docker/volumes/DAA36A6F496075EF30BAF99B6AF9F6B6CFB9C60E96CED88C102E273
81C243233/_Data ",
„Miejsce docelowe”: „/data/configdb”,
„Driver”: „Lokalny”,
"Tryb": "",
„RW”: True,
"Propagacja": ""
,
„Typ”: „Tom”,
„Nazwa”: „C5F99E7D82894C1A1DEF4C48EDFDF43220EBF6B92FCD49A15C0CAFE0325D369”,
„Źródło”: "/var/lib/docker/volumes/c5f99e7d82894c1a1def4c48edfdf43220eBf6b92fcd49a15c0cafe
0325
D369/_Data ",
„Destination”: „/Data/DB”,
„Driver”: „Lokalny”,
"Tryb": "",
„RW”: True,
"Propagacja": ""
],
…
Wewnątrz tego długiego wyjścia JSON, który wynikałby po uruchomieniu polecenia Inspekcji, zauważysz, że istnieją dwa mocowania. Są to wolumeny dokera, które wymieniliśmy wcześniej, zostały zamontowane w pojemniku. Punkty montowania to /Data /configdb i /dane /db.
Po usunięciu pojemnika:
Tomy są nadal nienaruszone i nadal można je zobaczyć (Docker Volumes LS). Tak więc wszelkie informacje przechowywane przez kontener MongoDB są z nami bezpieczne. Jeśli jednak spróbujemy ponownie uruchomić kontener MongoDB.
$ Docker Run -d --Name mydb2 Mongo: najnowszy
A następnie wymień wolumines (tom Docker LS). Informacje, które mogliśmy zachować w starszych tomach. Musimy obejść ten problem, nazywając tomy, a następnie montaż ich wewnątrz pojemnika w odpowiednich punktach montażu. W ten sposób, gdy pojawi się nowy pojemnik na MongoDB zastępczy i zapyta o objętości z określonymi nazwami Docker z wdziękiem zamontuje starsze tomy zamiast tworzyć nowe.
Aby to osiągnąć, odnosimy się do kompozycji dokera.plik YML wspomniany w sekcji TL; DR i ma teraz dla nas trochę bardziej sens.
Łączenie z MongoDB
Być może nie masz jeszcze gotowej aplikacji. Jeśli chcesz, możesz nadal połączyć się z serwerem MongoDB, utwórz w nim nową bazę danych i dodać kilka par kluczowych. Nie jest to typowa baza danych SQL, ale raczej rodzaj sklepu z kluczową wartością. Aby zobaczyć to w akcji, zainstaluj MongoDB Compass, który jest programem klienta, który możesz uruchomić na komputerze stacjonarnym lub laptopie, aby połączyć się z serwerem bazy danych.
Nie musisz tego robić do celów produkcyjnych, kontenery w tej samej sieci mogą ze sobą rozmawiać, ale ze względu na eksperymenty, ujawnijmy port 27017, który jest domyślnym portem, na którym słucha serwer MongoDB. Aby to zrobić, zmodyfikuj kompozyt dokujący.Plik YML, jak pokazano:
Wersja: „3”
Usługi:
My-MongoDB:
Zdjęcie: Mongo: najnowszy
Porty:
- 27017: 27017
wolumeny:
- db-data:/data/db
- Mongo-config:/data/configdb
wolumeny:
DB-DATA:
Mongo-Config:
Przynieś wdrożenie ponownie, uruchamiając, odtworzy to wdrożenie, jeśli masz już takie działające:
$ Docker -Compose Up -d
Następną rzeczą, którą chcesz zrobić, jest otwarcie kompasu MongoDB na lokalnym komputerze i połączenie się z hostem Docker. To może adres LocalHost: 27017 Jeśli używasz kontenera Mongo na swoim komputerze lokalnym. Jeśli działa gdzie indziej, użyj adresu IP lub nazwy domeny tego urządzenia z tym samym numerem portu.
Kliknij Podłącz z dolnego najbardziej rogu, a będziesz podłączony do bazy danych.
Utwórzmy nową bazę danych i nazwij ją MyDatabase i w nim Mycollection.
Wewnątrz MyDatabaza> Mycollection Kliknij Wstaw dokument. Tutaj możemy dodać kilka manekinów:
Możesz teraz spróbować obniżyć wdrożenie i pozbyć się efemerycznych pojemników. Przynieś go ponownie z nowszymi kontenerami, a zauważysz, że utworzone przez nas dane są nadal dostępne.
Tutaj widzieliśmy, jak uruchomić i używać kontenera MongoDB do aplikacji. Nadal wiele pozostało, na przykład, zabezpieczanie bazy danych hasłem, zapytanie o dane i skalowanie bazy danych.
Możesz dowiedzieć się więcej o tym tutaj lub przeglądać dokumenty w czasie wolnym.