Docker 安装Sqlserver
参考MSDN :Docker安装SQLSERVER
Docker 已经安装成功这里不再重述,现在安装sqlserver:
1. 下载 SQLSERVER Image
首先百度找到 docker hub MSSQLserver的官方镜像:镜像地址
打开网址:可以看到官方网页上已经给出了拉取的完整脚本:
直接复制镜像脚本,执行即可(默认安装最新版本的sqlserver,也可以选择具体的tag版本进行安装,可以参考网页说明).
docker pull mcr.microsoft.com/mssql/server
docker image 查看 发现已经拉取成功,共1.5G大小
2:生成容器并运行 docker run
仔细浏览网页,Description中已经给出了image的使用方法.
看下参数的具体说明:
Requirements
-
This image requires Docker Engine 1.8+ in any of their supported platforms.
-
At least 2GB of RAM (3.25 GB prior to 2017-CU2). Make sure to assign enough memory to the Docker VM if you're running on Docker for Mac or Windows.
-
Requires the following environment flags
ACCEPT_EULA=Y
SA_PASSWORD=<your_strong_password>
MSSQL_PID=<your_product_id | edition_name> (default: Developer)
-
A strong system administrator (SA) password: At least 8 characters including uppercase, lowercase letters, base-10 digits and/or non-alphanumeric symbols.
要求:Docker1.8以上 内存2G以上如果是2017最低3.5G内存,
SA_PASSWORD :设置sa的密码,必须包含大小写、字母和数字、特殊符号混合才行
MSSQL_PID:这里可以设置版本类型或者产品激活码,默认是Developer即开发版本
最终完整脚本如下(增加了容器名称sqlserver设置,MSSQL_PID设置的是Enterprise Core版本,默认image mcr.microsoft.com/mssql/server):
docker run --name=sqlserver -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=password*****' -e 'MSSQL_PID=2C9JR-K3RNG-QD4M4-JQ2HR-8468J' -p 1433:1433 -d mcr.microsoft.com/mssql/server
OK,docker ps 可以看到已经运行成功了,开放防火墙后,在客户端机器上远程连接即可(经测试默认开启了远程连接无需配置)
默认sqlserver安装在/var/opt目录和/opt目录
SQLCMD运行:
docker exec -it <container_id|container_name> /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P <your_password>
总结:SQLSERVER 在docker下的安装十分简单,只需要2步就能完成
#1. 拉取SQLSERVER docker 镜像 docker pull mcr.microsoft.com/mssql/server #2.运行 docker run --name=sqlserver -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=PWD********' -e 'MSSQL_PID=2C9JR-K3RNG-QD4M4-JQ2HR-8468J' -p 1433:1433 -d mcr.microsoft.com/mssql/server
补充:sqlserver数据存储默认只存于容器内部,如果容器销毁数据会出现丢失,为了长期保存我们创建启动容器时需要在主机内存储一份,这里使用挂载主机目录到容器内部目录的方式
在原有的docker run指令增加-v <host directory>:/var/opt/mssql命令参数来完成。
先在主机中新建目录mssql_data用来存储data
[root@dfdf var]# mkdir mssql_data [root@dfdf var]# ls account adm cache crash db empty ftp games gopher kerberos lib local lock log mail mssql_data nis opt preserve run spool tmp yp
创建后删除旧的sqlserver容器,使用下列脚本重新生成容器
docker run --name=sqlserver -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=8580555@Mf' -e 'MSSQL_PID=2C9JR-K3RNG-QD4M4-JQ2HR-8468J' -p 1433:1433 -v /var/mssql_data:/var/opt/mssql -d mcr.microsoft.com/mssql/server
二次安装无法启动查看下错误日志(docker logs):
# docker logs sqlserver SQL Server 2019 will run as non-root by default. This container is running as user mssql. To learn more visit https://go.microsoft.com/fwlink/?linkid=2099216. /opt/mssql/bin/sqlservr: Error: The system directory [/.system] could not be created. Errno [13] SQL Server 2019 will run as non-root by default. This container is running as user mssql. To learn more visit https://go.microsoft.com/fwlink/?linkid=2099216. /opt/mssql/bin/sqlservr: Error: The system directory [/.system] could not be created. Errno [13]
问题描述:
以根用户的身份运行非根容器,如果需要,以根用户的身份运行非根容器。 这还会将所有文件权限自动授予容器。
简单的说就是权限问题,容器没有权限访问外部目录
解决办法:
修改目录权限:
chmod 777 /var/mssql_data
再次运行就可以了.
查看下挂载成功后的mssql_data,和容器内mssql目录是一样的了.复制拷贝可以直接从这个目录上处理.
其它功能:sqlcmd
--进入容器内部bash docker exec -it sqlserver bash --打开sqlcmd /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P "password"
sql脚本都可以在这里直接输入,记得要换行go以后才执行.
其它功能二:启动代理
注意启动代理的使用使用root用户执行bash 否则会执行失败
[root@local~]# docker exec -it -u root sqlserver bash root@518c2b65b0fb:/# /opt/mssql/bin/mssql-conf set sqlagent.enabled true SQL Server needs to be restarted in order to apply this setting. Please run 'systemctl restart mssql-server.service'. root@518c2b65b0fb:/# exit exit [root@local~]# docker stop sqlserver
[root@local~]# docker start sqlserver
[root@local~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
518c2b65b0fb mcr.microsoft.com/mssql/server "/opt/mssql/bin/perm…" 19 hours ago Up 5 seconds 0.0.0.0:1433->1433/tcp sqlserver
[root@local~]#