Hlavní výhodou používání MongoDB je snadné použití. Jeden může snadno nainstalovat MongoDB a začít na něm pracovat během několika minut. Docker tento proces ještě usnadňuje.
Jedna skvělá věc na Dockeru je, že s velmi malým úsilím a určitou konfigurací můžeme roztočit kontejner a začít pracovat na jakékoli technologii. V tomto článku vytvoříme kontejner MongoDB pomocí Dockeru a naučíme se, jak připojit úložný svazek z hostitelského systému ke kontejneru.
Předpoklady pro nasazení MongoDB na Docker
Pro tento tutoriál budeme potřebovat pouze nainstalovaný Docker v systému.
Vytvoření obrázku MongoDB
Nejprve vytvořte složku a v této složce vytvořte soubor s názvem Dockerfile:
$ mkdir mongo-with-docker
$ cd mongo-with-docker
$ vi Dockerfile
Vložte tento obsah do svého Dockerfile:
FROM debian:jessie-slim
RUN apt-get update && \
apt-get install -y ca-certificates && \
rm -rf /var/lib/apt/lists/*
RUN gpg --keyserver ha.pool.sks-keyservers.net --recv-keys 0C49F3730359A14518585931BC711F9BA15703C6 && \
gpg --export $GPG_KEYS > /etc/apt/trusted.gpg.d/mongodb.gpg
ARG MONGO_PACKAGE=mongodb-org
ARG MONGO_REPO=repo.mongodb.org
ENV MONGO_PACKAGE=${MONGO_PACKAGE} MONGO_REPO=${MONGO_REPO}
ENV MONGO_MAJOR 3.4
ENV MONGO_VERSION 3.4.18
RUN echo "deb http://$MONGO_REPO/apt/debian jessie/${MONGO_PACKAGE%-unstable}/$MONGO_MAJOR main" | tee "/etc/apt/sources.list.d/${MONGO_PACKAGE%-unstable}.list"
RUN echo "/etc/apt/sources.list.d/${MONGO_PACKAGE%-unstable}.list"
RUN apt-get update
RUN apt-get install -y ${MONGO_PACKAGE}=$MONGO_VERSION
VOLUME ["/data/db"]
WORKDIR /data
EXPOSE 27017
CMD ["mongod", "--smallfiles"]
Poté spusťte tento příkaz a vytvořte si vlastní obraz MongoDB Docker:
docker build -t hello-mongo:latest .
Porozumění obsahu souboru Docker
Struktura každého řádku v souboru dockeru je následující:
INSTRUCTIONS arguments
- OD:Základní obrázek, ze kterého začneme sestavovat kontejner
- RUN:Tento příkaz provede všechny pokyny k instalaci MongoDB do základního obrazu.
- ARG:Ukládá některé výchozí hodnoty pro sestavení Dockeru. Tyto hodnoty nejsou pro kontejner k dispozici. Může být přepsán během procesu vytváření obrazu pomocí argumentu --build-arg.
- ENV:Tyto hodnoty jsou dostupné během fáze sestavení i po spuštění kontejneru. Lze jej přepsat předáním argumentu -e příkazu spuštění dockeru.
- VOLUME:Připojí svazek dat/db ke kontejneru.
- WORKDIR:Nastaví pracovní adresář pro provádění jakýchkoli příkazů RUN nebo CMD.
- EXPOSE:Zpřístupní port kontejneru pro hostování systému (vnější svět).
- CMD:Spustí instanci mongoda v kontejneru.
Spuštění kontejneru MongoDB z obrázku
Kontejner MongoDB můžete spustit zadáním následujícího příkazu:
docker run --name my-mongo -d -v /tmp/mongodb:/data/db -p 27017:27017 hello-mongo
- --name:Název kontejneru.
- -d:Spustí kontejner jako proces na pozadí (démon). Nezadávejte tento argument, chcete-li kontejner spustit jako proces na popředí.
- -v:Připojte svazek /tmp/mongodb hostitelského systému k /data/db kontejneru.
- -p:Namapujte port hostitele na port kontejneru.
- Posledním argumentem je název/id obrázku.
Chcete-li zkontrolovat, zda kontejner běží nebo ne, zadejte následující příkaz:
docker ps
Výstup tohoto příkazu by měl vypadat následovně:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a7e04bae0c53 hello-mongo "mongod --smallfiles" 7 seconds ago Up 6 seconds 0.0.0.0:27017->27017/tcp my-mongo
Přístup k MongoDB z hostitele
Jakmile je kontejner v provozu, můžeme k němu přistupovat stejným způsobem jako při přístupu ke vzdálené instanci MongoDB. Pro připojení k této instanci můžete použít jakýkoli nástroj, jako je Compass nebo Robomongo. Prozatím k připojení použiji příkaz mongo. Spusťte ve svém terminálu následující příkaz:
mongo 27017
Otevře mongo shell, kde můžete provádět libovolné mongo příkazy. Nyní vytvoříme jednu databázi a přidáme do ní nějaká data.
use mydb
db.myColl.insert({“name”: “severalnines”})
quit()
Nyní, abychom zkontrolovali, zda je naše mapování objemu správné nebo ne, restartujeme kontejner a zkontrolujeme, zda má naše data nebo ne.
Docker restart <container_id>
Nyní se znovu připojte k mongo shell a spusťte tento příkaz:
db.myColl.find().pretty()
Měli byste vidět tento výsledek:
{ "_id" : ObjectId("5be7e05d20aab8d0622adf46"), "name" : "severalnines" }
To znamená, že náš kontejner uchovává data databáze i po restartu. To je možné díky mapování objemu. Kontejner bude ukládat všechna naše data do adresáře /tmp/mongodb v hostitelském systému. Když tedy kontejner restartujete, všechna data v kontejneru budou vymazána a nový kontejner bude přistupovat k datům z hostitelského adresáře tmp/mongodb.
Přístup k prostředí MongoDB Container Shell
$ docker exec -it <container-name> /bin/bash
Přístup k protokolům kontejneru MongoDB
$ docker logs <container-name>
Připojení ke kontejneru MongoDB z jiného kontejneru
Ke kontejneru MongoDB se můžete připojit z jakéhokoli jiného kontejneru pomocí argumentu --link, který má následující strukturu.
--link <Container Name/Id>:<Alias>
Kde Alias je alias pro název odkazu. Spuštěním tohoto příkazu propojíte náš kontejner Mongo s kontejnerem express-mongo.
docker run --link my-mongo:mongo -p 8081:8081 mongo-express
Tento příkaz stáhne obraz mongo-express z dockerhubu a spustí nový kontejner. Mongo-express je uživatelské rozhraní pro správu MongoDB. Nyní přejděte na http://localhost:8081 pro přístup k tomuto rozhraní.
Uživatelské rozhraní správce Mongo-expressZávěr
V tomto článku jsme se naučili, jak nasadit obraz MongoDB od začátku a jak vytvořit kontejner MongoDB pomocí Dockeru. Prošli jsme také některé důležité koncepty, jako je mapování objemu a připojení ke kontejneru MongoDB z jiného kontejneru pomocí odkazů.
Docker usnadňuje proces nasazení více instancí MongoDB. Můžeme použít stejný obraz MongoDB k vytvoření libovolného počtu kontejnerů, které lze použít k vytváření sad replik. Aby byl tento proces ještě plynulejší, můžeme napsat soubor YAML (konfigurační soubor) a použít nástroj docker-compose k nasazení všech kontejnerů pomocí jediného příkazu.