Docker-Compose MongoDB

Docker-Compose MongoDB

Opprettholde tilstanden til mongo -beholderen din på tvers av oppdateringer.

Tl; dr

For de som er kjent med arbeidet med MongoDB og Docker-volumene, og også for de som bare vil ha et raskt utdrag av Docker-Compose.YML for prosjektet deres uten mange dybde detaljer, her er en komponeringsfil som vil gjøre susen. Lag en ny katalog som heter MongoDB, og lag inn i den en fil som heter Docker-Compose.yml og legg følgende innhold inni det:

Versjon: '3'
tjenester:
My-Mongodb:
Bilde: Mongo: Siste
Volum:
- db-data:/data/db
- mongo-config:/data/configdb
Volum:
DB-data:
Mongo-Config:

Lagre filen og kjør fra samme katalog:

$ docker -compose up -d

Dette vil starte en MongoDB-tjeneste med to bind som heter DB-Data og Mongo-Config neste gang en ny versjon av Monogdb kommer langs Run:

$ Docker-Compose Down

Fjern gjeldende bilde Docker RMI Mongo Last ned The New One Docker Pull Mongo: Siste and Run:

$ docker -compose up -d

Ingen av dataene dine vil gå tapt så lenge du ikke med vilje fjerner Docker-volumer for DB-data og mongo-config. Det kan være lurt å legge til tjenester for front-end webserver og andre diverse tjenester sammen med bare My-MongoDB-tjenesten, selvfølgelig.

Hva gjorde vi?

Vel, jeg kan bare fortelle deg hvor MongoDB forventer at volumer skal monteres og hvorfor jeg skrev tjenesten på denne måten. Det vil imidlertid ikke hjelpe deg å skrive din egen komponeringsfil for din egen tilpassede applikasjon. Kanskje du ikke bruker MongoDB, men MariaDB eller Postgres. La oss ta et skritt tilbake og gå og undersøke en mongoDB -beholder og forstå tankeprosessen bak hvordan komponeringsfilen ble skrevet.

La oss starte med en ren skiferdockerinstallasjon. Ingen løpende beholder, ingen brukerdefinerte nettverk, ingen volum. La oss kjøre en mongodb -beholder ved hjelp av CLI:

$ Docker Run -D -Navn MyDB Mongo: Siste

Hvis vi nå viser containere, volumer og nettverk som vist nedenfor, vil vi se noen nye medlemmer:

$ docker ps
Container ID Image Command opprettet statusporter navn
F22758A73BA0 Mongo: Siste "Docker-Entrypoint.S ... "for 9 sekunder siden opp 7 sekunder 27017/TCP MYDB
$ docker volum ls
Drivervolumnavn
Lokal C5F99E7D82894C1A1DEF4C48EDFDF43220EBF6B92FCD49A15C0CAFE0325D369
Lokal DAA36A6F496075EF30BAF99B6AF9F6B6CFB9C60E96CED88C102E27381C243233
$ docker nettverk ls
Nettverks -ID -navn Driver Omfang
C41B287F67AB Bridge Bridge Local
A49B31643FA9 Vert vert Lokal
A69138357C76 Ingen null lokal

Ingenting nytt er lagt til i nettverksdelen (bare standardverdiene vises), men to nye volumer er opprettet med lange hashes som navn.

Den nye beholderen heter MyDB og utsetter port 27017. Det er her en Mongo -klient kan koble seg til og lese fra eller skrive til databasen. La oss inspisere denne beholderen videre:

$ docker inspiserer mydb
..
"Ridedyr": [

"Type": "Volum",
"Navn": "DAA36A6F496075EF30BAF99B6AF9F6B6CFB9C60E96CED88C102E27381C243233",
"Kilde": "/var/lib/docker/volum/daa36a6f496075ef30baf99b6af9f6b6cfb9c60e96ced88c102e273
81c243233/_data ",
"Destinasjon": "/data/configdb",
"Driver": "Lokal",
"Mode": "",
"RW": True,
"Forplantning": ""
,

"Type": "Volum",
"Navn": "C5F99E7D82894C1A1DEF4C48EDFDF43220EBF6B92FCD49A15C0CAFE0325D369",
"Kilde": "/var/lib/docker/volum/c5f99e7d82894c1a1def4c48edfdf43220eebf6b92fcd49a15c0cafe
0325
d369/_data ",
"Destinasjon": "/data/db",
"Driver": "Lokal",
"Mode": "",
"RW": True,
"Forplantning": ""

],
..

Inne i den lange JSON -utgangen som vil resultere etter å ha kjørt inspektør -kommandoen, vil du legge merke til at det er to monteringer. Dette er Docker -volumene vi listet opp tidligere som ble montert inne i beholderen. Monteringspunktene er /data /configdb og /data /db.
Når du fjerner beholderen:

$ docker rm -f mydb

Volumene er fremdeles intakte, og du kan fremdeles se dem oppført (Docker Volumes LS). Så all informasjon som er lagret av MongoDB -beholderen er trygg hos oss. Imidlertid, hvis vi prøver å kjøre MongoDB -beholder igjen.

$ Docker Run -D -Navn MyDB2 Mongo: Siste

Og deretter liste opp volumene (Docker Volume LS) Du vil merke at to nye volumer er opprettet og montert. Informasjonen vi kan ha beholdt i de eldre volumene blir ikke brukt. Vi må omgå dette problemet ved å navngi volumer selv og deretter montere dem inne i beholderen på deres respektive monteringspunkter. På denne måten, når en ny erstatningsmongodb -beholder blir spunnet opp og ber om volumer med bestemte navn, vil Docker grasiøst montere de eldre volumene i stedet for å lage nye.

For å oppnå dette refererer vi til Docker-Compose.YML -fil nevnt i TL; DR -delen, og det gir litt mer mening for oss nå.

Koble til MongoDB

Du har kanskje ikke en front-end-applikasjon klar ennå. Hvis du vil at du fremdeles kan koble deg til MongoDB -serveren, oppretter du en ny database i den og legger til noen få nøkkelverdipar. Det er ikke typisk SQL-database, men snarere en slags nøkkelverdi av slags. For å se dette i aksjon, installer MongoDB Compass, som er et klientprogram du kan kjøre på skrivebordet eller den bærbare datamaskinen for å koble deg til databaseserveren.

Du trenger ikke å gjøre dette for produksjonsformål, containere i det samme nettverket kan snakke med hverandre, men for eksperimenteringens skyld, la oss avsløre porten 27017, som er standardporten som MongoDB -serveren lytter. For å gjøre dette, modifiser docker-komponering.YML -fil som vist:

Versjon: '3'
tjenester:
My-Mongodb:
Bilde: Mongo: Siste
Porter:
- 27017: 27017
Volum:
- db-data:/data/db
- mongo-config:/data/configdb
Volum:
DB-data:
Mongo-Config:

Ta opp distribusjonen igjen ved å løpe, dette vil gjenskape utplasseringen hvis du allerede har en løping:

$ docker -compose up -d

Det neste du vil gjøre er å åpne MongoDB Compass på din lokale maskin og koble deg til Docker -verten. Dette er kanskje adressen LocalHost: 27017 hvis du kjører Mongo -beholder på din lokale maskin. Hvis den kjører andre steder, bruk IP -adressen eller domenenavnet til den maskinen med samme portnummer.

Klikk på Koble til det mest hjørnet, så blir du koblet til databasen.

La oss opprette en ny database og kalle det myDatabase og innenfor den Mycollection.

Innsiden MyDatabase> MyCollection Klikk på Sett inn dokument. Her kan vi legge til noen dummy data:

Du kan nå prøve å få ned distribusjonen, og bli kvitt flyktige containere. Ta den med igjen med nyere containere, og du vil merke at dataene vi opprettet fremdeles er der.

Konklusjon

Her så vi hvordan vi skulle løpe og bruke MongoDB -beholder for søknaden din. Fortsatt er det mye som har blitt stående usagt, for eksempel å sikre databasen med et passord, spørre data og skalere databasen.

Du kan lære mer om det her eller lese dokumentene på fritiden her.