Jak zalać bazę danych mongo używając docker-compose?
Próbuję rozpowszechnić zestaw połączonych aplikacji działających w kilku połączonych kontenerach, które zawierają bazę danych mongo, która jest wymagana do:
- być dystrybuowane zawierające niektóre dane nasion;
- Zezwalaj użytkownikom na dodawanie dodatkowych danych.
Najlepiej, gdy dane będą przechowywane w powiązanym pojemniku objętości danych.
Mogę pobrać dane do kontenera mongo
za pomocą instancji bazowej mongo
, która nie montuje żadnych woluminów (obraz dockerhub: psychemedia/mongo_nomount
- jest to zasadniczo podstawowy plik Dockerfile mongo bez instrukcji VOLUME /data/db
) i Dockerfile
config w następujący sposób:
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
Gdzie ./testdata.csv
znajduje się w tym samym katalogu (./mongo-with-data
) co plik Dockerfile.
Mój plik konfiguracyjny docker-compose zawiera:
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
Kiedy próbuję zamontować wolumin, wydaje się, że oryginalne dane zasiane - które są przechowywane w /data/db
- są usuwane. Myślę, że kiedy wolumin jest zamontowany do /data/db
zastępuje to, co jest obecnie.
Długi widok jest taki, że chcę zautomatyzować budowę kilka połączonych kontenerów, a następnie rozprowadzić Vagrantfile
/docker-compose plik YAML, który odpali zestaw połączonych aplikacji, który zawiera wstępnie osadzoną bazę danych mongo
z (częściowo wstępnie wypełnionym) trwałym kontenerem danych.
6 answers
Robię to używając innego kontenera Dockera, którego jedynym celem jest wysiew mongo, a następnie wyjście. Podejrzewam, że jest to ten sam pomysł co ebaxt ' s, ale kiedy szukałem odpowiedzi na to, chciałem tylko zobaczyć szybki i brudny, ale prosty przykład. Więc tu jest mój:
Docker-compose.yml
mongodb:
image: mongo
ports:
- "27017:27017"
mongo-seed:
build: ./mongo-seed
links:
- mongodb
# my webserver which uses mongo (not shown in example)
webserver:
build: ./webserver
ports:
- "80:80"
links:
- mongodb
Mongo-seed / Dockerfile
FROM mongo
COPY init.json /init.json
CMD mongoimport --host mongodb --db reach-engine --collection MyDummyCollection --type json --file /init.json --jsonArray
Mongo-nasiona/init.json
[
{
"name": "Joe Smith",
"email": "[email protected]",
"age": 40,
"admin": false
},
{
"name": "Jen Ford",
"email": "[email protected]",
"age": 45,
"admin": true
}
]
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:03:02
Oto writeup jak używamy jednorazowych pojemników do czyszczenia i nasion obrazów https://ardoq.com/delightful-database-seeding-with-docker/
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-19 08:34:13
Możesz użyć tego Obrazu , który zapewnia kontener docker dla wielu zadań (import, eksport , zrzut)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-11 08:24:45
Na własne pytanie:
- prosty plik YAML do tworzenia prostego kontenera mongo połączonego z kontenerem objętości danych, uruchamianego przez Vagrant docker compose.
- w pliku Vagrantfile, kod w linii:
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
Aby zaimportować dane.
Spakuj pudełko.
Rozprowadź pudełko.
Dla użytkownika, prosty Vagrantfile do załadowania pudełka i uruchomienia prostego skryptu docker-compose YAML do uruchomienia kontenerów i zamontowania Mongo db przeciwko pojemnikowi objętości danych.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-10 21:25:25
Możesz użyć Mongo Seeding Docker image .
Dlaczego?- masz gotowy obraz dokera
- nie jesteś przywiązany do plików JSON - obsługiwane są również pliki JavaScript i TypeScript (w tym opcjonalna Walidacja modelu za pomocą TypeScript)
Przykładowe użycie z Dockerem Compose:
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:latest'
environment:
- DROP_DATABASE=true
- CONVERT_ID_TO_UNDERSCORE_ID=true
- *dbName
- *dbPort
- *dbHost
volumes:
- ./data-import/data/dev/:/app/data/
links:
- database
depends_on:
- database
Zastrzeżenie: jestem autorem tej biblioteki.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-14 18:04:31
Przydało mi się używanie niestandardowych obrazów Dockera i używanie woluminów, zamiast tworzenia kolejnego kontenera do siewu.
Struktura Plików
.
├── docker-compose.yml
├── mongo
│ ├── data
│ ├── Dockerfile
│ └── init-db.d
│ └── seed.js
Każda lokalizacja pliku wymieniona w
Dockerfile
/docker-compose.yml
, jest względem położeniadocker-compose.yml
DOCKERFILE
FROM mongo:3.6
COPY ./init-db.d/seed.js /docker-entrypoint-initdb.d
Docker-compose.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}}
Nasiona.js
// 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
}
])
Aby uzyskać więcej informacji na temat personalizacji usługi Docker MongoDB, przeczytaj this
docker-entrypoint-initdb.d
może być używany do tworzenia różnych użytkowników i mongodb sprawy związane z administracją, wystarczy utworzyć Alfabetycznie uporządkowany skrypt js docreateUser
itd...
Dobrze jest również chronić swoje hasła i nazwy użytkowników przed publicznością, nie naciskaj poświadczeń na publiczny git , zamiast tego używaj tajemnic dokera . Przeczytaj również ten Tutorial na temat sekretów
Należy pamiętać, nie jest konieczne, aby przejść do tryb Docker-swarm aby używać sekretów. Komponowanie plików obsługuje również tajemnice. Sprawdź to
Sekrety mogą być również używane w MongoDB Docker Services
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-09 04:03:32