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
~]#

 

posted @ 2020-05-08 15:27  Merray  Views(14621)  Comments(0Edit  收藏  举报