如何在Docker容器上设置MS SQL Server的Linux版本

时间:2020-03-05 15:25:26  来源:igfitidea点击:

本文介绍了如何在Docker中的Linux操作系统上设置和运行Microsoft SQL Server。

我将使用Docker Hub上可用的图像来运行Docker容器。
早期版本的SQL Server旨在在Windows操作系统上运行。
SQL Server 2016 CTP 2. 1运行基于Linux的OS。
Microsoft还发布了Docker镜像,该映射已预先安装MySQL-Server for Linux和Windows容器。
我们将讨论在基于Linux的容器OS上安装MySQL-Server。

使用下面列出的Microsoft/MSSQL-Server-Linux Docker Image的最低要求很少:

  • 安装Docker Engine 1.

8或者更高版本

  • 至少4 GB的磁盘空间
  • 至少4 GB的内存
  • 我们需要设置强的MSSQL管理员密码,该密码应至少为8个字符,包括大写,小写字母,基本10位数和/或者非字母数字符号。

如何创建MSSQL-Server-Linux Docker容器

要创建具有MSSQL-Server的Docker容器,我们将必须运行下面的命令,该命令将下载Microsoft/MSSQL-Server-Linux(如果尚未存在于计算机上)并根据其创建容器。

在此之前,我会向我们展示一些Docker命令。

要检查任何Docker容器是否正在运行:

BANL141cc14d1:~ ngupta9$docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
BANL141cc14d1:~ ngupta9$

这意味着目前没有容器。

要检查机器上的所有容器(不一定在运行状态):

BANL141cc14d1:~ ngupta9$docker ps -a
CONTAINER ID        IMAGE                                   COMMAND             CREATED             STATUS                    PORTS                                          NAMES
bec19ccd48af        coolnicks/qbdt-dashboard:ubuntu-14.04   "/bin/bash"         12 weeks ago        Exited (0) 12 weeks ago   0.0.0.0:8880->80/tcp, 0.0.0.0:8881->8000/tcp   QBDT-Dashboard
6d0c74506404        ubuntu:14.04                            "/bin/bash"         12 weeks ago        Exited (0) 12 weeks ago                                                  qbdt-dashboard
7b667349c0c3        python:2.7-wheezy                       "python2"           12 weeks ago        Exited (0) 12 weeks ago                                                  python-2.7
22dc8a99c427        coolnicks/ansible:ubuntu1404-nginx      "/bin/bash"         3 months ago        Exited (0) 3 months ago                                                  my_ubuntu_nginx_container
BANL141cc14d1:~ ngupta9$

这表明系统上存在4个容器和出现的状态。
我们还可以看到它们所在的Docker镜像。
超过1个容器可以基于单个Docker图像。

同样,我们可以检查机器上存在的Docker图像。

BANL141cc14d1:~ ngupta9$docker images
REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
coolnicks/qbdt-dashboard      ubuntu-14.04        89faaa2ecceb        12 weeks ago        936.1 MB
python                        2.7-wheezy          97f122a59c01        3 months ago        530.6 MB
ubuntu                        14.04               7c09e61e9035        3 months ago        188 MB
coolnicks/ansible             ubuntu1404-nginx    b4dcce787cd4        3 months ago        329 MB
jenkins                       latest              e11ceb27c34e        5 months ago        714.6 MB
ansible/ubuntu14.04-ansible   stable              1526eaefd882        20 months ago       287.4 MB
BANL141cc14d1:~ ngupta9$

这些是机器上存在的图像。
Microsoft/MSSQL-Server-Linux镜像尚未存在。
我们将运行命令以根据Microsoft/MSSQL-Server-Linux创建一个容器。
Docker引擎将检查机器上是否存在此图像。
如果不是,那么它将在机器上下载图像并根据此图像创建一个容器。
从下次开始,如果要创建MSSQL-Server-Linux容器,则不会下载图像。
它将使用已下载的图像。

BANL141cc14d1:~ ngupta9$docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=@MyMSSQLDocker112' -p 1433:1433 -d microsoft/mssql-server-linux
Unable to find image 'microsoft/mssql-server-linux:latest' locally
latest: Pulling from microsoft/mssql-server-linux
aed15891ba52: Pull complete
773ae8583d14: Pull complete
d1d48771f782: Pull complete
cd3d6cd6c0cf: Pull complete
8ff6f8a9120c: Pull complete
1fd7e8b10447: Pull complete
bd485157db89: Pull complete
273a1970ce9c: Pull complete
67fbf3e59574: Pull complete
4c0c60131530: Pull complete
Digest: sha256:604d27fe5d3d9b4434fb1657e9bf4f2c2bf55ea9bd29dc0cb3660d84bc6f56a8
Status: Downloaded newer image for microsoft/mssql-server-linux:latest
0cebc8c5f887c237007bb099e2e93012ac8a4746b275bf078eb881b027ba2d3c
BANL141cc14d1:~ ngupta9$
BANL141cc14d1:~ ngupta9$docker images
REPOSITORY                     TAG                 IMAGE ID            CREATED             SIZE
microsoft/mssql-server-linux   latest              5985832855cf        4 weeks ago         1.382 GB
coolnicks/qbdt-dashboard       ubuntu-14.04        89faaa2ecceb        12 weeks ago        936.1 MB
python                         2.7-wheezy          97f122a59c01        3 months ago        530.6 MB
ubuntu                         14.04               7c09e61e9035        3 months ago        188 MB
coolnicks/ansible              ubuntu1404-nginx    b4dcce787cd4        3 months ago        329 MB
jenkins                        latest              e11ceb27c34e        5 months ago        714.6 MB
ansible/ubuntu14.04-ansible    stable              1526eaefd882        20 months ago       287.4 MB
BANL141cc14d1:~ ngupta9$
BANL141cc14d1:~ ngupta9$docker ps -a
CONTAINER ID        IMAGE                                   COMMAND                  CREATED             STATUS                     PORTS                                          NAMES
0cebc8c5f887        microsoft/mssql-server-linux            "/bin/sh -c /opt/mssq"   5 minutes ago       Exited (1) 5 minutes ago                                                  tender_saha
bec19ccd48af        coolnicks/qbdt-dashboard:ubuntu-14.04   "/bin/bash"              12 weeks ago        Exited (0) 12 weeks ago    0.0.0.0:8880->80/tcp, 0.0.0.0:8881->8000/tcp   QBDT-Dashboard
6d0c74506404        ubuntu:14.04                            "/bin/bash"              12 weeks ago        Exited (0) 12 weeks ago                                                   qbdt-dashboard
7b667349c0c3        python:2.7-wheezy                       "python2"                12 weeks ago        Exited (0) 12 weeks ago                                                   python-2.7
22dc8a99c427        coolnicks/ansible:ubuntu1404-nginx      "/bin/bash"              3 months ago        Exited (0) 3 months ago                                                   my_ubuntu_nginx_container
BANL141cc14d1:~ ngupta9$

我们可以看到它已下载了图像并创建了一个容器ID` 0cebc8c5f8887c2375bf88a4746b275bf078eb881b027ba2d3c或者0cebc8c5f8887的容器的容器。

有时,我们可能会面临出现错误的问题"该程序需要一台带有至少3250兆字节的内存的机器。
"

BANL141cc14d1:~ ngupta9$docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=@MyMSSQLDocker112' -p 1433:1433 microsoft/mssql-server-linux
sqlservr: This program requires a machine with at least 3250 megabytes of memory.

因此,我们必须将~4GB 内存分配给命令行中的Docker容器。
在某些情况下,即使我们将内存分配给Docker容器,但它将失败以相同的错误。
在这种情况下,我们必须检查分配给Docker的内存并使其成为4GB。
通常,它在MAC中可以看到(我们可以在Docker下的首选项部分中更改分配的内存)。

BANL141cc14d1:~ ngupta9$docker run --memory 4096m -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=@MyMSSQLDocker112' -p 1433:1433 -d microsoft/mssql-server-linux
300fb0551542ca1fe9ed0c021980ed3ad61c788ca6dae66147e20598e45e6c07

BANL141cc14d1:~ ngupta9$docker ps
CONTAINER ID        IMAGE                          COMMAND                  CREATED             STATUS              PORTS                    NAMES
300fb0551542        microsoft/mssql-server-linux   "/bin/sh -c /opt/mssq"   4 seconds ago       Up 3 seconds        0.0.0.0:1433->1433/tcp   pensive_roentgen
BANL141cc14d1:~ ngupta9$

现在,我们可以连接在Docker容器上运行的MSSQL服务器,并使用下面的命令执行数据库操作:

BANL141cc14d1:~ ngupta9$docker exec -it 300fb0551542 /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P @MyMSSQLDocker112
1> SELECT Name from sys.Databases;
2> GO
Name
-------------------------------------------------------------------------------------------------------------------------------
master
tempdb
model
msdb
 
(4 rows affected)
1> CREATE DATABASE testdb;
2> GO
1>
1>
1> USE testdb;
2> GO
Changed database context to 'testdb'.
1>
1> CREATE TABLE inventory (id INT, name NVARCHAR(50), quantity INT);
2> GO
1> INSERT INTO inventory VALUES (1, 'banana', 150);
2> INSERT INTO inventory VALUES (2, '', 154);
3> GO
 
(1 rows affected)
 
(1 rows affected)
1> SELECT * FROM inventory WHERE quantity > 152;
2> GO
id          name                                               quantity
----------- -------------------------------------------------- ----------
2                                                      154
 
(1 rows affected)
1>
1> SELECT * FROM inventory WHERE quantity > 150;
2> GO
id          name                                               quantity
----------- -------------------------------------------------- ----------
2                                                      154
 
(1 rows affected)
1>
1> SELECT * FROM inventory WHERE quantity > 149;
2> GO
id          name                                               quantity
----------- -------------------------------------------------- ----------
1 banana                                                     150
2                                                      154
 
(2 rows affected)
1> QUIT
BANL141cc14d1:~ ngupta9$

如果我们想在交互模式下进入容器并运行命令,那么我们可以这样做:

BANL141cc14d1:~ ngupta9$docker ps
CONTAINER ID        IMAGE                          COMMAND                  CREATED             STATUS              PORTS                    NAMES
300fb0551542        microsoft/mssql-server-linux   "/bin/sh -c /opt/mssq"   15 minutes ago      Up 15 minutes       0.0.0.0:1433->1433/tcp   pensive_roentgen
BANL141cc14d1:~ ngupta9$docker exec -it 300fb0551542 bash
root@300fb0551542:/# pwd
/
root@300fb0551542:/# cd
root@300fb0551542:~# pwd
/root
root@300fb0551542:~# which sqlcmd
root@300fb0551542:~# /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P @MyMSSQLDocker112
1> SELECT Name from sys.Databases;
2> GO
Name
-------------------------------------------------------------------------------------------------------------------------------
master
tempdb
model
msdb
testdb
 
(5 rows affected)
1> QUIT
root@300fb0551542:~#