Inicio rápido: Ejecución de imágenes de contenedor de SQL Server con Docker
Se aplica a:
SQL Server (todas las versiones admitidas): Linux
Nota
Los ejemplos que se muestran a continuación usan docker.exe, pero la mayoría de estos comandos también funcionan con Podman. Proporciona la CLI similar al motor de contenedor de Docker. Puede leer más sobre Podman aquí.
En este inicio rápido, deberá usar Docker para extraer y ejecutar la imagen de contenedor de SQL Server 2017, mssql-server-linux. A continuación, tendrá que conectar con sqlcmd para crear la primera base de datos y ejecutar consultas.
Sugerencia
Si quiere crear contenedores de SQL Server 2019, vea la versión de SQL Server 2019 de este artículo.
Nota
- A partir de SQL Server 2019 CU3, se admite Ubuntu 18.04.
- A partir de SQL Server 2019 CU10, se admite Ubuntu 20.04.
En este inicio rápido, usará Docker para extraer y ejecutar la imagen de contenedor de SQL Server 2019, mssql-server. A continuación, tendrá que conectar con sqlcmd para crear la primera base de datos y ejecutar consultas.
Sugerencia
En este inicio rápido se crean contenedores de SQL Server 2019. Si prefiere crear contenedores de SQL Server 2017, vea la versión de SQL Server 2017 de este artículo.
Esta imagen se compone de SQL Server, que se ejecuta en un sistema Linux basado en Ubuntu 20.04. Se puede usar junto al motor de Docker 1.8 o versiones posteriores en Linux, o bien en Docker en Mac y Windows. Este inicio rápido se centra específicamente en el uso de la imagen de SQL Server en Linux. No trataremos la imagen de Windows, pero puede obtener más información sobre esta en la página mssql-server-windows-developer de Docker Hub.
Requisitos previos
- Motor de Docker 1.8 o versiones posteriores en cualquier distribución de Linux admitida o Docker para Mac y Windows. Para obtener más información, consulte Instalar Docker. Para obtener más información sobre los requisitos de hardware y la compatibilidad con procesadores, vea SQL Server 2019: requisitos de hardware y software.
- Controlador de almacenamiento overlay2 de Docker. Este es el valor predeterminado para la mayoría de los usuarios. Si no usa este proveedor de almacenamiento y necesita cambiar, vea las instrucciones y advertencias de la documentación de Docker para configurar overlay2.
- Un mínimo de 2 GB de espacio en disco.
- Un mínimo de 2 GB de RAM.
- Requisitos del sistema para SQL Server en Linux.
Extracción y ejecución de la imagen de contenedor 2017
Antes de iniciar los pasos siguientes, asegúrese de que ha seleccionado el shell preferido (Bash, PowerShell o cmd) en la parte superior de este artículo.
Extraiga la imagen de contenedor de Linux de SQL Server 2017 desde Microsoft Container Registry.
sudo docker pull mcr.microsoft.com/mssql/server:2017-latestdocker pull mcr.microsoft.com/mssql/server:2017-latestdocker pull mcr.microsoft.com/mssql/server:2017-latestSugerencia
Si quiere crear contenedores de SQL Server 2019, vea la versión de SQL Server 2019 de este artículo.
En el comando anterior, se extrae la última imagen de contenedor de SQL Server 2017. Si quiere extraer una imagen específica, agregue dos puntos y el nombre de etiqueta (por ejemplo,
mcr.microsoft.com/mssql/server:2017-GA-ubuntu). Para ver todas las imágenes disponibles, vea la página de Docker Hub de mssql-server.En los comandos de Bash de este artículo se usa
sudo. En macOS, es posible que no se necesitesudo. En Linux, si no quiere usarsudopara ejecutar Docker, puede configurar un grupo de Docker y agregarle usuarios. Para obtener más información, vea Pasos posteriores a la instalación para Linux.Para ejecutar la imagen de contenedor con Docker, puede usar el siguiente comando desde un shell de Bash (Linux y macOS), o bien una línea de comandos de PowerShell con privilegios elevados.
sudo docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=<YourStrong@Passw0rd>" \ -p 1433:1433 --name sql1 -h sql1 \ -d \ mcr.microsoft.com/mssql/server:2017-latestNota
Si usa PowerShell Core, reemplace las comillas dobles por comillas simples.
docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=<YourStrong@Passw0rd>" ` -p 1433:1433 --name sql1 -h sql1 ` -d ` mcr.microsoft.com/mssql/server:2017-latestdocker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=<YourStrong@Passw0rd>" ` -p 1433:1433 --name sql1 -h sql1 ` -d ` mcr.microsoft.com/mssql/server:2017-latestNota
La contraseña debe seguir la directiva de contraseñas predeterminada de SQL Server. En caso contrario, el contenedor no podrá instalar SQL Server y dejará de funcionar. De forma predeterminada, la contraseña debe tener al menos 8 caracteres y contener caracteres de tres de los cuatro conjuntos siguientes: Letras mayúsculas, letras minúsculas, dígitos de Base 10 y símbolos. Puede examinar el registro de errores ejecutando el comando docker logs.
De forma predeterminada, se creará un contenedor con la edición para desarrolladores de SQL Server 2017. El proceso para ejecutar las ediciones de producción en contenedores es ligeramente diferente. Para obtener más información, vea Run production container image (Ejecutar imágenes de contenedor de producción).
En la tabla siguiente, se proporciona una descripción de los parámetros del ejemplo de
docker runanterior:Parámetro Descripción -e "ACCEPT_EULA=Y" Establezca la variable ACCEPT_EULA en cualquier valor para confirmar que acepta el Contrato de licencia de usuario final. Configuración requerida para la imagen de SQL Server. -e "SA_PASSWORD=<YourStrong@Passw0rd>" Especifique una contraseña segura propia con al menos 8 caracteres y que cumpla los requisitos de contraseña de SQL Server. Configuración requerida para la imagen de SQL Server. -p 1433:1433 Asigne un puerto TCP en el entorno de host (el primer valor) a un puerto TCP en el contenedor (el segundo valor). En este ejemplo, SQL Server escucha en TCP 1433 en el contenedor y se expone al puerto 1433 del host. --name sql1 Especifique un nombre personalizado para el contenedor en lugar de uno generado aleatoriamente. Si ejecuta más de un contenedor, no podrá usar el mismo nombre. -h sql1 Cuando se usa para establecer explícitamente el nombre de host del contenedor, si no se especifica, el valor predeterminado es el identificador del contenedor, que es un GUID del sistema generado aleatoriamente. -d Ejecute el contenedor en segundo plano (demonio). mcr.microsoft.com/mssql/server:2017-latest La imagen de contenedor de SQL Server 2017 para Linux. Para ver los contenedores de Docker, use el comando
docker ps.sudo docker ps -adocker ps -adocker ps -aDebería ver un resultado similar al de la captura de pantalla siguiente:

Si la columna ESTADO muestra el estado Activo, esto indica que SQL Server se está ejecutando en el contenedor y que está escuchando en el puerto especificado en la columna PUERTOS. Si la columna ESTADO de su contenedor de SQL Server muestra Cerrado, consulte la sección Solución de problemas de la guía de configuración. Estará listo para la conexión, una vez que los registros de errores de SQL Server muestren el mensaje:
SQL Server is now ready for client connections. This is an informational message; no user action is required. Puede revisar el registro de errores de SQL Server dentro del contenedor utilizando el comando:docker exec -t sqlrhel cat /var/opt/mssql/log/errorlog | grep connection
El parámetro -h (nombre de host), tal y como se indicó anteriormente, cambia el nombre interno del contenedor a un valor personalizado. Este es el nombre que verá que se devuelve en la siguiente consulta de Transact-SQL:
SELECT @@SERVERNAME,
SERVERPROPERTY('ComputerNamePhysicalNetBIOS'),
SERVERPROPERTY('MachineName'),
SERVERPROPERTY('ServerName')
Establecer -h y --name en el mismo valor es una buena manera de identificar fácilmente el contenedor de destino.
- Como paso final, cambie la contraseña de administrador del sistema porque
SA_PASSWORDse ve en la salida deps -eaxy se almacena en la variable de entorno con el mismo nombre. Vea los pasos siguientes.
Extracción y ejecución de la imagen de contenedor 2019
Antes de iniciar los pasos siguientes, asegúrese de que ha seleccionado el shell preferido (Bash, PowerShell o cmd) en la parte superior de este artículo.
Extraiga la imagen de contenedor de Linux de SQL Server 2019 desde Microsoft Container Registry.
sudo docker pull mcr.microsoft.com/mssql/server:2019-latestNota
Si usa PowerShell Core, reemplace las comillas dobles por comillas simples.
docker pull mcr.microsoft.com/mssql/server:2019-latestdocker pull mcr.microsoft.com/mssql/server:2019-latestSugerencia
En este inicio rápido se usa la imagen de Docker de SQL Server 2019. Si quiere ejecutar la imagen de SQL Server 2017, vea la versión de SQL Server 2017 de este artículo.
El comando anterior extrae la imagen de contenedor de SQL Server 2019 basada en Ubuntu. Para usar en su lugar imágenes de contenedor basadas en RedHat, vea Ejecución de imágenes de contenedor basadas en RHEL. Para ver todas las imágenes disponibles, vea la página mssql-server-linux de Docker Hub.
En los comandos de Bash de este artículo se usa
sudo. En macOS, es posible que no se necesitesudo. En Linux, si no quiere usarsudopara ejecutar Docker, puede configurar un grupo de Docker y agregarle usuarios. Para obtener más información, vea Pasos posteriores a la instalación para Linux.Para ejecutar la imagen de contenedor con Docker, puede usar el siguiente comando desde un shell de Bash (Linux y macOS), o bien una línea de comandos de PowerShell con privilegios elevados.
sudo docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=<YourStrong@Passw0rd>" \ -p 1433:1433 --name sql1 -h sql1 \ -d mcr.microsoft.com/mssql/server:2019-latestdocker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=<YourStrong@Passw0rd>" ` -p 1433:1433 --name sql1 -h sql1 ` -d mcr.microsoft.com/mssql/server:2019-latestdocker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=<YourStrong@Passw0rd>" ` -p 1433:1433 --name sql1 -h sql1 ` -d mcr.microsoft.com/mssql/server:2019-latestNota
La contraseña debe seguir la directiva de contraseñas predeterminada de SQL Server. En caso contrario, el contenedor no podrá instalar SQL Server y dejará de funcionar. De forma predeterminada, la contraseña debe tener al menos 8 caracteres y contener caracteres de tres de los cuatro conjuntos siguientes: Letras mayúsculas, letras minúsculas, dígitos de Base 10 y símbolos. Puede examinar el registro de errores ejecutando el comando docker logs.
De forma predeterminada, se creará un contenedor con la edición para desarrolladores de SQL Server 2019.
En la tabla siguiente, se proporciona una descripción de los parámetros del ejemplo de
docker runanterior:Parámetro Descripción -e "ACCEPT_EULA=Y" Establezca la variable ACCEPT_EULA en cualquier valor para confirmar que acepta el Contrato de licencia de usuario final. Configuración requerida para la imagen de SQL Server. -e "SA_PASSWORD=<YourStrong@Passw0rd>" Especifique una contraseña segura propia con al menos 8 caracteres y que cumpla los requisitos de contraseña de SQL Server. Configuración requerida para la imagen de SQL Server. -p 1433:1433 Asigne un puerto TCP en el entorno de host (el primer valor) a un puerto TCP en el contenedor (el segundo valor). En este ejemplo, SQL Server escucha en TCP 1433 en el contenedor y se expone al puerto 1433 del host. --name sql1 Especifique un nombre personalizado para el contenedor en lugar de uno generado aleatoriamente. Si ejecuta más de un contenedor, no podrá usar el mismo nombre. -h sql1 Cuando se usa para establecer explícitamente el nombre de host del contenedor, si no se especifica, el valor predeterminado es el identificador del contenedor, que es un GUID del sistema generado aleatoriamente. mcr.microsoft.com/mssql/server:2019-latest Imagen de contenedor de Ubuntu Linux de SQL Server 2019. Para ver los contenedores de Docker, use el comando
docker ps.sudo docker ps -adocker ps -adocker ps -aDebería ver un resultado similar al de la captura de pantalla siguiente:

Si la columna ESTADO muestra el estado Activo, esto indica que SQL Server se está ejecutando en el contenedor y que está escuchando en el puerto especificado en la columna PUERTOS. Si en la columna ESTADO del contenedor de SQL Server se muestra Cerrado, vea Solución de problemas de contenedores de Docker de SQL Server.
El parámetro -h (nombre de host), tal y como se indicó anteriormente, cambia el nombre interno del contenedor a un valor personalizado. Esto cambia el nombre interno del contenedor a un valor personalizado. Este es el nombre que verá que se devuelve en la siguiente consulta de Transact-SQL:
SELECT @@SERVERNAME,
SERVERPROPERTY('ComputerNamePhysicalNetBIOS'),
SERVERPROPERTY('MachineName'),
SERVERPROPERTY('ServerName')
Establecer -h y --name en el mismo valor es una buena manera de identificar fácilmente el contenedor de destino.
- Como paso final, cambie la contraseña de administrador del sistema porque
SA_PASSWORDse ve en la salida deps -eaxy se almacena en la variable de entorno con el mismo nombre. Vea los pasos siguientes.
Cambio de la contraseña de SA
La cuenta SA es un administrador del sistema en la instancia de SQL Server que se crea durante la instalación. Después de crear el contenedor de SQL Server, la variable de entorno SA_PASSWORD especificada se reconoce mediante la ejecución de echo $SA_PASSWORD en el contenedor. Por motivos de seguridad, cambie la contraseña de administrador del sistema.
Elija una contraseña segura que se usará para el usuario SA.
Use
docker execpara ejecutar sqlcmd a fin de cambiar la contraseña mediante Transact-SQL. En el ejemplo siguiente, la contraseña anterior y la nueva se leen de la entrada del usuario.sudo docker exec -it sql1 /opt/mssql-tools/bin/sqlcmd \ -S localhost -U SA \ -P "$(read -sp "Enter current SA password: "; echo "${REPLY}")" \ -Q "ALTER LOGIN SA WITH PASSWORD=\"$(read -sp "Enter new SA password: "; echo "${REPLY}")\""
Elija una contraseña segura que se usará para el usuario SA.
En el ejemplo siguiente, reemplace la contraseña anterior,
<YourStrong@Passw0rd>, y la nueva contraseña,<YourNewStrong@Passw0rd>, por sus propios valores de contraseña.docker exec -it sql1 /opt/mssql-tools/bin/sqlcmd ` -S localhost -U SA -P "<YourStrong@Passw0rd>" ` -Q "ALTER LOGIN SA WITH PASSWORD='<YourNewStrong@Passw0rd>'"
Elija una contraseña segura que se usará para el usuario SA.
En el ejemplo siguiente, reemplace la contraseña anterior,
<YourStrong@Passw0rd>, y la nueva contraseña,<YourNewStrong@Passw0rd>, por sus propios valores de contraseña.docker exec -it sql1 /opt/mssql-tools/bin/sqlcmd ` -S localhost -U SA -P "<YourStrong@Passw0rd>" ` -Q "ALTER LOGIN SA WITH PASSWORD='<YourNewStrong@Passw0rd>'"
Conectar a SQL Server
En los pasos siguientes se usa la herramienta de línea de comandos sqlcmd de SQL Server, dentro del contenedor para conectarse a SQL Server.
Use el comando
docker exec -itpara iniciar un shell de Bash interactivo dentro de su contenedor en ejecución. En el ejemplo siguiente, el parámetro--nameespecifica el nombre desql1al crear el contenedor.sudo docker exec -it sql1 "bash"docker exec -it sql1 "bash"docker exec -it sql1 "bash"Una vez dentro del contenedor, conecte localmente con sqlcmd. Sqlcmd no está en la ruta de acceso de forma predeterminada, por lo que deberá especificar la ruta de acceso completa.
/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P "<YourNewStrong@Passw0rd>"Sugerencia
Puede omitir la contraseña en la línea de comandos para que se le solicite escribirla.
Si se realiza correctamente, debe ver un símbolo de sistema de sqlcmd:
1>.
Creación y consulta de datos
En las secciones siguientes se le guía por el uso de sqlcmd y Transact-SQL para crear una base de datos, agregar datos y ejecutar una consulta.
Creación de una base de datos
En los pasos siguientes se crea una base de datos denominada TestDB.
En el símbolo del sistema de sqlcmd, pegue el comando Transact-SQL siguiente para crear una base de datos de prueba:
CREATE DATABASE TestDBEn la línea siguiente, escriba una consulta para devolver el nombre de todas las bases de datos del servidor:
SELECT Name from sys.DatabasesLos dos comandos anteriores no se ejecutaron de inmediato. Escriba
GOen una línea nueva para ejecutar los comandos anteriores:GO
Insertar datos
Luego cree una tabla, Inventory, e inserte dos filas nuevas.
En el símbolo del sistema de sqlcmd, cambie el contexto a la nueva base de datos
TestDB:USE TestDBCree una tabla llamada
Inventory:CREATE TABLE Inventory (id INT, name NVARCHAR(50), quantity INT)Inserte datos en la nueva tabla:
INSERT INTO Inventory VALUES (1, 'banana', 150); INSERT INTO Inventory VALUES (2, 'orange', 154);Escriba
GOpara ejecutar los comandos anteriores:GO
Selección de datos
Ahora ejecute una consulta para devolver datos desde la tabla Inventory.
En el símbolo del sistema sqlcmd, escriba una consulta que devuelva filas desde la tabla
Inventorydonde la cantidad sea mayor que 152:SELECT * FROM Inventory WHERE quantity > 152;Ejecute el comando:
GO
Salida del símbolo del sistema de sqlcmd
Para finalizar la sesión de sqlcmd, escriba
QUIT:QUITPara salir de la línea de comandos interactiva del contenedor, escriba
exit. El contenedor continuará ejecutándose después de salir del shell de Bash interactivo.
Conectarse desde fuera del contenedor
También puede conectarse a la instancia de SQL Server en la máquina de Docker desde cualquier herramienta externa de Linux, Windows o Mac OS que admita conexiones de SQL.
En los pasos siguientes, se usa sqlcmd fuera de su contenedor para conectarse a la instancia de SQL Server que se ejecuta en el contenedor. En estos pasos, se presupone que ya dispone de las herramientas de línea de comandos de SQL Server instaladas fuera de su contenedor. Se aplican los mismos principios que al usar otras herramientas, pero el proceso de conexión es único para cada herramienta.
Busque la dirección IP de la máquina host de su contenedor. En Linux, use ifconfig o ip addr. En Windows, use ipconfig.
En este ejemplo, instale la herramienta sqlcmd en el equipo cliente. Para obtener más información, vea Instalación de sqlcmd en Windows o Instalación de sqlcmd en Linux.
Ejecute sqlcmd especificando la dirección IP y el puerto asignado al puerto 1433 en el contenedor. En este ejemplo se trata del mismo puerto, 1433, que en el equipo host. Si ha especificado otro puerto asignado en el equipo host, se usa aquí. También tendrá que abrir el puerto de entrada adecuado en el firewall para permitir la conexión.
sqlcmd -S <ip_address>,1433 -U SA -P "<YourNewStrong@Passw0rd>"sqlcmd -S <ip_address>,1433 -U SA -P "<YourNewStrong@Passw0rd>"sqlcmd -S <ip_address>,1433 -U SA -P "<YourNewStrong@Passw0rd>"Ejecute los comandos Transact-SQL. Cuando termine, escriba
QUIT.
Estas son otras herramientas de uso común para conectarse a SQL Server:
- Visual Studio Code
- SQL Server Management Studio (SSMS) en Windows
- Azure Data Studio
- mssql-cli (versión preliminar)
- PowerShell Core
Quitar el contenedor
Si quiere quitar el contenedor de SQL Server que se usa en este tutorial, ejecute los comandos siguientes:
sudo docker stop sql1
sudo docker rm sql1
docker stop sql1
docker rm sql1
docker stop sql1
docker rm sql1
Advertencia
Al detener y quitar un contenedor, se eliminarán permanentemente los datos de SQL Server que contenga. Si tiene que conservar sus datos, cree un archivo de copia de seguridad y cópielo en una ubicación externa al contenedor, o bien use una técnica de persistencia de datos de contenedor.
Demostración de Docker
Tras haber intentado usar la imagen de contenedor de SQL Server en Docker, puede que quiera saber cómo usar Docker para mejorar el desarrollo y las pruebas. En el vídeo siguiente se muestra cómo se puede usar Docker en un escenario de implementación e integración continuas.
Pasos siguientes
Para ver un tutorial sobre cómo restaurar archivos de copia de seguridad de bases de datos en un contenedor, consulte Restore a SQL Server database in a Linux Docker container (Restaurar una base de datos de SQL Server en un contenedor de Docker en Linux). Explore otros escenarios, como la ejecución de varios contenedores, la persistencia de datos y la solución de problemas.
También puede consultar el repositorio de Github mssql-docker para ver una serie de recursos, comentarios y problemas conocidos.