Compartir a través de


Inicio rápido: Ejecución de imágenes de contenedor de SQL Server para Linux con Docker

Se aplica a: SQL Server - Linux

En este inicio rápido, se usa Docker para extraer y ejecutar la imagen de contenedor de SQL Server 2017 (14.x) para Linux, mssql-server-linux. Después, se podrá conectar con sqlcmd para crear la primera base de datos y ejecutar consultas.

Para obtener más información sobre las plataformas admitidas, consulte Notas de la versión de SQL Server 2017 en Linux.

Advertencia

Al detener y eliminar un contenedor, se eliminarán permanentemente los datos de SQL Server que contenga. Para obtener más información sobre 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.

En este inicio rápido se crean contenedores de SQL Server 2017 (14.x). Si prefiere crear contenedores de Linux para diferentes versiones de SQL Server, vea las versiones de este artículo de SQL Server 2019 (15.x) o de SQL Server 2022 (16.x) de este artículo.

En este inicio rápido, se usa Docker para extraer y ejecutar la imagen de contenedor de SQL Server 2019 (15.x) para Linux, mssql-server-linux. Después, se podrá conectar con sqlcmd para crear la primera base de datos y ejecutar consultas.

Para obtener más información sobre las plataformas admitidas, consulte Notas de la versión de SQL Server 2019 en Linux.

Advertencia

Al detener y eliminar un contenedor, se eliminarán permanentemente los datos de SQL Server que contenga. Para obtener más información sobre 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.

En este inicio rápido se crean contenedores de SQL Server 2019 (15.x). Si prefiere crear contenedores de Linux para diferentes versiones de SQL Server, vea las versiones de SQL Server 2017 (14.x) o de SQL Server 2022 (16.x) de este artículo.

En este inicio rápido, se usa Docker para extraer y ejecutar la imagen de contenedor de SQL Server 2022 (16.x) para Linux, mssql-server-linux. Después, se podrá conectar con sqlcmd para crear la primera base de datos y ejecutar consultas.

Para obtener más información sobre las plataformas admitidas, consulte Notas de la versión de SQL Server 2022 en Linux.

Advertencia

Al detener y eliminar un contenedor, se eliminarán permanentemente los datos de SQL Server que contenga. Para obtener más información sobre 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.

En este inicio rápido se crean contenedores de SQL Server 2022 (16.x). Si prefiere crear contenedores de Linux para diferentes versiones de SQL Server, consulte las versiones de SQL Server 2017 (14.x) o de SQL Server 2019 (15.x) de este artículo.

Esta imagen se compone de SQL Server, que se ejecuta en un sistema Linux basado en Ubuntu. Se puede usar junto al motor de Docker 1.8 o versiones posteriores en Linux.

A partir de SQL Server 2022 (16.x) CU 14 y SQL Server 2019 (15.x) CU 28, las imágenes contenedoras incluyen el nuevo paquete mssql-tools18. El directorio /opt/mssql-tools/bin anterior se está eliminando gradualmente. El nuevo directorio para las herramientas ODBC 18 de Microsoft es /opt/mssql-tools18/bin, que se alinea con la oferta de herramientas más reciente. Para obtener más información sobre los cambios y las mejoras de seguridad, vea Lanzamiento del controlador ODBC 18.0 para SQL Server.

Los ejemplos de este artículo utilizan el comando docker. Sin embargo, la mayoría de estos comandos también funcionan con Podman. Podman proporciona una interfaz de línea de comandos similar a la del motor Docker. Puede obtener más información sobre Podman.

Importante

Actualmente, sqlcmd no admite el parámetro MSSQL_PID al crear contenedores. Si usa las instrucciones de sqlcmd de este inicio rápido, creará un contenedor con la edición para desarrolladores de SQL Server. Use las instrucciones de la interfaz de la línea de comandos (CLI) para crear un contenedor mediante la licencia que prefiera. Para obtener más información, consulte Implementación y conexión a contenedores de Linux de SQL Server.

Requisitos previos

  • Motor de Docker 1.8 o versiones posteriores en cualquier distribución de Linux admitida. Para obtener más información, consulte Instalar Docker.

Inserción y ejecución de la imagen de contenedor de SQL Server para Linux

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.

En los comandos de Bash de este artículo se usa sudo. Si no quiere usar sudo para ejecutar Docker, puede configurar un grupo docker y agregarle usuarios. Para obtener más información, vea Pasos posteriores a la instalación para Linux.

Extracción del contenedor del registro

Extraiga la imagen de contenedor de Linux de SQL Server 2017 (14.x) desde Microsoft Container Registry.

sudo docker pull mcr.microsoft.com/mssql/server:2017-latest
docker pull mcr.microsoft.com/mssql/server:2017-latest
docker pull mcr.microsoft.com/mssql/server:2017-latest

En este inicio rápido se crean contenedores de SQL Server 2017 (14.x). Si prefiere crear contenedores de Linux para diferentes versiones de SQL Server, vea las versiones de SQL Server 2019 (15.x) o de SQL Server 2022 (16.x) de este artículo.

En el comando anterior, se extrae la última imagen de contenedor de SQL Server 2017 (14.x). Si quiere extraer una imagen específica, agregue dos puntos y el nombre de etiqueta como mcr.microsoft.com/mssql/server:2017-GA-ubuntu. Para ver todas las imágenes disponibles, consulte el Registro de artefactos Microsoft.

Ejecución del contenedor

Para ejecutar la imagen de contenedor de Linux con Docker, puede usar el siguiente comando desde un shell de Bash, o bien una línea de comandos de PowerShell con privilegios elevados.

Importante

La variable de entorno SA_PASSWORD está en desuso. En su lugar, use MSSQL_SA_PASSWORD.

sudo docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" \
   -p 1433:1433 --name sql1 --hostname sql1 \
   -d \
   mcr.microsoft.com/mssql/server:2017-latest

Si usa PowerShell Core, reemplace las comillas dobles por comillas simples.

docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" `
   -p 1433:1433 --name sql1 --hostname sql1 `
   -d `
   mcr.microsoft.com/mssql/server:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" `
   -p 1433:1433 --name sql1 --hostname sql1 `
   -d `
   mcr.microsoft.com/mssql/server:2017-latest

La contraseña debe seguir la directiva de contraseñas predeterminada de SQL Server. En caso contrario, el contenedor no puede instalar SQL Server y deja de funcionar. De forma predeterminada, la contraseña debe tener al menos ocho caracteres y contener caracteres de tres de los siguientes cuatro conjuntos: mayúsculas, minúsculas, dígitos en base 10 y símbolos. Puede examinar el registro de errores mediante el comando docker logs.

De forma predeterminada, en este inicio rápido se creará un contenedor con la edición para desarrolladores de SQL Server. 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 run anterior:

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 "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" Especifique su propia contraseña segura con al menos ocho caracteres y que cumpla la Directiva de contraseñas. Configuración requerida para la imagen de SQL Server.
-e "MSSQL_COLLATION=<SQL_Server_collation>" Especifique una intercalación de SQL Server personalizada, en lugar de la predeterminadaSQL_Latin1_General_CP1_CI_AS.
-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 este puerto del contenedor se expone al puerto TCP 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.
--hostname sql1 Se usa para establecer explícitamente el nombre de host del contenedor. Si no especifica el nombre de host, se adopta como predeterminado 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 para Linux.

Consulta de la lista de contenedores

  1. Para ver los contenedores de Docker, use el comando docker ps.

    sudo docker ps -a
    
    docker ps -a
    
    docker ps -a
    

    Debería ver una salida similar al ejemplo siguiente:

    CONTAINER ID   IMAGE                                        COMMAND                    CREATED         STATUS         PORTS                                       NAMES
    d4a1999ef83e   mcr.microsoft.com/mssql/server:2017-latest   "/opt/mssql/bin/perm..."   2 minutes ago   Up 2 minutes   0.0.0.0:1433->1433/tcp, :::1433->1433/tcp   sql1
    
  2. Si la columna STATUS muestra el estado Up, esto indica que SQL Server se está ejecutando en el contenedor y que está escuchando en el puerto especificado en la columna PORTS. Si en la columna STATUS del contenedor de SQL Server se muestra Exited, vea Solución de problemas de contenedores de Docker de SQL Server. El servidor está 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:

    sudo docker exec -t sql1 cat /var/opt/mssql/log/errorlog | grep connection
    

    El parámetro --hostname, tal y como se indicó anteriormente, cambia el nombre interno del contenedor a un valor personalizado. Este valor es el nombre que ve que se devuelve en la siguiente consulta de Transact-SQL:

    SELECT @@SERVERNAME,
        SERVERPROPERTY('ComputerNamePhysicalNetBIOS'),
        SERVERPROPERTY('MachineName'),
        SERVERPROPERTY('ServerName');
    

    Establecer --hostname y --name en el mismo valor es una buena manera de identificar fácilmente el contenedor de destino.

  3. Como paso final, cambie la contraseña de administrador del sistema en un entorno de producción porque MSSQL_SA_PASSWORD se ve en la salida de ps -eax y se almacena en la variable de entorno con el mismo nombre.

Inserción y ejecución de la imagen de contenedor de SQL Server para Linux

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.

En los comandos de Bash de este artículo se usa sudo. Si no quiere usar sudo para ejecutar Docker, puede configurar un grupo docker y agregarle usuarios. Para obtener más información, vea Pasos posteriores a la instalación para Linux.

Extracción del contenedor del registro

Extraiga la imagen de contenedor de Linux de SQL Server 2019 (15.x) desde Microsoft Container Registry.

docker pull mcr.microsoft.com/mssql/server:2019-latest
docker pull mcr.microsoft.com/mssql/server:2019-latest
docker pull mcr.microsoft.com/mssql/server:2019-latest

En este inicio rápido se crean contenedores de SQL Server 2019 (15.x). Si prefiere crear contenedores de Linux para diferentes versiones de SQL Server, vea las versiones de SQL Server 2017 (14.x) o de SQL Server 2022 (16.x) de este artículo.

En el comando anterior, se extrae la última imagen de contenedor de SQL Server 2019 (15.x). Si quiere extraer una imagen específica, agregue dos puntos y el nombre de etiqueta como mcr.microsoft.com/mssql/server:2019-GA-ubuntu. Para ver todas las imágenes disponibles, consulte el Registro de artefactos Microsoft.

Ejecución del contenedor

Para ejecutar la imagen de contenedor de Linux con Docker, puede usar el siguiente comando desde un shell de Bash, o bien una línea de comandos de PowerShell con privilegios elevados.

Importante

La variable de entorno SA_PASSWORD está en desuso. En su lugar, use MSSQL_SA_PASSWORD.

docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" \
   -p 1433:1433 --name sql1 --hostname sql1 \
   -d \
   mcr.microsoft.com/mssql/server:2019-latest

Si usa PowerShell Core, reemplace las comillas dobles por comillas simples.

docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" `
   -p 1433:1433 --name sql1 --hostname sql1 `
   -d `
   mcr.microsoft.com/mssql/server:2019-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" `
   -p 1433:1433 --name sql1 --hostname sql1 `
   -d `
   mcr.microsoft.com/mssql/server:2019-latest

La contraseña debe seguir la directiva de contraseñas predeterminada de SQL Server. En caso contrario, el contenedor no puede instalar SQL Server y deja de funcionar. De forma predeterminada, la contraseña debe tener al menos ocho caracteres y contener caracteres de tres de los siguientes cuatro conjuntos: mayúsculas, minúsculas, dígitos en base 10 y símbolos. Puede examinar el registro de errores mediante el comando docker logs.

De forma predeterminada, en este inicio rápido se creará un contenedor con la edición para desarrolladores de SQL Server. 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 run anterior:

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 "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" Especifique su propia contraseña segura con al menos ocho caracteres y que cumpla la Directiva de contraseñas. Configuración requerida para la imagen de SQL Server.
-e "MSSQL_COLLATION=<SQL_Server_collation>" Especifique una intercalación de SQL Server personalizada, en lugar de la predeterminadaSQL_Latin1_General_CP1_CI_AS.
-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 este puerto del contenedor se expone al puerto TCP 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.
--hostname sql1 Se usa para establecer explícitamente el nombre de host del contenedor. Si no especifica el nombre de host, se adopta como predeterminado 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:2019-latest La imagen de contenedor de SQL Server para Linux.

Consulta de la lista de contenedores

  1. Para ver los contenedores de Docker, use el comando docker ps.

    docker ps -a
    
    docker ps -a
    
    docker ps -a
    

    Debería ver una salida similar al ejemplo siguiente:

    CONTAINER ID   IMAGE                                        COMMAND                    CREATED         STATUS         PORTS                                       NAMES
    d4a1999ef83e   mcr.microsoft.com/mssql/server:2019-latest   "/opt/mssql/bin/perm..."   2 minutes ago   Up 2 minutes   0.0.0.0:1433->1433/tcp, :::1433->1433/tcp   sql1
    
  2. Si la columna STATUS muestra el estado Up, esto indica que SQL Server se está ejecutando en el contenedor y que está escuchando en el puerto especificado en la columna PORTS. Si en la columna STATUS del contenedor de SQL Server se muestra Exited, vea Solución de problemas de contenedores de Docker de SQL Server. El servidor está 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 sql1 cat /var/opt/mssql/log/errorlog | grep connection
    

    El parámetro --hostname, tal y como se indicó anteriormente, cambia el nombre interno del contenedor a un valor personalizado. Este valor es el nombre que ve que se devuelve en la siguiente consulta de Transact-SQL:

    SELECT @@SERVERNAME,
        SERVERPROPERTY('ComputerNamePhysicalNetBIOS'),
        SERVERPROPERTY('MachineName'),
        SERVERPROPERTY('ServerName');
    

    Establecer --hostname y --name en el mismo valor es una buena manera de identificar fácilmente el contenedor de destino.

  3. Como paso final, cambie la contraseña de administrador del sistema en un entorno de producción porque MSSQL_SA_PASSWORD se ve en la salida de ps -eax y se almacena en la variable de entorno con el mismo nombre.

Inserción y ejecución de la imagen de contenedor de SQL Server para Linux

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.

En los comandos de Bash de este artículo se usa sudo. Si no quiere usar sudo para ejecutar Docker, puede configurar un grupo docker y agregarle usuarios. Para obtener más información, vea Pasos posteriores a la instalación para Linux.

Extracción del contenedor del registro

Extraiga la imagen de contenedor de Linux de SQL Server 2022 (16.x) desde Microsoft Container Registry.

docker pull mcr.microsoft.com/mssql/server:2022-latest
docker pull mcr.microsoft.com/mssql/server:2022-latest
docker pull mcr.microsoft.com/mssql/server:2022-latest

En este inicio rápido se crean contenedores de SQL Server 2022 (16.x). Si prefiere crear contenedores de Linux para diferentes versiones de SQL Server, consulte las versiones de SQL Server 2017 (14.x) o de SQL Server 2019 (15.x) de este artículo.

En el comando anterior, se extrae la última imagen de contenedor de SQL Server 2022 (16.x). Si quiere extraer una imagen específica, agregue dos puntos y el nombre de etiqueta como mcr.microsoft.com/mssql/server:2022-GA-ubuntu. Para ver todas las imágenes disponibles, consulte el Registro de artefactos Microsoft.

Ejecución del contenedor

Para ejecutar la imagen de contenedor de Linux con Docker, puede usar el siguiente comando desde un shell de Bash, o bien una línea de comandos de PowerShell con privilegios elevados.

Importante

La variable de entorno SA_PASSWORD está en desuso. En su lugar, use MSSQL_SA_PASSWORD.

docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" \
   -p 1433:1433 --name sql1 --hostname sql1 \
   -d \
   mcr.microsoft.com/mssql/server:2022-latest

Si usa PowerShell Core, reemplace las comillas dobles por comillas simples.

docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" `
   -p 1433:1433 --name sql1 --hostname sql1 `
   -d `
   mcr.microsoft.com/mssql/server:2022-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" `
   -p 1433:1433 --name sql1 --hostname sql1 `
   -d `
   mcr.microsoft.com/mssql/server:2022-latest

La contraseña debe seguir la directiva de contraseñas predeterminada de SQL Server. En caso contrario, el contenedor no puede instalar SQL Server y deja de funcionar. De forma predeterminada, la contraseña debe tener al menos ocho caracteres y contener caracteres de tres de los siguientes cuatro conjuntos: mayúsculas, minúsculas, dígitos en base 10 y símbolos. Puede examinar el registro de errores mediante el comando docker logs.

De forma predeterminada, en este inicio rápido se creará un contenedor con la edición para desarrolladores de SQL Server. 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 run anterior:

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 "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" Especifique su propia contraseña segura con al menos ocho caracteres y que cumpla la Directiva de contraseñas. Configuración requerida para la imagen de SQL Server.
-e "MSSQL_COLLATION=<SQL_Server_collation>" Especifique una intercalación de SQL Server personalizada, en lugar de la predeterminadaSQL_Latin1_General_CP1_CI_AS.
-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 este puerto del contenedor se expone al puerto TCP 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.
--hostname sql1 Se usa para establecer explícitamente el nombre de host del contenedor. Si no especifica el nombre de host, se adopta como predeterminado 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:2022-latest La imagen de contenedor de SQL Server para Linux.

Cambio de la contraseña de administrador del sistema

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 MSSQL_SA_PASSWORD especificada se reconoce mediante la ejecución de echo $MSSQL_SA_PASSWORD en el contenedor. Para fines de seguridad, debe cambiar la contraseña de administrador del sistema en un entorno de producción.

  1. Elija una contraseña segura que se usará para el usuario SA.

  2. Use docker exec para 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.

    docker exec -it sql1 /opt/mssql-tools18/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}")\""
    
    docker exec -it sql1 /opt/mssql-tools18/bin/sqlcmd `
       -S localhost -U SA -P "<YourStrong@Passw0rd>" `
       -Q "ALTER LOGIN SA WITH PASSWORD='<YourNewStrong@Passw0rd>'"
    
    docker exec -it sql1 /opt/mssql-tools18/bin/sqlcmd `
       -S localhost -U SA -P "<YourStrong@Passw0rd>" `
       -Q "ALTER LOGIN SA WITH PASSWORD='<YourNewStrong@Passw0rd>'"
    

    Las versiones más recientes de sqlcmd están protegidas de manera predeterminada. Para obtener más información sobre el cifrado de conexión, consulte Utilidad de sqlcmd para Windows y Conexión con sqlcmd para Linux y macOS. Si la conexión no se realiza correctamente, puede agregar la opción -No a sqlcmd para especificar que el cifrado es opcional, no obligatorio.

Deshabilitar la cuenta sa como procedimiento recomendado

Importante

Estas credenciales las necesitará en los pasos posteriores. Asegúrese de anotar el id. de usuario y la contraseña que escriba aquí.

Cuando se conecta a la instancia de SQL Server mediante la cuenta sa por primera vez después de la instalación, es importante que siga estos pasos y, a continuación, deshabilite inmediatamente el inicio de sesión sa como procedimiento recomendado de seguridad.

  1. Cree un nuevo inicio de sesión y conviértalo en miembro del rol del servidor sysadmin.

  2. Conectar a la instancia de SQL Server mediante el nuevo inicio de sesión que creó.

  3. Deshabilite la cuenta sa, como se recomienda para el procedimiento recomendado de seguridad.

Consulta de la lista de contenedores

  1. Para ver los contenedores de Docker, use el comando docker ps.

    docker ps -a
    
    docker ps -a
    
    docker ps -a
    

    Debería ver una salida similar al ejemplo siguiente:

    CONTAINER ID   IMAGE                                        COMMAND                    CREATED         STATUS         PORTS                                       NAMES
    d4a1999ef83e   mcr.microsoft.com/mssql/server:2022-latest   "/opt/mssql/bin/perm..."   2 minutes ago   Up 2 minutes   0.0.0.0:1433->1433/tcp, :::1433->1433/tcp   sql1
    
  2. Si la columna STATUS muestra el estado Up, esto indica que SQL Server se está ejecutando en el contenedor y que está escuchando en el puerto especificado en la columna PORTS. Si en la columna STATUS del contenedor de SQL Server se muestra Exited, vea Solución de problemas de contenedores de Docker de SQL Server. El servidor está 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 sql1 cat /var/opt/mssql/log/errorlog | grep connection
    

    El parámetro --hostname, tal y como se indicó anteriormente, cambia el nombre interno del contenedor a un valor personalizado. Este valor es el nombre que ve que se devuelve en la siguiente consulta de Transact-SQL:

    SELECT @@SERVERNAME,
        SERVERPROPERTY('ComputerNamePhysicalNetBIOS'),
        SERVERPROPERTY('MachineName'),
        SERVERPROPERTY('ServerName');
    

    Establecer --hostname y --name en el mismo valor es una buena manera de identificar fácilmente el contenedor de destino.

Conectar a SQL Server

En los pasos siguientes se usa la herramienta de línea de comandos utilidad de sqlcmd de SQL Server, dentro del contenedor para conectarse a SQL Server.

  1. Use el comando docker exec -it para iniciar un shell de Bash interactivo dentro de su contenedor en ejecución. En el ejemplo siguiente, el parámetro --name especifica el nombre de sql1 al crear el contenedor.

    docker exec -it sql1 "bash"
    
    docker exec -it sql1 "bash"
    
    docker exec -it sql1 "bash"
    
  1. Una vez dentro del contenedor, conéctese localmente con sqlcmd mediante su ruta de acceso completa.

    /opt/mssql-tools/bin/sqlcmd -S localhost -U <userid> -P "<YourNewStrong@Passw0rd>"
    

    Las versiones más recientes de sqlcmd están protegidas de manera predeterminada. Para obtener más información sobre el cifrado de conexión, consulte Utilidad de sqlcmd para Windows y Conexión con sqlcmd para Linux y macOS. Si la conexión no se realiza correctamente, puede agregar la opción -No a sqlcmd para especificar que el cifrado es opcional, no obligatorio.

    Puede omitir la contraseña en la línea de comandos para que se le solicite escribirla. Por ejemplo:

    /opt/mssql-tools/bin/sqlcmd -S localhost -U <userid>
    
  1. Una vez dentro del contenedor, conéctese localmente con sqlcmd mediante su ruta de acceso completa.

    /opt/mssql-tools18/bin/sqlcmd -S localhost -U <userid> -P "<YourNewStrong@Passw0rd>"
    

    Las versiones más recientes de sqlcmd están protegidas de manera predeterminada. Para obtener más información sobre el cifrado de conexión, consulte Utilidad de sqlcmd para Windows y Conexión con sqlcmd para Linux y macOS. Si la conexión no se realiza correctamente, puede agregar la opción -No a sqlcmd para especificar que el cifrado es opcional, no obligatorio.

    Puede omitir la contraseña en la línea de comandos para que se le solicite escribirla. Por ejemplo:

    /opt/mssql-tools18/bin/sqlcmd -S localhost -U <userid>
    
  1. Una vez dentro del contenedor, conéctese localmente con sqlcmd mediante su ruta de acceso completa.

    /opt/mssql-tools18/bin/sqlcmd -S localhost -U <userid> -P "<YourNewStrong@Passw0rd>"
    

    Las versiones más recientes de sqlcmd están protegidas de manera predeterminada. Para obtener más información sobre el cifrado de conexión, consulte Utilidad de sqlcmd para Windows y Conexión con sqlcmd para Linux y macOS. Si la conexión no se realiza correctamente, puede agregar la opción -No a sqlcmd para especificar que el cifrado es opcional, no obligatorio.

    Puede omitir la contraseña en la línea de comandos para que se le solicite escribirla. Por ejemplo:

    /opt/mssql-tools18/bin/sqlcmd -S localhost -U <userid>
    
  1. 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.

  1. En el símbolo del sistema de sqlcmd, pegue el comando Transact-SQL siguiente para crear una base de datos de prueba:

    CREATE DATABASE TestDB;
    
  2. En la línea siguiente, escriba una consulta para devolver el nombre de todas las bases de datos del servidor:

    SELECT Name from sys.databases;
    
  3. Los dos comandos anteriores no se ejecutaron de inmediato. Escriba GO en una línea nueva para ejecutar los comandos anteriores:

    GO
    

Insertar datos

Luego cree una tabla, Inventory, e inserte dos filas nuevas.

  1. En el símbolo del sistema de sqlcmd, cambie el contexto a la nueva base de datos TestDB:

    USE TestDB;
    
  2. Cree una tabla llamada Inventory:

    CREATE TABLE Inventory (id INT, name NVARCHAR(50), quantity INT);
    
  3. Inserte datos en la nueva tabla:

    INSERT INTO Inventory VALUES (1, 'banana', 150); INSERT INTO Inventory VALUES (2, 'orange', 154);
    
  4. Escriba GO para ejecutar los comandos anteriores:

    GO
    

Selección de datos

Ahora ejecute una consulta para devolver datos desde la tabla Inventory.

  1. En el símbolo del sistema sqlcmd, escriba una consulta que devuelva filas desde la tabla Inventory donde la cantidad sea mayor que 152:

    SELECT * FROM Inventory WHERE quantity > 152;
    
  2. Ejecute el comando:

    GO
    

Salida del símbolo del sistema de sqlcmd

  1. Para finalizar la sesión de sqlcmd, escriba QUIT:

    QUIT
    
  2. Para 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. La herramienta externa usa la dirección IP del equipo host.

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.

  1. Busque la dirección IP del equipo host del contenedor mediante ifconfig o ip addr.

  2. En este ejemplo, instale la herramienta sqlcmd en el equipo cliente. Para obtener más información, consulte utilidad sqlcmd o Instalación de las herramientas de línea de comandos de SQL Server sqlcmd y bcp en Linux.

  3. 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 tiene que abrir el puerto de entrada adecuado en el firewall para permitir la conexión.

    Las versiones más recientes de sqlcmd están protegidas de manera predeterminada. Si la conexión no se realiza correctamente, y está usando la versión 18 o posterior, puede agregar la opción -No a sqlcmd para especificar que el cifrado es opcional, no obligatorio.

    sudo sqlcmd -S <ip_address>,1433 -U <userid> -P "<YourNewStrong@Passw0rd>"
    
    sqlcmd -S <ip_address>,1433 -U <userid> -P "<YourNewStrong@Passw0rd>"
    
    sqlcmd -S <ip_address>,1433 -U <userid> -P "<YourNewStrong@Passw0rd>"
    
  4. Ejecute los comandos Transact-SQL. Cuando termine, escriba QUIT.

Estas son otras herramientas de uso común para conectarse a SQL Server:

Quitar el contenedor

Si quiere quitar el contenedor de SQL Server que se usa en este tutorial, ejecute los comandos siguientes:

docker stop sql1
docker rm sql1
docker stop sql1
docker rm sql1
docker stop sql1
docker rm sql1

Demostración de Docker

Tras acabar de usar la imagen de contenedor de SQL Server de Linux 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.

Contribuya a la documentación de SQL

¿Sabía que puede editar el contenido de SQL usted mismo? Si lo hace, no solo contribuirá a mejorar la documentación, sino que también se le reconocerá como colaborador de la página.

Para más información, vea Cómo colaborar en la documentación de SQL Server.