Keuntungan utama menggunakan MongoDB adalah mudah digunakan. Seseorang dapat dengan mudah menginstal MongoDB dan mulai mengerjakannya dalam hitungan menit. Docker membuat proses ini lebih mudah.
Satu hal keren tentang Docker adalah, dengan sedikit usaha dan beberapa konfigurasi, kita dapat memutar container dan mulai mengerjakan teknologi apa pun. Dalam artikel ini, kita akan menjalankan container MongoDB menggunakan Docker dan mempelajari cara melampirkan volume penyimpanan dari sistem host ke container.
Prasyarat untuk Menyebarkan MongoDB di Docker
Kami hanya perlu menginstal Docker di sistem untuk tutorial ini.
Membuat Gambar MongoDB
Pertama buat folder dan buat file dengan nama Dockerfile di dalam folder itu:
$ mkdir mongo-with-docker
$ cd mongo-with-docker
$ vi Dockerfile
Tempel konten ini di Dockerfile Anda:
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"]
Kemudian jalankan perintah ini untuk membuat image MongoDB Docker Anda sendiri:
docker build -t hello-mongo:latest .
Memahami Konten File Docker
Struktur setiap baris dalam file buruh pelabuhan adalah sebagai berikut:
INSTRUCTIONS arguments
- FROM:Gambar dasar tempat kita akan mulai membuat container
- RUN:Perintah ini mengeksekusi semua instruksi untuk menginstal MongoDB di gambar dasar.
- ARG:Menyimpan beberapa nilai default untuk build Docker. Nilai-nilai ini tidak tersedia untuk penampung. Dapat diganti selama proses pembuatan gambar menggunakan argumen --build-arg.
- ENV:Nilai-nilai ini tersedia selama fase build serta setelah meluncurkan container. Dapat ditimpa dengan meneruskan argumen -e ke perintah docker run.
- VOLUME:Melampirkan data/volume db ke container.
- WORKDIR:Menyetel direktori kerja untuk menjalankan perintah RUN atau CMD apa pun.
- EXPOSE:Mengekspos port container untuk menghosting sistem (dunia luar).
- CMD:Memulai instance mongod dalam container.
Memulai Wadah MongoDB Dari Gambar
Anda dapat memulai wadah MongoDB dengan mengeluarkan perintah berikut:
docker run --name my-mongo -d -v /tmp/mongodb:/data/db -p 27017:27017 hello-mongo
- --name:Nama wadah.
- -d:Akan memulai container sebagai proses background (daemon). Jangan tentukan argumen ini untuk menjalankan container sebagai proses latar depan.
- -v:Melampirkan volume /tmp/mongodb sistem host ke volume /data/db container.
- -p:Memetakan port host ke port container.
- Argumen terakhir adalah nama/id gambar.
Untuk memeriksa apakah container berjalan atau tidak, jalankan perintah berikut:
docker ps
Output dari perintah ini akan terlihat seperti berikut:
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
Mengakses MongoDB Dari Host
Setelah container aktif dan berjalan, kita dapat mengaksesnya dengan cara yang sama seperti mengakses instance MongoDB jarak jauh. Anda dapat menggunakan utilitas apa pun seperti Compass atau Robomongo untuk terhubung ke instance ini. Untuk saat ini, saya akan menggunakan perintah mongo untuk terhubung. Jalankan perintah berikut di terminal Anda:
mongo 27017
Ini akan membuka shell mongo tempat Anda dapat menjalankan perintah mongo apa pun. Sekarang kita akan membuat satu database dan menambahkan beberapa data di dalamnya.
use mydb
db.myColl.insert({“name”: “severalnines”})
quit()
Sekarang untuk memeriksa apakah pemetaan volume kita benar atau tidak, kita akan me-restart container dan memeriksa apakah ada data kita atau tidak.
Docker restart <container_id>
Sekarang sambungkan lagi ke mongo shell dan jalankan perintah ini:
db.myColl.find().pretty()
Anda akan melihat hasil ini:
{ "_id" : ObjectId("5be7e05d20aab8d0622adf46"), "name" : "severalnines" }
Ini berarti wadah kami mempertahankan data basis data bahkan setelah memulai ulang. Ini dimungkinkan karena pemetaan volume. Wadah akan menyimpan semua data kita di direktori /tmp/mongodb di sistem host. Jadi saat Anda memulai ulang penampung, semua data di dalam penampung akan dihapus dan penampung baru akan mengakses data dari direktori tmp/mongodb host.
Mengakses Shell Kontainer MongoDB
$ docker exec -it <container-name> /bin/bash
Mengakses Log Kontainer MongoDB
$ docker logs <container-name>
Menghubungkan ke Wadah MongoDB Dari Wadah Lain
Anda dapat terhubung ke wadah MongoDB dari wadah lain menggunakan --link argumen yang mengikuti struktur berikut.
--link <Container Name/Id>:<Alias>
Di mana Alias adalah alias untuk nama tautan. Jalankan perintah ini untuk menautkan wadah Mongo kami dengan wadah express-mongo.
docker run --link my-mongo:mongo -p 8081:8081 mongo-express
Perintah ini akan menarik gambar mongo-express dari dockerhub dan memulai wadah baru. Mongo-express adalah UI admin untuk MongoDB. Sekarang buka http://localhost:8081 untuk mengakses antarmuka ini.
UI Admin Mongo-expressKesimpulan
Pada artikel ini, kita mempelajari cara men-deploy image MongoDB dari awal dan cara membuat container MongoDB menggunakan Docker. Kami juga membahas beberapa konsep penting seperti pemetaan volume dan menghubungkan ke wadah MongoDB dari wadah lain menggunakan tautan.
Docker memudahkan proses penerapan beberapa instans MongoDB. Kita dapat menggunakan gambar MongoDB yang sama untuk membangun sejumlah kontainer yang dapat digunakan untuk membuat Kumpulan Replika. Untuk membuat proses ini lebih lancar, kita dapat menulis file YAML (file konfigurasi) dan menggunakan utilitas docker-compose untuk men-deploy semua container dengan satu perintah.