zoukankan      html  css  js  c++  java
  • 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
    ~]#
  • 相关阅读:
    git爬坑不完全指北(二):failed to push some refs to ‘XXX’的解决方案
    javascript精雕细琢(三):作用域与作用域链
    javascript精雕细琢(二):++、--那点事
    git爬坑不完全指北(一):Permission to xxx.git denied to user的解决方案
    深入浅出CSS(三):隐藏BOSS大盘点之默认属性小总结
    读书笔记
    MPP5运维手册
    HTML自闭合(self-closing)标签
    Mysql JDBC的通信协议(报文的格式和基本类型)
    详解 & 0xff 的作用
  • 原文地址:https://www.cnblogs.com/merray/p/12849100.html
Copyright © 2011-2022 走看看