MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Khởi tạo dữ liệu trên mongo dày đặc

Một cách tiếp cận khép kín hơn:

  • tạo các tệp javascript để khởi tạo cơ sở dữ liệu của bạn
  • tạo một hình ảnh docker MongoDB bắt nguồn có chứa các tệp này

Có nhiều câu trả lời sử dụng thùng chứa dùng một lần hoặc tạo khối lượng và liên kết chúng, nhưng điều này có vẻ quá phức tạp. Nếu bạn nhìn vào docker-entrypoint.sh của hình ảnh mongo docker, bạn sẽ thấy dòng 206 thực thi /docker-entrypoint-initdb.d/*.js tệp khi khởi tạo bằng cú pháp:mongo <db> <js-file> . Nếu bạn tạo một hình ảnh docker MongoDB bắt nguồn có chứa dữ liệu hạt giống của mình, bạn có thể:

  • có một lệnh chạy docker duy nhất hỗ trợ mongo với dữ liệu hạt giống
  • có dữ liệu được duy trì thông qua các điểm dừng và bắt đầu của vùng chứa
  • đặt lại dữ liệu đó bằng các lệnh dừng, rm và chạy của docker
  • dễ dàng triển khai với các bộ lập lịch thời gian chạy như k8s, mesos, swarm, rancher

Cách tiếp cận này đặc biệt phù hợp với:

  • POCs chỉ cần một số dữ liệu thực tế để hiển thị
  • Đường ống CI / CD cần dữ liệu nhất quán để kiểm tra hộp đen
  • triển khai ví dụ cho các bản demo sản phẩm (kỹ sư bán hàng, chủ sở hữu sản phẩm)

Làm thế nào để:

  1. Tạo và kiểm tra các tập lệnh khởi tạo của bạn (chỉnh sửa dữ liệu nếu thích hợp)
  2. Tạo một Dockerfile cho hình ảnh bắt nguồn của bạn để sao chép các tập lệnh init của bạn

    FROM mongo:3.4
    COPY seed-data.js /docker-entrypoint-initdb.d/
    
  3. Xây dựng hình ảnh docker của bạn

    docker build -t mongo-sample-data:3.4 .
    
  4. Theo tùy chọn, đẩy hình ảnh của bạn vào sổ đăng ký docker để người khác sử dụng

  5. Chạy hình ảnh docker của bạn

    docker run                               \
        --name mongo-sample-data             \
        -p 27017:27017                       \
        --restart=always                     \
        -e MONGO_INITDB_DATABASE=application \
        -d mongo-sample-data:3.4
    

Theo mặc định, docker-entrypoint.sh sẽ áp dụng các tập lệnh của bạn vào test db; lệnh chạy ở trên env var MONGO_INITDB_DATABASE=application sẽ áp dụng các tập lệnh này cho ứng dụng application db thay vào đó. Ngoài ra, bạn có thể tạo và chuyển sang các dbs khác nhau trong tệp js.

Tôi có một repo github thực hiện việc này - đây là các tệp có liên quan.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Bổ sung xác thực MongoDB jsonSchema

  2. MongoDB Seattle 2014

  3. E11000 chỉ mục lỗi chính trùng lặp trong mongodb mongoose

  4. Xử lý BSON Marshaling tùy chỉnh

  5. Kiểm tra tích hợp khởi động mùa xuân với MongoDB nhúng