복붙노트

[MONGODB] dockerized 몽고에 초기화 데이터

MONGODB

dockerized 몽고에 초기화 데이터

나는 dockerized 몽고 컨테이너를 실행 해요.

좀 초기화 된 데이터와 몽고의 이미지를 생성하고 싶습니다.

어떤 아이디어?

해결법

  1. ==============================

    1.먼저 고정 표시기 볼륨을 만들

    먼저 고정 표시기 볼륨을 만들

    docker volume create --name mongostore
    

    다음 몽고 컨테이너를 만들

    docker run -d --name mongo -v mongostore:/data/db mongo:latest
    

    -v 옵션은 여기 몽고는 데이터를 저장 곳입니다 / 데이터 / dB 위치에서 볼륨 mongostore를 장착 할 책임이있다. 볼륨 (호스트) 지속됩니다. 심지어 더 용기가 당신이 당신의 mongostore 볼륨에 의해 나열됩니다 실행되지와

    docker volume ls
    

    당신은 용기를 죽이고 새 (위와 동일 라인) 이전 컨테이너의 상태를 데리러 새로운 몽고 컨테이너를 만들 수 있습니다.

    볼륨을 초기화 아무것도 존재하지 않는 경우는 몽고는 새 데이터베이스를 초기화합니다. 이것은 mongostore에서 초기 데이터를 생성하는 책임이있다. 하자 당신이 미리 시드 데이터베이스를 사용하여 새로운 환경을 만들 것을 말한다. 문제는 몽고 컨테이너를 작성하기 전에 볼륨 (예를 들어) 해당 지역의 환경에서 데이터를 전송하는 방법이된다. 나는 두 가지 사례를 나열 할 수 있습니다.

    또한 원격 호스트로 파일을 복사하고 거기에서 설치하지만 난 전혀 원격 호스트와 상호 작용하지 않도록하는 경향이 있었다.

    기권. 내가 메모리에서이 쓰고 있어요 (더 테스트 없음).

  2. ==============================

    2.더 독립적 인 접근 방법 :

    더 독립적 인 접근 방법 :

    이 일회용 용기를 사용하거나 볼륨을 생성하고 연결 많은 답변이 있지만이 지나치게 복잡해 보인다. 당신이 몽고 고정 표시기 이미지의 docker-entrypoint.sh를 보는 경우에, 당신은 구문을 사용하여 초기에 그 라인 (206)가 실행 /docker-entrypoint-initdb.d/*.js 파일을 참조하십시오 몽고 . 당신이 당신의 씨앗 데이터가 포함 된 파생 MongoDB를 고정 표시기 이미지를 만드는 경우, 당신은 할 수 있습니다 :

    이러한 접근 방식은 특히 잘하기 적합합니다 :

    어떻게:

    기본적으로 docker-entrypoint.sh 테스트 DB에 스크립트를 적용합니다; 위의 실행 명령 ENV의 var에 MONGO_INITDB_DATABASE = 응용 프로그램 대신 응용 프로그램 DB에이 스크립트를 적용합니다. 양자 택일로, 당신은 만들고 JS 파일에 다른 DBS로 전환 할 수 있습니다.

    여기에 관련 파일이 - 난 그냥이 수행하는 github의의 REPO 있습니다.

  3. ==============================

    3.몽고 고정 표시기의 최신 버전으로,이 같은 나를 위해 작동합니다.

    몽고 고정 표시기의 최신 버전으로,이 같은 나를 위해 작동합니다.

    FROM mongo
    COPY dump /home/dump
    COPY mongo_restore.sh /docker-entrypoint-initdb.d/
    

    이 같은 스크립트 모습을 복원 몽고.

    #!/bin/bash
    # Restore from dump
    mongorestore --drop --gzip --db "<RESTORE_DB_NAME>" /home/dump
    

    당신은 일반적으로 이미지를 구축 할 수있다.

    docker build -t <TAG> .
    
  4. ==============================

    4.어떻게 든 나를 위해 쉬운 방법을 발견했습니다.

    어떻게 든 나를 위해 쉬운 방법을 발견했습니다.

    당신이 당신의 서버에 고정 표시기 컨테이너에서 데이터베이스를 말해봐, 당신은 여기에 당신이 무엇을 할 수 있는지, 그것은을 백업 할.

    무엇 광산에 설치 다를 수 있습니다하면 몽고 고정 표시기 컨테이너의 이름 [MongoDB를 (기본 elastic_spence를 사용)입니다. 그래서 반드시 다음 단계에 맞게 --name MongoDB를 먼저 컨테이너를 시작합니다

    $ docker run \
     --rm \
     --link mongodb:mongo \
     -v /root:/backup \
     mongo \
     bash -c ‘mongodump --out /backup --host $MONGO_PORT_27017_TCP_ADDR’
    

    그리고 덤프에서 데이터베이스를 복원합니다.

    $ docker run \
     --rm \
     --link mongodb:mongo \
     -v /root:/backup \
     mongo \
     bash -c ‘mongorestore /backup --host $MONGO_PORT_27017_TCP_ADDR’
    

    당신은 당신이 scp를 사용할 수있는 서버에서 덤프를 다운로드해야하는 경우 :

    $ scp -r root@IP:/root/backup ./backup
    

    아니면 업로드 :

    $ scp -r ./backup root@IP:/root/backup
    

    P.S : https://blog.studiointeract.com/mongodump-and-mongorestore-for-mongodb-in-a-docker-container-8ad0eb747c62에서 제공 팀 Brandin에 의해 원래 소스

    감사합니다!

  5. ==============================

    5.여기의 고정 표시기-작성하여 수행 방법이다. 나는 몽고의 이전 이미지를 사용하지만 docker-entrypoint.sh 이미지의 모든 버전 *은 .js와 *의 .sh 파일을 받아들입니다.

    여기의 고정 표시기-작성하여 수행 방법이다. 나는 몽고의 이전 이미지를 사용하지만 docker-entrypoint.sh 이미지의 모든 버전 *은 .js와 *의 .sh 파일을 받아들입니다.

    고정 표시기 - compose.yaml

    version: '3'
    
    services:
      mongo:
        container_name: mongo
        image: mongo:3.2.12
        ports:
          - "27017:27017"
        volumes:
          - mongo-data:/data/db:cached
          - ./deploy/local/mongo_fixtures /fixtures
          - ./deploy/local/mongo_import.sh:/docker-entrypoint-initdb.d/mongo_import.sh
    
    volumes:
      mongo-data:
        driver: local
    

    mongo_import.sh:

    #!/bin/bash
    # Import from fixtures
    
    mongoimport --db wcm-local --collection clients --file /fixtures/properties.json && \
    mongoimport --db wcm-local --collection configs --file /fixtures/configs.json
    

    그리고 내 monogo_fixtures JSON 파일의 형식은 다음과 monogoexport의 제품입니다 :

    {"_id":"some_id","field":"value"}
    {"_id":"another_id","field":"value"}
    

    이것은 단지 바로 바로 고정 표시기-작성 파일에 설정된 권리 엔트리 포인트와 이미지를 사용하여, 사용자 정의 Dockerfile없이이를 사용하여 사람들을 도와야한다. 건배!

  6. from https://stackoverflow.com/questions/39348478/initialize-data-on-dockerized-mongo by cc-by-sa and MIT license