Ưu điểm chính của việc sử dụng MongoDB là dễ sử dụng. Người ta có thể dễ dàng cài đặt MongoDB và bắt đầu làm việc với nó trong vài phút. Docker làm cho quá trình này trở nên dễ dàng hơn.
Một điều thú vị về Docker là, với rất ít nỗ lực và một số cấu hình, chúng tôi có thể quay một vùng chứa và bắt đầu làm việc trên bất kỳ công nghệ nào. Trong bài viết này, chúng tôi sẽ tạo một vùng chứa MongoDB bằng Docker và tìm hiểu cách gắn dung lượng lưu trữ từ hệ thống máy chủ vào một vùng chứa.
Điều kiện tiên quyết để triển khai MongoDB trên Docker
Chúng tôi sẽ chỉ cần cài đặt Docker trong hệ thống cho hướng dẫn này.
Tạo hình ảnh MongoDB
Đầu tiên, hãy tạo một thư mục và tạo một tệp có tên Dockerfile bên trong thư mục đó:
$ mkdir mongo-with-docker
$ cd mongo-with-docker
$ vi Dockerfile
Dán nội dung này vào Dockerfile của bạn:
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"]
Sau đó, chạy lệnh này để tạo hình ảnh MongoDB Docker của riêng bạn:
docker build -t hello-mongo:latest .
Hiểu nội dung tệp Docker
Cấu trúc của mỗi dòng trong tệp docker như sau:
Các đối sốINSTRUCTIONS arguments
- FROM:Hình ảnh cơ sở mà từ đó chúng tôi sẽ bắt đầu xây dựng vùng chứa
- RUN:Lệnh này thực hiện tất cả các hướng dẫn để cài đặt MongoDB trong hình ảnh cơ sở.
- ARG:Lưu trữ một số giá trị mặc định cho bản dựng Docker. Các giá trị này không có sẵn cho vùng chứa. Có thể được ghi đè trong quá trình xây dựng hình ảnh bằng cách sử dụng đối số --build-arg.
- ENV:Các giá trị này có sẵn trong giai đoạn xây dựng cũng như sau khi khởi chạy vùng chứa. Có thể được ghi đè bằng cách chuyển đối số -e vào lệnh docker run.
- VOLUME:Đính kèm dữ liệu / dung lượng db vào vùng chứa.
- WORKDIR:Đặt thư mục công việc để thực thi bất kỳ lệnh RUN hoặc CMD nào.
- EXPOSE:Mở rộng cổng của vùng chứa để lưu trữ hệ thống (thế giới bên ngoài).
- CMD:Bắt đầu phiên bản mongod trong vùng chứa.
Khởi động vùng chứa MongoDB từ hình ảnh
Bạn có thể khởi động vùng chứa MongoDB bằng cách đưa ra lệnh sau:
docker run --name my-mongo -d -v /tmp/mongodb:/data/db -p 27017:27017 hello-mongo
- --name:Tên của vùng chứa.
- -d:Sẽ bắt đầu quá trình vùng chứa dưới dạng nền (daemon). Không chỉ định đối số này để chạy vùng chứa dưới dạng quy trình nền trước.
- -v:Đính kèm khối lượng / tmp / mongodb của hệ thống máy chủ với khối lượng / data / db của vùng chứa.
- -p:Ánh xạ cổng máy chủ tới cảng container.
- Đối số cuối cùng là tên / id của hình ảnh.
Để kiểm tra xem vùng chứa có đang chạy hay không, hãy sử dụng lệnh sau:
docker ps
Đầu ra của lệnh này sẽ giống như sau:
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
Truy cập MongoDB từ Máy chủ lưu trữ
Khi vùng chứa được thiết lập và chạy, chúng ta có thể truy cập nó theo cách giống như truy cập cá thể MongoDB từ xa. Bạn có thể sử dụng bất kỳ tiện ích nào như La bàn hoặc Robomongo để kết nối với phiên bản này. Hiện tại, tôi sẽ sử dụng lệnh mongo để kết nối. Chạy lệnh sau trong thiết bị đầu cuối của bạn:
mongo 27017
Nó sẽ mở mongo shell nơi bạn có thể thực hiện bất kỳ lệnh mongo nào. Bây giờ chúng tôi sẽ tạo một cơ sở dữ liệu và thêm một số dữ liệu vào đó.
use mydb
db.myColl.insert({“name”: “severalnines”})
quit()
Bây giờ để kiểm tra xem ánh xạ khối lượng của chúng tôi có chính xác hay không, chúng tôi sẽ khởi động lại vùng chứa và kiểm tra xem nó có dữ liệu của chúng ta hay không.
Docker restart <container_id>
Bây giờ một lần nữa kết nối với mongo shell và chạy lệnh này:
db.myColl.find().pretty()
Bạn sẽ thấy kết quả này:
{ "_id" : ObjectId("5be7e05d20aab8d0622adf46"), "name" : "severalnines" }
Điều này có nghĩa là vùng chứa của chúng tôi vẫn duy trì dữ liệu cơ sở dữ liệu ngay cả sau khi khởi động lại nó. Điều này có thể thực hiện được vì ánh xạ khối lượng. Vùng chứa sẽ lưu trữ tất cả dữ liệu của chúng ta trong thư mục / tmp / mongodb trong hệ thống máy chủ. Vì vậy, khi bạn khởi động lại vùng chứa, tất cả dữ liệu bên trong vùng chứa sẽ bị xóa và một vùng chứa mới sẽ truy cập dữ liệu từ thư mục tmp / mongodb của máy chủ.
Truy cập vỏ vùng chứa MongoDB
$ docker exec -it <container-name> /bin/bash
Truy cập nhật ký vùng chứa MongoDB
$ docker logs <container-name>
Kết nối với vùng chứa MongoDB từ vùng chứa khác
Bạn có thể kết nối với vùng chứa MongoDB từ bất kỳ vùng chứa nào khác bằng cách sử dụng đối số --link tuân theo cấu trúc sau.
--link <Container Name/Id>:<Alias>
Trong đó Alias là bí danh cho tên liên kết. Chạy lệnh này để liên kết vùng chứa Mongo của chúng tôi với vùng chứa express-mongo.
docker run --link my-mongo:mongo -p 8081:8081 mongo-express
Lệnh này sẽ kéo hình ảnh mongo-express từ dockerhub và bắt đầu một vùng chứa mới. Mongo-express là một giao diện người dùng quản trị cho MongoDB. Bây giờ, hãy truy cập http:// localhost:8081 để truy cập giao diện này.
Giao diện người dùng quản trị Mongo-expressKết luận
Trong bài viết này, chúng ta đã học cách triển khai hình ảnh MongoDB từ đầu và cách tạo vùng chứa MongoDB bằng Docker. Chúng ta cũng đã xem qua một số khái niệm quan trọng như ánh xạ khối lượng và kết nối với vùng chứa MongoDB từ một vùng chứa khác bằng cách sử dụng liên kết.
Docker giúp giảm bớt quá trình triển khai nhiều phiên bản MongoDB. Chúng ta có thể sử dụng cùng một hình ảnh MongoDB để tạo bất kỳ số lượng vùng chứa nào có thể được sử dụng để tạo Bộ bản sao. Để làm cho quá trình này trơn tru hơn nữa, chúng tôi có thể viết tệp YAML (tệp cấu hình) và sử dụng tiện ích docker-soạn để triển khai tất cả các vùng chứa bằng một lệnh duy nhất.