docker-compose를 사용하여 mongo 데이터베이스를 시드하려면 어떻게 해야 합니까?
mongo 데이터베이스를 포함하는 여러 개의 링크된 컨테이너에서 실행되는 연결된 응용 프로그램 세트를 배포하려고 합니다.
- 일부 시드 데이터를 포함하는 분포
- 사용자가 추가 데이터를 추가할 수 있습니다.
데이터는 링크된 데이터 볼륨 컨테이너에도 유지되는 것이 이상적입니다.
를 「아까부터」에 수 .mongo를 mongo않은 "Dockerhub" image: "도커허브")psychemedia/mongo_nomount입니다. - Mongo Docker 파일에는 mongo Docker가 .VOLUME /data/db및 「」의 a」를 참조해 주세요.Dockerfile뭇매를 맞다
ADD . /files
WORKDIR /files
RUN mkdir -p /data/db && mongod --fork --logpath=/tmp/mongodb.log && sleep 20 && \
mongoimport --db testdb --collection testcoll --type csv --headerline --file ./testdata.csv #&& mongod --shutdown
서 ''는./testdata.csv에 있습니다(이 디렉토리에는 없습니다)../mongo-with-data를 도커 파일로 를 도커 파일로 지정합니다.
도커 컴포지트 설정 파일에는 다음이 포함됩니다.
mongo:
#image: mongo
build: ./mongo-with-data
ports:
- "27017:27017"
#Ideally we should be able to mount this against a host directory
#volumes:
# - ./db/mongo/:/data/db
#volumes_from:
# - devmongodata
#devmongodata:
# command: echo created
# image: busybox
# volumes:
# - /data/db
볼륨을 마운트하려고 할 때마다 원본 시드 데이터가 에 저장되어 있는 것처럼 보입니다./data/db-가 삭제되었습니다.이 륨륨트마에 /data/db현재 존재하는 모든 것을 대신합니다.
즉, 도커 사용자 가이드는 다음과 같이 제안합니다: 컨테이너가 생성될 때 볼륨이 초기화됩니다. 컨테이너의 기본 이미지에 지정된 마운트 포인트의 데이터가 포함되어 있는 경우 볼륨 초기화 시 기존 데이터가 새 볼륨에 복사됩니까?그래서 시딩 후에 VOLUME 명령어를 배치하면 데이터가 계속 유지될 것으로 예상했습니다.RUN★★★★★★★★★★★★★★★★★?
그럼 내가 뭘 잘못하고 있는 거지?
은 여러 컨테이너 입니다.Vagrantfile//docker-composure YAML을 한 일련의 된 어플리케이션을 합니다.mongo(사전 입력된) 영구 데이터 컨테이너가 있는 데이터베이스입니다.
다른 도커 컨테이너를 사용하여 이 작업을 수행하는데, 도커 컨테이너의 목적은 몽고 씨를 뿌린 다음 빠져나가는 것뿐입니다.ebaxt의 아이디어와 같은 생각이라고 생각합니다만, 그 해답을 찾고 있을 때, 저는 단지 빠르고 지저분하지만 간단한 예를 보고 싶었습니다.여기 제 것이 있습니다.
docker-param.yml
mongodb:
image: mongo
ports:
- "27017:27017"
mongo-seed:
build: ./mongo-seed
depends_on:
- mongodb
# my webserver which uses mongo (not shown in example)
webserver:
build: ./webserver
ports:
- "80:80"
depends_on:
- mongodb
mongo-seed/Docker 파일
FROM mongo
COPY init.json /init.json
CMD mongoimport --host mongodb --db reach-engine --collection MyDummyCollection --type json --file /init.json --jsonArray
mongo-seed/init.json
[
{
"name": "Joe Smith",
"email": "jsmith@gmail.com",
"age": 40,
"admin": false
},
{
"name": "Jen Ford",
"email": "jford@gmail.com",
"age": 45,
"admin": true
}
]
시드하기 위해 다른 컨테이너를 작성하는 대신 도커 커스텀 이미지를 사용하고 볼륨을 사용하는 것이 도움이 되었습니다.
파일 구조
.
├── docker-compose.yml
├── mongo
│ ├── data
│ ├── Dockerfile
│ └── init-db.d
│ └── seed.js
되어 있는
Dockerfile/docker-compose.yml,, 의, 의, 의, 적, 적, 적, ,, ,, ,, ,, ,, ,, ,의 위치에 상대적입니다.docker-compose.yml
도커 파일
FROM mongo:3.6
COPY ./init-db.d/seed.js /docker-entrypoint-initdb.d
docker-param.yml
version: '3'
services:
db:
build: ./mongo
restart: always
volumes:
- ./mongo/data:/data/db #Helps to store MongoDB data in `./mongo/data`
environment:
MONGO_INITDB_ROOT_USERNAME: {{USERNAME}}
MONGO_INITDB_ROOT_PASSWORD: {{PWD}}
MONGO_INITDB_DATABASE: {{DBNAME}}
seed.discloss.discloss(시드).
// Since Seeding in Mongo is done in alphabetical order... It's is important to keep
// file names alphabetically ordered, if multiple files are to be run.
db.test.drop();
db.test.insertMany([
{
_id: 1,
name: 'Tensor',
age: 6
},
{
_id: 2,
name: 'Flow',
age: 10
}
])
docker-entrypoint-initdb.d다른 사용자 및 mongodb 관리 관련 항목을 작성하기 위해 사용할 수 있습니다. js-script to라는 이름의 알파벳 순서를 작성하기만 하면 됩니다.
MongoDB Docker 서비스를 맞춤화하는 방법에 대한 자세한 내용은 여기를 참조하십시오.
또, 패스워드와 유저명을 Public으로부터 보호하는 것이 좋습니다.public git에 credential을 푸시하지 말고 Docker Secrets를 사용합니다.비밀에 관한 이 튜토리얼도 읽어보십시오.
비밀 정보를 사용하기 위해 도커-스왑 모드로 전환할 필요는 없습니다.Compose Files는 비밀도 지원합니다.체크해 주세요
비밀은 MongoDB 도커 서비스에서도 사용할 수 있습니다.
현재 답변은 @Jeff Fairley 답변에 기반하고 있으며 새로운 도커 문서에 따라 갱신되었습니다.
docker-compose.yml
version: "3.5"
services:
mongo:
container_name: mongo_dev
image: mongo:latest
ports:
- 27017:27017
networks:
- dev
mongo_seed:
container_name: mongo_seed
build: .
networks:
- dev
depends_on:
- mongo
networks:
dev:
name: dev
driver: bridge
Dockerfile
FROM mongo:latest
COPY elements.json /elements.json
CMD mongoimport --host mongo --db mendeleev --collection elements --drop --file /elements.json --jsonArray
현재 이미지를 재구축해야 할 수도 있습니다.
이 이미지를 사용하면 많은 작업(import, export, dump)에 도커 컨테이너를 사용할 수 있습니다.
docker-compose를 사용한 예를 참조하십시오.
Mongo Seading Docker 이미지를 사용할 수 있습니다.
왜요?
- 도커 이미지가 준비되었습니다.
- JSON 파일에 얽매이지 않습니다.JavaScript 파일 및 TypeScript 파일도 지원됩니다(TypeScript를 사용한 옵션 모델 검증 포함).
도커 구성에서의 사용 예:
version: '3'
services:
database:
image: 'mongo:3.4.10'
ports:
- '27017:27017'
api:
build: ./api/
command: npm run dev
volumes:
- ./api/src/:/app/src/
ports:
- '3000:3000'
- '9229:9229'
links:
- database
depends_on:
- database
- data_import
environment:
- &dbName DB_NAME=dbname
- &dbPort DB_PORT=27017
- &dbHost DB_HOST=database
data_import:
image: 'pkosiec/mongo-seeding:3.0.0'
environment:
- DROP_DATABASE=true
- REPLACE_ID=true
- *dbName
- *dbPort
- *dbHost
volumes:
- ./data-import/dev/:/data-import/dev/
working_dir: /data-import/dev/data/
links:
- database
depends_on:
- database
면책사항:저는 이 도서관의 저자입니다.
여기 동작하는 데이터베이스 시드 mongodb 도커 compose 다음 명령을 사용하여 데이터베이스 도커 파일을 시드합니다.
FROM mongo:3.6.21
COPY init.json /init.json
CMD mongoimport --uri mongodb://mongodb:27017/testdb --collection users --type json --file /init.json --jsonArray
docker-param.yml
version: "3.7"
services:
mongodb:
container_name: mongodb
image: mongo:3.6.21
environment:
- MONGO_INITDB_DATABASE=testdb
volumes:
- ./data:/data/db
ports:
- "27017:27017"
mongo_seed:
build: ./db
depends_on:
- mongodb
내 질문에 대답하려면:
- 간단한 YAML 파일을 사용하여 데이터 볼륨 컨테이너에 링크된 단순한 Mongo 컨테이너를 만들 수 있습니다. Vagrant 도커 구성에 의해 부팅됩니다.
- Vagrant 파일에서 다음 행에 따라 코드를 지정합니다.
config.vm.provision :shell, :inline => <<-SH docker exec -it -d vagrant_mongo_1 mongoimport --db a5 --collection roads --type csv --headerline --file /files/AADF-data-minor-roads.csv SH
데이터를 Import 합니다.
상자를 포장해 주세요.
상자를 배포합니다.
사용자는 상자를 로드하는 간단한 Vagrant 파일을 사용하여 컨테이너를 시작하고 데이터 볼륨 컨테이너에 대해 mongo db를 마운트합니다.
언급URL : https://stackoverflow.com/questions/31210973/how-do-i-seed-a-mongo-database-using-docker-compose
'programing' 카테고리의 다른 글
| 하위 폴더에 Nginx 다시 쓰기(404) (0) | 2023.03.26 |
|---|---|
| jq의 빈 어레이를 적절하게 삭제하는 방법 (0) | 2023.03.26 |
| 리액트 렌더 함수로 비동기화하는 방법 (0) | 2023.03.26 |
| Wordpress 프로젝트에 .gitignore 파일에서 가장 적합한 설정은 무엇입니까? (0) | 2023.03.26 |
| Angular에서 쿠키의 유효기간을 설정하는 방법JS (0) | 2023.03.21 |