参考MSDN :Docker安装SQLSERVER

Docker 已经安装成功这里不再重述,现在安装sqlserver:

首先百度找到 docker hub MSSQLserver的官方镜像:镜像地址

 

打开网址:可以看到官方网页上已经给出了拉取的完整脚本:

 

 

 

 

 

直接复制镜像脚本,执行即可(默认安装最新版本的sqlserver,也可以选择具体的tag版本进行安装,可以参考网页说明). 

 

  1. docker pull mcr.microsoft.com/mssql/server

 

 docker image 查看 发现已经拉取成功,共1.5G大小

  

 

仔细浏览网页,Description中已经给出了image的使用方法.

 看下参数的具体说明:

  • 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):

  1. 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运行:

  1. docker exec -it <container_id|container_name> /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P <your_password>

 

 

总结:SQLSERVER 在docker下的安装十分简单,只需要2步就能完成

  1. #1. 拉取SQLSERVER docker 镜像
  2. docker pull mcr.microsoft.com/mssql/server
  3.  
  4.  
  5. #2.运行
  6. 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

  1. [root@dfdf var]# mkdir mssql_data
  2. [root@dfdf var]# ls
  3. 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容器,使用下列脚本重新生成容器

  1. 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):

  1. # docker logs sqlserver
  2. SQL Server 2019 will run as non-root by default.
  3. This container is running as user mssql.
  4. To learn more visit https://go.microsoft.com/fwlink/?linkid=2099216.
  5. /opt/mssql/bin/sqlservr: Error: The system directory [/.system] could not be created. Errno [13]
  6. SQL Server 2019 will run as non-root by default.
  7. This container is running as user mssql.
  8. To learn more visit https://go.microsoft.com/fwlink/?linkid=2099216.
  9. /opt/mssql/bin/sqlservr: Error: The system directory [/.system] could not be created. Errno [13]

 

问题描述:

以根用户的身份运行非根容器,如果需要,以根用户的身份运行非根容器。 这还会将所有文件权限自动授予容器。

简单的说就是权限问题,容器没有权限访问外部目录

 

解决办法:

修改目录权限:

  1. chmod 777 /var/mssql_data

再次运行就可以了.

查看下挂载成功后的mssql_data,和容器内mssql目录是一样的了.复制拷贝可以直接从这个目录上处理.

 

 其它功能:sqlcmd

  1. --进入容器内部bash
  2. docker exec -it sqlserver bash
  3. --打开sqlcmd
  4. /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P "password"

 

 

 sql脚本都可以在这里直接输入,记得要换行go以后才执行.

 

其它功能二:启动代理

注意启动代理的使用使用root用户执行bash 否则会执行失败

  1. [root@local~]# docker exec -it -u root sqlserver bash
  2. root@518c2b65b0fb:/# /opt/mssql/bin/mssql-conf set sqlagent.enabled true
  3. SQL Server needs to be restarted in order to apply this setting. Please run
  4. \'systemctl restart mssql-server.service\'.
  5. root@518c2b65b0fb:/# exit
  6. exit
  7. [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
    ~]#

 

版权声明:本文为merray原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/merray/p/12849100.html