MongoDB là một công cụ cơ sở dữ liệu NoSQL hướng tài liệu đã trở nên phổ biến với các nhà phát triển cho mô hình lưu trữ giống JSON của nó. MongoDB thường cung cấp ánh xạ trực tiếp hơn giữa mã và dữ liệu liên tục, tạo điều kiện lặp lại nhanh chóng và giúp giải quyết sự không phù hợp trở kháng khá lớn của cơ sở dữ liệu SQL truyền thống.
Docker là một nền tảng đóng gói các thành phần ứng dụng của bạn dưới dạng các vùng chứa riêng biệt. Việc chứa cơ sở dữ liệu MongoDB của bạn làm cho nó có thể di động qua các môi trường, cho phép bạn tạo một phiên bản ở bất kỳ đâu có sẵn Docker.
Trong hướng dẫn này, chúng tôi sẽ chỉ cho bạn cách bắt đầu chạy MongoDB trong Docker. Cân nhắc chính là lưu trữ dữ liệu: Các bộ chứa Docker là tạm thời theo mặc định và mất dữ liệu của chúng khi chúng dừng lại. Bạn sẽ cần gắn một ổ vào vùng chứa MongoDB của mình để kích hoạt tính bền bỉ.
Khởi động vùng chứa MongoDB
Bạn có thể bắt đầu một vùng chứa MongoDB hữu
ích với việc docker run
:
docker run -d -p 27017: 27017 --name example-mongo mongo: mới nhất
Điều này sẽ cung cấp cho bạn một máy chủ trực tiếp chạy phiên bản MongoDB mới nhất. Nó sử dụng hình ảnh chính thức có sẵn trên Docker Hub. -d
[tách ra] có nghĩa là vùng chứa sẽ chạy ở chế độ nền, riêng với quy trình shell của bạn.
Cổng vùng chứa 27017
, mặc định của MongoDB, được liên kết trở lại cổng 27017
trên máy chủ của bạn. Bạn sẽ có thể kết nối với phiên bản Mongo của mình trên localhost:27017
. Nếu bạn muốn thay đổi số cổng, hãy sửa đổi phần
đầu tiên của -p
, chẳng hạn như 9000:27017
để sử dụng localhost:9000
.
Hình ảnh MongoDB cũng bao gồm trình bao mongo
. Lệnh thực thi của docker exec
cung cấp một cách để truy cập nó trong một vùng chứa đang chạy:
docker executive -it example-mongo mongo
Thao tác này sẽ khởi chạy phiên shell Mongo tương tác trong thiết bị đầu cuối của bạn. Nó lý tưởng để nhanh chóng tương tác với phiên bản cơ sở dữ liệu của bạn mà không cần thêm bất kỳ phụ thuộc bên ngoài nào.
Bạn có thể kiểm tra nhật ký của Mongo bằng lệnh docker logs
:
docker logs example-mongo --follow
--follow
có nghĩa là nhật ký sẽ liên tục được truyền trực tuyến đến thiết bị đầu cuối của bạn.
Kết nối từ một vùng chứa khác
Nếu bạn đang triển khai Mongo trong Docker, rất có thể bạn sẽ muốn kết nối từ một vùng chứa khác, chẳng hạn như máy chủ API của bạn. Tốt nhất bạn nên tham gia cả hai vào một mạng Docker được chia sẻ. Điều này có nghĩa là bạn sẽ không cần xuất bản các cổng Mongo lên máy chủ của mình, giảm khả năng tấn công của bạn.
mạng docker tạo mạng mongo docker run -d --network mongo-network --name example-mongo mongo: mới nhất
Vùng chứa “khách hàng” của bạn cũng phải tham gia vào mongo-network
. Nó sẽ có thể tham chiếu vùng chứa theo tên trong chuỗi kết nối MongoDB. Trong ví dụ này, nó có thể tiếp cận cơ sở dữ liệu bằng cách liên hệ
với example-mongo:27017
.
Dữ liệu liên tục với khối lượng
Bạn phải sử dụng khối lượng Docker nếu bạn đang lưu trữ cơ sở dữ liệu thực trong vùng chứa Mongo của mình. Việc sử dụng một ổ đĩa sẽ duy trì dữ liệu của bạn để dữ liệu không bị mất khi bạn dừng vùng chứa hoặc khởi động lại daemon Docker.
Hình ảnh MongoDB được định cấu hình để lưu trữ tất cả dữ liệu của nó trong thư mục /data/db
trong hệ thống tệp vùng chứa. Việc gắn một ổ vào vị trí này sẽ đảm
bảo dữ liệu được duy trì bên ngoài vùng chứa.
docker run -d -p 27017: 27017 --name example-mongo -v mongo-data: / data / db mongo: mới nhất
Phiên bản này của lệnh docker run
tạo một khối lượng Docker mới được gọi là mongo-data
và gắn nó vào vùng chứa. Khối lượng sẽ được quản lý bởi Docker; bạn có thể thấy nó bằng cách chạy docker volumes ls
.
Thêm một số dữ liệu vào Mongo:
sử dụng test-db db.demos.save [{foo: "bar"}]
Tiếp theo, khởi động lại vùng chứa của bạn:
docker khởi động lại example-mongo
Dữ liệu đã thêm trước đó sẽ vẫn nguyên vẹn khi Docker gắn lại ổ đĩa sau khi khởi động lại. Bạn có thể kiểm tra điều này bằng cách kết nối lại
với Mongo và truy vấn bộ sưu tập demos
sử dụng test-db db.demos.find [{foo: "bar"}]
Bạn có thể xóa vùng chứa và chạy một vùng chứa hoàn toàn mới với cùng khối lượng mongo-data
Vì các tệp của ổ đĩa vẫn tồn tại trên máy chủ của bạn, Docker sẽ gắn chúng trở lại vùng chứa thay thế. Mongo tự động bỏ qua quy trình khởi tạo cơ sở dữ liệu thông thường khi thư mục dữ liệu đã được điền vào lúc khởi động vùng chứa.
Các khối lượng vẫn tồn tại cho đến khi bạn xóa chúng bằng --volumes
docker volumes rm
hoặc sử dụng cờ –volumes khi hủy một vùng
chứa bằng docker rm
.
Thêm xác thực
Vùng chứa MongoDB mới thiếu xác thực để bất kỳ ai cũng có thể kết nối với máy chủ của bạn. Không để lộ các cổng của vùng chứa trên hệ thống nối mạng mà kẻ tấn công có thể truy cập. Hệ thống xác thực của Mongo nên được sử dụng để bảo mật đúng cách cho cơ sở dữ liệu của bạn.
Hình ảnh Mongo Docker cung cấp một khởi động nhanh thuận tiện cho hệ thống xác thực tương đối phức tạp của Mongo. Bạn có thể thêm một tài khoản
người dùng ban đầu bằng cách thiết lập MONGO_INITDB_ROOT_USERNAME
và MONGODB_INITDB_ROOT_PASSWORD
biến môi trường khi bạn tạo container của bạn:
docker run -d -p 27017: 27017 --name example-mongo -v mongo-data: / data / db -e MONGODB_INITDB_ROOT_USERNAME = example-user -e MONGODB_INITDB_ROOT_PASSWORD = example-pass mongo: mới nhất
Thao tác này sẽ khởi động cơ sở dữ liệu với một tài khoản người dùng mới được gọi là example-user
. Người dùng sẽ được chỉ định vai trò root
admin
, cấp các đặc quyền của người dùng siêu cấp.
Xem xét các quyền hạn được liên kết với tài khoản này, việc cung cấp mật khẩu của nó dưới dạng một biến môi trường văn bản thuần túy có thể là một vấn đề. Một cách tiếp cận an toàn hơn là nhập mật khẩu dưới dạng tệp:
docker run -d -p 27017: 27017 --name example-mongo -v mongo-data: / data / db -e MONGODB_INITDB_ROOT_USERNAME = example-user -e MONGODB_INITDB_ROOT_PASSWORD_FILE = / run / secret / mongo-root-pw mongo: mới nhất
Việc gắn các biến môi trường của hình ảnh bằng _FILE
hướng dẫn Mongo đọc nội dung của tệp được tham chiếu, thay vì sử dụng giá trị nguyên trạng. Đường dẫn tệp thực tế là tùy ý – gắn tệp từ máy chủ của bạn hoặc sử dụng Bí mật Docker. Dù bằng cách nào, mật khẩu của bạn sẽ không được hiển thị khi sử dụng trình docker inspect
để xem các biến của vùng chứa.
Cấu hình máy chủ của bạn
Cách dễ nhất để cung cấp
các giá trị cấu hình Mongo tùy chỉnh là sử dụng các cờ được cung cấp bởi nhị phân mongod
Hình ảnh Docker được định cấu hình trước để chuyển các cờ docker run
mongod
của nó đến mongod.
Đây là một ví dụ trong đó Mongo được đặt để nghe trên cổng 9000 thay vì 27017 mặc định:
docker run -d --name example-mongo -v mongo-data: / data / db mongo: mới nhất --port 9000
Bạn có thể thêm tệp cấu hình Mongo bằng cách gắn tệp này vào vùng chứa của mình, sau đó sử dụng --config
để cho Mongo biết nơi cần tìm:
docker run -d --name example-mongo -v mongo-data: / data / db -v ./mongo.conf:/etc/mongo/mongo.conf mongo: mới nhất --config /etc/mongo/mongo.conf
--config
phải được sử dụng – Mongo không tải cài đặt từ
bất kỳ đường dẫn tệp nào theo mặc định.
Hình ảnh Docker cung cấp một cơ chế để tạo cơ sở dữ liệu của bạn và chạy các tập lệnh bootstrap trong lần chạy đầu tiên. Mọi .sh
hoặc .js
được đặt trong /docker-entrypoint-initdb.d
sẽ được thực thi theo thứ tự bảng chữ cái. .js
tệp .js sẽ được coi là tập lệnh Mongo và chạy trên cơ sở dữ liệu test
Bạn có thể thay đổi cơ sở dữ liệu mặc định này bằng cách đặt MONGODB_INITDB_DATABASE
thành tên lược đồ tùy chỉnh.
Phần kết luận
Chạy MongoDB trong Docker cung cấp cho bạn sự cô lập và khả năng di động cho cơ sở dữ liệu của bạn. Bạn có thể nhanh chóng tạo các phiên bản mới mà không cần cài đặt máy chủ Mongo theo cách thủ công. Các vùng chứa ứng dụng của bạn có thể liên kết trực tiếp với Mongo qua mạng Docker được chia sẻ.
Hình ảnh Mongo trên Docker Hub có các thẻ cho tất cả các phiên bản được hỗ trợ tích cực bao gồm 4.4 và 5.0. latest
luôn trỏ đến bản phát hành mới nhất, hiện tại là 5.0
, vì vậy việc sử dụng thẻ này khiến
bạn có nguy cơ nhận được các lỗi phiên bản chính không mong muốn. Sẽ an toàn hơn khi chỉ ra một phiên bản cụ thể khi khởi động vùng chứa của bạn.
Hình ảnh chính thức cũng có thể được sử dụng làm cơ sở cho những hình ảnh được định cấu hình sẵn tùy chỉnh. Việc tạo một Dockerfile
để thêm tệp cấu hình của bạn, ghi đè COMMAND
để bao gồm nó và các bản sao trong các tập lệnh gieo mầm của bạn sẽ cung cấp cho bạn một cách để hiển thị một phiên bản cơ sở dữ liệu mới với ít cờ docker run
Dịch từ: //www.cloudsavvyit.com/14792/how-to-run-mongodb-in-a-docker-container/