#mongodb #docker #docker-compose
#mongodb #docker #docker-compose
Вопрос:
У меня есть следующий compose.yml
version: "3"
services:
easy-notes-app:
container_name: nodejs-elliot
image: elliotching/elliot-nodejs
restart: always
build: .
ports:
- "3003:3000"
links:
- mongo
mongo:
container_name: mongo
image: mongo
ports:
- '27017:27017'
Я хочу
Поделитесь всем, что указано в этом yml, включая MongoDB и его данные
Я узнал, что без указания volumes
данные находятся внутри самого контейнера и являются независимыми от хоста. Как я могу сделать, чтобы все было так, чтобы человек, который извлек контейнер, уже получил данные вместе?
Я пробовал docker-compose push
, но на другом компьютере он не извлекает mongo, и кажется, что mongo все еще нужно устанавливать вручную, и он не поставляется с данными mongo.
Комментарии:
1. Основная цель Docker — изолировать (~ контейнеризировать) среды. Все, что вам нужно нажать
docker-compose up
, и он настроит ваши два контейнера. Что касается миграции данных, в Docker hub есть много информации. Это очень просто по сравнению с настройкой всего вручную.2. Извините, что я виноват, минимальное требование
docker-compose.yml
должно быть скопировано на другой компьютер, иdocker-compose up
. Я пыталсяdocker run elliotching/elliot-nodejs
Ответ №1:
насколько я понимаю, вы хотите полностью отправить изображения docker и данные его контейнеров в другую систему, поэтому поправьте меня, если я ошибаюсь.
- сначала вы должны использовать тома, чтобы убедиться в сохранности данных в вашем контейнере даже после перезапуска вашего хоста. скопируйте том на хост для передачи или используйте scp для копирования из контейнера на хост.
- чтобы сохранить изображение в виде tar-файла
docker save -o <path for generated tar file> <image name>
- в другой системе используйте этот код для загрузки изображений
docker load -i <path to image tar file>
- убедитесь, что имена изображений помечены как ваш локальный репозиторий, а не как docker hub или другой репозиторий.
- затем
docker-compose up -d
Комментарии:
1. мы будем очень признательны, если вы сможете поделиться более подробной информацией о вашем ответе, например, как создать том? нужно ли мне указывать в yml или запускать команды cli?
2. для создания тома docker volume create —name <имя> затем для подключения к тому docker запустите -d -p 8080:8083 —name <имя> -v <путь к хосту>:/<путь к контейнеру> <Имя_изображения> это пример с docker run
3. в вашем docker-compose используйте его следующим образом — volumes: — data:/usr/share/yourapp/data