Вам, вероятно, следует хранить содержимое вашей базы данных где-то вроде S3 и отправлять его отдельно от образа Docker базы данных.
Обычно образ Docker содержит только программу, предназначенную для запуска, и, если с ним связано постоянное состояние (например, данные базы данных), которое хранится отдельно. Вы запустите свое изображение с чем-то вроде
docker run --name mongo -v $PWD/mongo:/data mongo
Как правило, если вы сделали это, вы можете docker stop
контейнер, docker rm
его, затем docker run
новый контейнер для того же хранилища данных. Если это сработает, то это также сработает для трансплантации данных в другое место.
Так что я бы предложил рабочий процесс, в котором вы используете неизмененный образ базы данных и отдельно распространяете его данные. Возможно, вы захотите иметь скрипт начальной загрузки, который будет выглядеть примерно так:
#!/bin/sh
SNAPSHOT=mongo-snapshot-20180831
if [ ! -d $SNAPSHOT ]; then
aws s3 cp s3://my-volume/mongo/$SNAPSHOT.tar.gz $SNAPSHOT.tar.gz
tar xzf $SNAPSHOT.tar.gz
fi
docker run --name mongo -d -p 27017:27017 -v $PWD/$SNAPSHOT:/data mongo:4.1
Когда в прошлом я пытался работать с очень большими изображениями, docker build
и docker push
на изображениях размером от 2 до 4 ГБ сталкивались с такими проблемами, которые вы здесь описываете (сбои в сети, тайм-ауты и тому подобное, даже просто копируя контекст сборки в демон Docker), и я бы сказал, что Docker на самом деле просто не работает с любым размером изображения в гигабайтах.