Trang chủ Thủ Thuật Cách chạy MongoDB trong Docker Container

Cách chạy MongoDB trong Docker Container

0
17

Cách chạy MongoDB trong Docker Container

Illustration showing the MongoDB logo

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.

Quảng cáo

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.

 

00bf23e1

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
Quảng cáo

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.

Quảng cáo

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_USERNAMEMONGODB_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.

Quảng cáo

Đâ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ẻ.

Quảng cáo

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

How Docker Image Signing Will Evolve With Notary v2

Docker Image Signing sẽ phát triển như thế nào với Notary v2

How to Transfer a Github Repository to Your Organization (or Another User)

Cách chuyển Kho lưu trữ Github cho Tổ chức của bạn (hoặc Người dùng khác)

47891d3f 3

Deno là gì và nó khác với Node.js như thế nào?

How to Use Dockerfile ONBUILD to Run Triggers on Downstream Builds

Cách sử dụng Dockerfile ONBUILD để chạy trình kích hoạt trên các công trình hạ nguồn

What are Docker Storage Drivers and Which Should You Use?

Trình điều khiển lưu trữ Docker là gì và bạn nên sử dụng trình điều khiển nào?

How to Transfer a Github Repository to Your Organization (or Another User)

Cách Fork đúng một kho lưu trữ Github

Dịch từ: https://www.cloudsavvyit.com/14792/how-to-run-mongodb-in-a-docker-container/

BÌNH LUẬN

Vui lòng nhập bình luận của bạn
Vui lòng nhập tên của bạn ở đây