摘要:我们工作当中经常需要拉取多个数据库实例出来做集群,做测试也好,通过 Docker 拉取 SqlServer 镜像,再通过镜像运行多个容器,几分钟就可以创建多个实例,效率是相当的高。
1. docker 拉取镜像
注意:这里拉取到的是
docker pull mcr.microsoft.com/mssql/server
2. 查看拉取下来的镜像
docker images
当出现下面一个 mcr.microsoft.com/mssql/server 名字时代表成功了。
REPOSITORY TAG IMAGE ID CREATED SIZE
mcr.microsoft.com/mssql/server latest 004f8fbb046c 6 weeks ago 1.59GB
3. 使用镜像创建一个 SqlServer 实例
# 创建第1个实例
docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=Zzw123456' -p 1001:1433 --name sqlserver2022_01 -d mcr.microsoft.com/mssql/server:latest
# 创建第2个实例
docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=Zzw123456' -p 1002:1433 --name sqlserver2022_02 -d mcr.microsoft.com/mssql/server:latest
# 创建第3个实例
docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=Zzw123456' -p 1003:1433 --name sqlserver2022_03 -d mcr.microsoft.com/mssql/server:latest
命令解释:
docker run
:表示运行一个 Docker 容器。-e 'ACCEPT_EULA=Y'
:设置环境变量ACCEPT_EULA
的值为Y
,这可能是用于表示接受某种最终用户许可协议。-e 'SA_PASSWORD=Zzw123456'
:设置环境变量SA_PASSWORD
的值为Zzw123456
,可能是用于设置相关服务的密码。-p 1001:1433
:进行端口映射,将主机的1001
端口映射到容器内的1433
端口。--name sqlserver2022_01
:为创建的容器指定名称为sqlserver2022_01
。-d
:以守护式(后台)模式运行容器。mcr.microsoft.com/mssql/server:latest
:指定要使用的镜像为mcr.microsoft.com/mssql/server
的最新版本(latest
标签)
执行上面的命令就可以创建 3 个sqlserver 实例了(是不是很方便,随便造)
4. 查询刚创建的容器
通过命令 docker ps -a 查询正在运行的容器,发现就有三个数据库实例了。
5. 验证
输入连接必要的信息,注意端口号就是上传创建容器时指定的。
连接后效果图如下,Microsoft SQL Server Developer (64-bit) 版本。
6. 创建容器时遇到的问题
问题:发现运行不起来,STATUS 状态是 Exited (1) ,意思运行后立马退出了,下面是排查过程。
- 删除容器重新创建,发现不行。
- 怀疑是防火墙的问题,于是关闭了防火墙,测试还是连接不上。
- 通过查询 docker logs <容器ID> 查看日志,通过分析日志,发现运行 Sql Server 实例需要 2 G的内存,而我的虚拟机刚好是 2G的内存,内存不够导致,于是关闭虚拟机,调大内存完美解决。