diff --git a/samples/MicroserviceDemo/databases/restore/Dockerfile b/samples/MicroserviceDemo/databases/restore/Dockerfile new file mode 100644 index 0000000000..917fc27e1a --- /dev/null +++ b/samples/MicroserviceDemo/databases/restore/Dockerfile @@ -0,0 +1,14 @@ +FROM alpine AS unzip +WORKDIR /src +RUN apk add --no-cache unzip +COPY /samples/MicroserviceDemo/databases/MsDemo_Identity.zip . +COPY /samples/MicroserviceDemo/databases/MsDemo_ProductManagement.zip . +RUN unzip -q "*.zip" + +FROM mcr.microsoft.com/mssql-tools AS restore +WORKDIR /src +COPY --from=unzip /src/MsDemo_Identity.bak . +COPY --from=unzip /src/MsDemo_ProductManagement.bak . +COPY /samples/MicroserviceDemo/databases/restore/entrypoint.sh . +RUN chmod +x ./entrypoint.sh +ENTRYPOINT [ "./entrypoint.sh" ] \ No newline at end of file diff --git a/samples/MicroserviceDemo/databases/restore/entrypoint.sh b/samples/MicroserviceDemo/databases/restore/entrypoint.sh new file mode 100644 index 0000000000..cb34a14ff7 --- /dev/null +++ b/samples/MicroserviceDemo/databases/restore/entrypoint.sh @@ -0,0 +1,29 @@ +#!/bin/bash + +set -e +mkdir -p /var/opt/mssql/backup +mv /src/MsDemo_Identity.bak /var/opt/mssql/backup +mv /src/MsDemo_ProductManagement.bak /var/opt/mssql/backup + +until /opt/mssql-tools/bin/sqlcmd -S sqlserver -U SA -P $SA_PASSWORD -Q 'SELECT name FROM master.sys.databases'; do +>&2 echo "SQL Server is starting up" +sleep 1 +done + +/opt/mssql-tools/bin/sqlcmd -S sqlserver \ + -U SA -P $SA_PASSWORD \ + -Q 'RESTORE FILELISTONLY FROM DISK = "/var/opt/mssql/backup/MsDemo_Identity.bak"' \ + | tr -s ' ' | cut -d ' ' -f 1-2 + +/opt/mssql-tools/bin/sqlcmd -S sqlserver \ + -U SA -P $SA_PASSWORD \ + -Q 'RESTORE FILELISTONLY FROM DISK = "/var/opt/mssql/backup/MsDemo_ProductManagement.bak"' \ + | tr -s ' ' | cut -d ' ' -f 1-2 + +/opt/mssql-tools/bin/sqlcmd \ + -S sqlserver -U SA -P $SA_PASSWORD \ + -Q 'RESTORE DATABASE MsDemo_Identity FROM DISK = "/var/opt/mssql/backup/MsDemo_Identity.bak" WITH MOVE "MsDemo_Identity" TO "/var/opt/mssql/data/MsDemo_Identity.mdf", MOVE "MsDemo_Identity_log" TO "/var/opt/mssql/data/MsDemo_Identity_log.ldf"' + +/opt/mssql-tools/bin/sqlcmd \ + -S sqlserver -U SA -P $SA_PASSWORD \ + -Q 'RESTORE DATABASE MsDemo_ProductManagement FROM DISK = "/var/opt/mssql/backup/MsDemo_ProductManagement.bak" WITH MOVE "MsDemo_ProductManagement" TO "/var/opt/mssql/data/MsDemo_ProductManagement.mdf", MOVE "MsDemo_ProductManagement_log" TO "/var/opt/mssql/data/MsDemo_ProductManagement_log.ldf"' diff --git a/samples/MicroserviceDemo/docker-compose.migrations.yml b/samples/MicroserviceDemo/docker-compose.migrations.yml index 8753be77e4..513c1245aa 100644 --- a/samples/MicroserviceDemo/docker-compose.migrations.yml +++ b/samples/MicroserviceDemo/docker-compose.migrations.yml @@ -15,3 +15,15 @@ services: dockerfile: samples/MicroserviceDemo/databases/Dockerfile depends_on: - sqlserver + + restore-database: + image: 'microservice-demo/restore-database:${TAG:-latest}' + build: + context: ../.. + dockerfile: samples/MicroserviceDemo/databases/restore/Dockerfile + volumes: + - dbdata:/var/opt/mssql + environment: + - SA_PASSWORD=yourStrong(!)Password + depends_on: + - sqlserver