Cómo configurar MS SQL Server en el contenedor Docker
Este artículo explica cómo configurar y ejecutar Servidor Microsoft SQL en contenedor Sistema operativo Linux. Usaré la imagen disponible en Docker Hub para ejecutar un contenedor Docker. Una versión anterior de SQL Server está diseñada para ejecutarse en el sistema operativo Windows. SQL Server 2017 CTP 2.1 también ejecuta un sistema operativo basado en Linux. Microsoft también publicó imágenes de Docker que tienen mysql-server preinstalado para contenedores de Linux y Windows. Hablaremos sobre la instalación de mysql-server en un sistema operativo contenedor basado en linux.
Hay algunos requisitos mínimos para usar la imagen de la ventana acoplable microsoft / mssql-server-linux que se enumeran a continuación:
- Instale Docker Engine 1.8 o superior
- Mínimo de 4 GB de espacio en disco
- Mínimo de 4 GB de RAM
- Debe establecer una contraseña de administrador de mssql segura que debe tener al menos 8 caracteres, incluidas mayúsculas, minúsculas, dígitos de base 10 y / o símbolos no alfanuméricos.
Cómo crear un contenedor Docker mssql-server-linux
Para crear un contenedor docker que tenga mssql-server, tendremos que ejecutar el siguiente comando que descargará microsoft / mssql-server-linux (si aún no está presente en la máquina) y creará un contenedor basado en él.
Antes de eso, te mostraré algunos comandos de la ventana acoplable.
Para comprobar si se está ejecutando algún contenedor de la ventana acoplable:
BANL141cc14d1:~ ngupta9$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES BANL141cc14d1:~ ngupta9$
Significa que no hay ningún contenedor en ejecución en este momento.
Para verificar todos los contenedores en la máquina (no necesariamente en estado de ejecución):
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$
Esto muestra que hay 4 contenedores presentes en el sistema y en estado de salida. También puede ver la imagen de la ventana acoplable en la que se basan. Más de 1 contenedor se puede basar en una sola imagen de Docker.
Del mismo modo, puede verificar las imágenes de la ventana acoplable presentes en su máquina.
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$
Estas son las imágenes presentes en la máquina. La imagen de microsoft / mssql-server-linux aún no está presente. Ejecutaremos el comando para crear un contenedor basado en microsoft / mssql-server-linux. El motor Docker comprobará si esta imagen está presente en la máquina o no. De lo contrario, descargará la imagen en la máquina y creará un contenedor basado en esta imagen. A partir de la próxima vez, no descargará la imagen si desea crear un contenedor mssql-server-linux. Utilizará la imagen ya descargada.
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$
Puede ver que descargó la imagen y creó un contenedor con ID de contenedor 0cebc8c5f887c237007bb099e2e93012ac8a4746b275bf078eb881b027ba2d3c or 0cebc8c5f887
.
A veces, puede tener un problema en el que obtendrá el error «Este programa requiere una máquina con al menos 3250 megabytes de memoria».
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.
Por lo tanto, tendrá que asignar ~ 4 GB de RAM al contenedor de la ventana acoplable en la línea de comando. En algunos casos, incluso si está asignando memoria al contenedor de la ventana acoplable, fallará con el mismo error. En ese caso, tendrá que verificar la memoria asignada a Docker y convertirla en 4GB. Generalmente, se ve en Mac (puede cambiar la RAM asignada en la sección de preferencias en la ventana acoplable).
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$
Ahora puede conectarse con el servidor MsSql que se ejecuta en el contenedor de la ventana acoplable y realizar operaciones de base de datos utilizando los siguientes comandos:
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$
Si desea ingresar al contenedor en modo interactivo y ejecutar el comando, puede hacer lo siguiente:
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:~#
Conclusión
Microsoft es consciente de que la mayoría de las empresas utilizan sistemas basados en Linux como desarrollo para servidores de producción y muchas están migrando de Windows a Linux si es posible. Por lo tanto, Microsoft también está entrando en el área de Linux y proporciona su software que puede ejecutarse en sistemas basados en Linux y ahora también está probando imágenes de Docker basadas en contenedores de Linux. MsSql para Linux es el producto que se puede ejecutar en sistemas basados en Linux y en contenedores Docker basados en Linux.