Implementación de Azure SQL Edge con Docker

Importante

Azure SQL Edge ya no admite la plataforma ARM64.

En este inicio rápido, usará Docker para extraer y ejecutar la imagen de contenedor de Azure SQL Edge. A continuación, tendrá que conectar con sqlcmd para crear la primera base de datos y ejecutar consultas.

Esta imagen se compone Azure SQL Edge basado en Ubuntu 18.04. Se puede usar junto al motor de Docker 1.8 o versiones posteriores en Linux.

Los contenedores de Azure SQL Edge no se admiten en las siguientes plataformas para cargas de trabajo de producción:

  • Windows
  • macOS
  • Azure IoT Edge para Linux en Windows (EFLOW)

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. Dado que las imágenes de SQL Edge se basan en Ubuntu 18.04, se recomienda usar un host de Docker de Ubuntu 18.04.
  • 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 cambiarlo, consulte las instrucciones y advertencias de la documentación de Docker para configurar overlay2.
  • Un mínimo de 10 GB de espacio en disco.
  • Un mínimo de 1 GB de RAM.
  • Requisitos de hardware de Azure SQL Edge.

Nota

En los comandos de Bash de este artículo se usa sudo. Si no quiere usar sudo para 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.

Extraer y ejecutar la imagen de contenedor

  1. Extraiga la imagen de contenedor de Azure SQL Edge desde Microsoft Container Registry.

    sudo docker pull mcr.microsoft.com/azure-sql-edge:latest
    

    El comando anterior extrae las imágenes de contenedor de SQL Edge más recientes. Para ver todas las imágenes disponibles, consulte la página de Docker Hub azure-sql-edge.

  2. Para ejecutar la imagen de contenedor con Docker, use el siguiente comando de una shell de bash:

    • Inicio de una instancia de Azure SQL Edge que se ejecuta como la edición Desarrollador:

      sudo docker run --cap-add SYS_PTRACE -e 'ACCEPT_EULA=1' -e 'MSSQL_SA_PASSWORD=yourStrong(!)Password' -p 1433:1433 --name azuresqledge -d mcr.microsoft.com/azure-sql-edge
      
    • Inicio de una instancia de Azure SQL Edge que se ejecuta como la edición Prémium:

      sudo docker run --cap-add SYS_PTRACE -e 'ACCEPT_EULA=1' -e 'MSSQL_SA_PASSWORD=yourStrong(!)Password' -e 'MSSQL_PID=Premium' -p 1433:1433 --name azuresqledge -d mcr.microsoft.com/azure-sql-edge
      

    Importante

    La contraseña debe seguir la directiva de contraseñas predeterminada del Motor de base de datos de Microsoft SQL, ya que si no lo hace, el contenedor no puede instalar el motor de base de datos de SQL y dejará de funcionar. De forma predeterminada, la contraseña debe tener al menos 8 caracteres y contener caracteres de 3 de los siguientes 4 conjuntos: mayúsculas, minúsculas, dígitos en base 10 y símbolos. Puede examinar el registro de errores ejecutando el comando docker logs.

    En la tabla siguiente, se proporciona una descripción de los parámetros de los ejemplos de docker run anteriores:

    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 de la imagen de SQL Edge.
    -e "MSSQL_SA_PASSWORD=yourStrong(!)Password" Especifique su contraseña segura con al menos ocho caracteres y que cumpla los requisitos de contraseña de Azure SQL Edge. Configuración requerida de la imagen de SQL Edge.
    -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 Edge realiza escuchas en TCP 1433 del contenedor y se expone al puerto 1433 del host.
    --name azuresqledge 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.
    -d Ejecute el contenedor en segundo plano (demonio).

    Para obtener una lista completa de todas las variables de entorno de Azure SQL Edge, consulte Configuración de Azure SQL Edge con variables de entorno. También puede usar un archivo mssql.conf para configurar contenedores de SQL Edge.

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

    sudo docker ps -a
    
  4. Si la columna ESTADO muestra el estado Activo, significa que SQL Edge se ejecuta en el contenedor y realiza escuchas en el puerto especificado en la columna PUERTOS. Si en la columna ESTADO del contenedor de SQL Edge aparece Cerrado, consulte la sección Solución de problemas de la documentación de Azure SQL Edge.

    El parámetro -h (nombre del host) también es útil, pero no se usa en este tutorial para no complicarlo en exceso. Esto cambia el nombre interno del contenedor a un valor personalizado. Este es el nombre que se devuelve en la siguiente consulta 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.

  5. Como paso final, cambie la contraseña de administrador del sistema porque MSSQL_SA_PASSWORD se ve en la salida de ps -eax y se almacena en la variable de entorno con el mismo nombre. Vea los pasos siguientes.

Cambiar la contraseña de SA

La cuenta de SA es un administrador del sistema de la instancia de Azure SQL Edge que se crea durante la instalación. Después de crear el contenedor de SQL Edge, la variable de entorno MSSQL_SA_PASSWORD especificada se reconoce mediante la ejecución de echo $MSSQL_SA_PASSWORD en el contenedor. Por motivos de seguridad, cambie la contraseña de administrador del sistema.

  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, reemplace la contraseña anterior, <YourStrong!Passw0rd>, y la nueva contraseña, <YourNewStrong!Passw0rd>, por sus propios valores de contraseña.

    sudo docker exec -it azuresqledge /opt/mssql-tools/bin/sqlcmd \
       -S localhost -U SA -P "<YourStrong@Passw0rd>" \
       -Q 'ALTER LOGIN SA WITH PASSWORD="<YourNewStrong@Passw0rd>"'
    

Conexión a Azure SQL Edge

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

  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 azuresqledge al crear el contenedor.

    sudo docker exec -it azuresqledge "bash"
    
  2. 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.

  3. 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;
    GO
    
  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;
    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 Edge en la máquina de Docker desde cualquier herramienta externa de Linux, Windows o Mac OS que admita conexiones de SQL. Para más información sobre cómo conectarse a un contenedor de SQL Edge desde fuera, vea Conexión a Azure SQL Edge y consulta (versión preliminar).

Quitar el contenedor

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

sudo docker stop azuresqledge
sudo docker rm azuresqledge

Advertencia

Al detener y quitar un contenedor, se eliminarán permanentemente los datos de SQL Edge 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.

Pasos siguientes