MongoDB(Docker) 초기 데이터 설정 방법

5771 단어 DockerMongoDBtech

하고 싶은 일


MongodB의 Docker 이미지에서 컨테이너를 만들 때 초기 데이터를 설정합니다.
docker hub - mongo에서 설명한 초기 데이터의 설정 방법의 시험 내용의 메모.
Initializing a fresh instance
When a container is started for the first time it will execute files with extensions .sh and .js that are found in/docker-entrypoint-initdb.d. Files will be executed in alphabetical order. .js files will be executed by mongo using the database specified by the MONGO_INITDB_DATABASE variable, if it is present, or test otherwise. You may also switch databases within the .js script.

컨디션

  • PC: MacBook Air (M1, 2020)
  • OS: MacOS Big Sur 11.1
  • CPU: Apple M1
  • Docker: version 20.10.1, build 831ebeae96
  • 시나리오 1은 단일 DB의 시나리오

    MONGO_INITDB_DATABASE에 객체의 DB를 지정하고 쿼리 파일을 /docker-entrypoint-initdb.d에 구성합니다.
    Dockerfile
    FROM mongo:4
    
    ENV MONGO_INITDB_ROOT_USERNAME root
    ENV MONGO_INITDB_ROOT_PASSWORD password
    ENV MONGO_INITDB_DATABASE app1
    
    ENV TZ="Asia/Tokyo"
    RUN echo $TZ > /etc/timezone
    
    COPY init.js /docker-entrypoint-initdb.d/
    
    init.js
    db.createUser({user: "foo", pwd: "foo-password", roles: [{role:"readWrite",db: "app1"}]})
    

    DB가 2개 이상인 경우


    만약 MONGO_INITDB_DATABASE라면 DB가 지정되기 때문에 조회 파일 측면에서 유입된 DB를 전환하는 예
    Dockerfile
    FROM mongo:4
    
    ENV MONGO_INITDB_ROOT_USERNAME root
    ENV MONGO_INITDB_ROOT_PASSWORD password
    
    ENV TZ="Asia/Tokyo"
    RUN echo $TZ > /etc/timezone
    
    COPY init.js /docker-entrypoint-initdb.d/
    
    init.js
    db = db.getSiblingDB("app1");
    db.createUser({user: "foo", pwd: "foo-password", roles: [{role:"readWrite",db: "app1"}]})
    
    db = db.getSiblingDB("app2");
    db.createUser({user: "bar", pwd: "bar-password", roles: [{role:"readWrite",db: "app2"}]})
    
    또는 몬고 케이스를 사용한 도안
    Dockerfile
    FROM mongo:4
    
    ENV MONGO_INITDB_ROOT_USERNAME root
    ENV MONGO_INITDB_ROOT_PASSWORD password
    
    ENV TZ="Asia/Tokyo"
    RUN echo $TZ > /etc/timezone
    
    COPY init.sh /docker-entrypoint-initdb.d/
    
    init.sh
    #!/bin/sh
    
    query=$(cat <<EOS
    use app1\n
    db.createUser({user: "foo", pwd: "foo-password", roles: [{role:"readWrite",db: "app1"}]})\n
    
    use app2\n
    db.createUser({user: "bar", pwd: "bar-password", roles: [{role:"readWrite",db: "app2"}]})\n
    EOS
    )
    
    echo -e "\n" $query | mongo -u $MONGO_INITDB_ROOT_USERNAME -p$MONGO_INITDB_ROOT_PASSWORD
    

    참조: 파일 구성.yml


    tree
    .
    |-- docker-compose.yml
    |-- mongo
    |   |-- Dockerfile
    |   `-- init.js
    `-- mongo_express
        `-- Dockerfile
    
    docker-compose.yml
    version: '3'
    
    services:
      mongo:
        build: ./mongo
        restart: always
        ports:
          - 27017:27017
    
      mongo-express:
        build: ./mongo_express
        restart: always
        ports:
          - 8081:8081
    
    mongo_express/Dockerfile
    FROM  mongo-express
    
    ENV ME_CONFIG_MONGODB_ADMINUSERNAME root
    ENV ME_CONFIG_MONGODB_ADMINPASSWORD password
    
    ENV TZ="Asia/Tokyo"
    RUN echo $TZ > /etc/timezone
    

    좋은 웹페이지 즐겨찾기