docker-compose восстановление базы данных в sql-server-linux
Я следую за https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-configure-docker?view=sql-server-2017 чтобы настроить и запустить автономный контейнер sqlserver в макросах с постоянным данные успешно. Теперь я хочу создать файл docker-compose, который содержит 2 вещи:
- Web
- База данных (скопирует бак-файл с хоста в контейнер и восстановит)
Как мне достичь (2)?
Мой файл docker-compose:
version: "3"
services:
web:
build:
context: ./webapi
dockerfile: Dockerfile
ports:
- "4010:80"
environment:
- ASPNETCORE_ENVIRONMENT=Development
depends_on:
- db
db:
image: "mcr.microsoft.com/mssql/server:2017-latest"
ports:
- "4009:1433"
volumes:
- "sqlvolume:/var/opt/mssql"
environment:
SA_PASSWORD: "<password>"
ACCEPT_EULA: "Y"
redis:
image: "redis:alpine"
volumes:
sqlvolume:
1 ответ
Существует несколько различных способов выполнить задачу восстановления. Если ваша резервная копия находится на подключенном томе, вы можете восстановить с помощью sqlcmd, например:
run docker exec -it db /opt/mssql-tools/bin/sqlcmd -Usa -P<password> -Q"RESTORE DATABASE YourDatabase FROM DISK='/var/opt/mssql/backup/your-backup.bak';"
Вы также можете скопировать резервную копию в контейнер, используя docker cp
и восстановить оттуда.
Если вашей целью является восстановление базы данных из подключенного тома при каждом запуске контейнера, вы можете создать собственный образ SQL Server с помощью RESTORE
команда (которая может быть заключена в сценарий оболочки). Ниже dockerfile
пример:
FROM mcr.microsoft.com/mssql/server:2017-latest
CMD /opt/mssql-tools/bin/sqlcmd -U 'sa' -P $MSSQL_SA_PASSWORD -Q"RESTORE DATABASE YourDatabase FROM DISK='/var/opt/mssql/backup/your-backup.bak';" & /opt/mssql/bin/sqlservr