从MacBook OSX上的SqlServer开始优化Docker容器的问题

时间:2019-11-29 16:51:51

标签: sql-server docker

我是Docker新手,并且设法创建了简单的步骤来创建,启动和加载运行sqlserver的映像以及数据库备份。对我来说,这是三个步骤。

docker pull mcr.microsoft.com/mssql/server:2019-latest
docker run --name SQL19c -p 1433:1433 -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=xxxx" -v /Users/useraccount/sql:/sql -d mcr.microsoft.com/mssql/server:2019-latest
docker exec -it SQL19c /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P 'xxxx' -Q 'RESTORE DATABASE svcodecamp FROM DISK = "/sql/sv-small-2019.bak" WITH MOVE "361684_codecamp08_dat" TO "/var/opt/mssql/ata/codecamp08_dat.mdf", MOVE "361684_codecamp08_log" TO "/var/opt/mssql/data/codecamp08_log.mdf"'

这是在运行OSX的Macbook上,我经常重启,因此每次需要使用SqlServer时都需要这样做。

对此有疑问:

1)每次执行此操作时,都必须将SQL19c递增到Sql19d(或下一个字母),因为在使用名称时会出现错误。如何重用同一个名字?

2)如果我管理该容器,则需要重新拖动整个图像(1gig)。我只需要启动它并重新加载数据,而不是提取完整图像

3)是否有更优化的方法来启动SqlServer并加载数据,而无需每次重新启动计算机或重新启动docker时都消耗过多的电池电量?

(请注意,我的备份文件位于docker共享上,因此无需在其中进行复制)

1 个答案:

答案 0 :(得分:1)

  1. 这是因为您已经有一个使用此名称的容器。尝试执行命令:
docker container list -a
  1. 如果重新拖动图像,我认为您删除的是图像而不是容器以便删除容器,则必须运行
docker container rm SQL19x 
  1. 方法是重新启动容器,删除数据库,然后还原数据库

运行一次:这将创建一个SQL19x 容器

docker pull mcr.microsoft.com/mssql/server:2019-latest
docker run --name SQL19x -p 1433:1433 -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=xxxx" -v /Users/useraccount/sql:/sql -d mcr.microsoft.com/mssql/server:2019-latest

现在,每次重新启动计算机时,都必须运行以下命令来启动容器并重新启动数据库。

docker container start SQL19x
docker exec -it SQL19x /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P 'xxxx' -Q 'DROP DATABASE svcodecamp'
docker exec -it SQL19x /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P 'xxxx' -Q 'RESTORE DATABASE svcodecamp FROM DISK = "/sql/sv-small-2019.bak" WITH MOVE "361684_codecamp08_dat" TO "/var/opt/mssql/ata/codecamp08_dat.mdf", MOVE "361684_codecamp08_log" TO "/var/opt/mssql/data/codecamp08_log.mdf"'

如果要在关机之前彻底关闭计算机,请执行

docker container stop SQL19x