如何在Docker容器上设置MS SQL Server的Linux版本
本文介绍了如何在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:~#