Déployer et se connecter à des conteneurs Linux SQL Server

S’applique à : SQL Server - Linux

Cet article explique comment déployer des conteneurs Linux SQL Server et s’y connecter.

Pour d’autres scénarios de déploiement, consultez :

Notes

Cet article se concentre spécifiquement sur l’utilisation de l’image mssql-server-linux. Les déploiements de SQL Server dans des conteneurs Windows ne sont pas couverts par la prise en charge. Pour le développement et les tests, vous pouvez créer vos propres images conteneur personnalisées pour travailler avec SQL Server dans des conteneurs Windows. Des exemples de fichiers sont disponibles sur GitHub. Exemples de fichiers pour référence uniquement.

Important

Avant de choisir d’exécuter un conteneur SQL Server pour les cas d’utilisation de production, consultez notre stratégie de support pour les conteneurs SQL Server afin de vérifier que vous êtes en cours d’exécution sur une configuration prise en charge.

Cette vidéo de 6 minutes offre une introduction à l’exécution de SQL Server sur les conteneurs :

Extraire et exécuter l’image conteneur

Pour extraire et exécuter les images conteneur Docker pour SQL Server, suivez les prérequis et les étapes du guide de démarrage rapide suivant :

Cet article de configuration fournit des scénarios d’utilisation supplémentaires dans les sections suivantes.

Se connecter et interroger

Vous pouvez vous connecter à et interroger SQL Server dans un conteneur à partir de l’extérieur du conteneur ou au sein du conteneur. Les sections suivantes détaillent les deux scénarios.

Outils en dehors du conteneur

Vous pouvez vous connecter à l’instance SQL Server sur votre hôte de conteneur à partir de n’importe quel outil externe Linux, Windows ou macOS qui prend en charge les connexions SQL. Certains outils courants sont les suivants :

L’exemple suivant utilise sqlcmd pour se connecter à SQL Server s’exécutant dans un conteneur. L’adresse IP dans la chaîne de connexion est l’adresse IP de l’ordinateur hôte qui exécute le conteneur.

Notes

Les versions plus récentes de sqlcmd (dans mssql-tools18) sont sécurisées par défaut. Si vous utilisez la version 18 ou ultérieure, vous devez ajouter l’option No à sqlcmd pour spécifier que le chiffrement est facultatif, et non obligatoire.

sqlcmd -S 10.3.2.4 -U SA -P '<YourPassword>'
sqlcmd -S 10.3.2.4 -U SA -P "<YourPassword>"
sqlcmd -S 10.3.2.4 -U SA -P "<YourPassword>"

Si vous avez mappé un port hôte qui n’est pas la valeur 1433 par défaut, ajoutez ce port à la chaîne de connexion. Par exemple, si vous avez spécifié -p 1400:1433 dans votre commande docker run, connectez-vous en spécifiant explicitement le port 1400.

sqlcmd -S 10.3.2.4,1400 -U SA -P '<YourPassword>'
sqlcmd -S 10.3.2.4,1400 -U SA -P "<YourPassword>"
sqlcmd -S 10.3.2.4,1400 -U SA -P "<YourPassword>"

Outils au sein du conteneur

À compter de SQL Server 2017 (14.x), les outils en ligne de commande SQL Server sont inclus dans l’image conteneur. Si vous joignez une invite de commandes interactive à l’image, vous pouvez exécuter les outils localement.

  1. Utilisez la commande docker exec -it pour démarrer un interpréteur de commandes bash interactif dans votre conteneur en cours d’exécution. Dans l’exemple suivant, e69e056c702d est l’ID de conteneur.

    docker exec -it e69e056c702d "bash"
    

    Conseil

    Vous n’avez pas toujours besoin de spécifier l’ID de conteneur entier. Vous ne devez spécifier que suffisamment de caractères pour l’identifier de manière unique. Ainsi, dans cet exemple, il peut suffire d’utiliser e6 ou e69 plutôt que l’ID complet. Pour déterminer l’ID du conteneur, exécutez la commande docker ps -a.

  2. Une fois dans le conteneur, connectez-vous localement avec sqlcmd en utilisant son chemin d’accès complet.

    /opt/mssql-tools18/bin/sqlcmd -S localhost -U SA -P '<YourPassword>'
    

    Notes

    Les versions plus récentes de sqlcmd sont sécurisées par défaut. Si vous souhaitez en savoir plus sur le chiffrement de connexion, veuillez consulter les rubriques Utilitaire sqlcmd pour Windows et Connexion avec sqlcmd pour Linux et macOS. Si la connexion échoue, vous pouvez ajouter l’option -No à sqlcmd pour spécifier que le chiffrement est facultatif, et non obligatoire.

  3. Lorsque vous avez terminé avec sqlcmd, saisissez exit.

  4. Lorsque vous avez terminé avec l’invite de commandes interactive, saisissez exit. Le conteneur continue de s’exécuter une fois que vous avez quitté l’interpréteur de commandes bash interactif.

Vérifier la version du conteneur

Si vous voulez connaître la version de SQL Server dans un conteneur en cours d’exécution, exécutez la commande suivante pour l’afficher. Remplacez <Container ID or name> par l’ID ou le nom du conteneur cible. Remplacez <YourStrong!Passw0rd> par le mot de passe SQL Server pour le compte d'administrateur système (SA).

docker exec -it <Container ID or name> /opt/mssql-tools/bin/sqlcmd \
-S localhost -U SA -P '<YourStrong!Passw0rd>' \
-Q 'SELECT @@VERSION'

Notes

Les versions plus récentes de sqlcmd sont sécurisées par défaut. Si vous souhaitez en savoir plus sur le chiffrement de connexion, veuillez consulter les rubriques Utilitaire sqlcmd pour Windows et Connexion avec sqlcmd pour Linux et macOS. Si la connexion échoue, vous pouvez ajouter l’option -No à sqlcmd pour spécifier que le chiffrement est facultatif, et non obligatoire.

docker exec -it <Container ID or name> /opt/mssql-tools/bin/sqlcmd `
-S localhost -U SA -P "<YourStrong!Passw0rd>" `
-Q "SELECT @@VERSION"

Notes

Les versions plus récentes de sqlcmd sont sécurisées par défaut. Si vous souhaitez en savoir plus sur le chiffrement de connexion, veuillez consulter les rubriques Utilitaire sqlcmd pour Windows et Connexion avec sqlcmd pour Linux et macOS. Si la connexion échoue, vous pouvez ajouter l’option -No à sqlcmd pour spécifier que le chiffrement est facultatif, et non obligatoire.

docker exec -it <Container ID or name> /opt/mssql-tools/bin/sqlcmd ^
-S localhost -U SA -P "<YourStrong!Passw0rd>" ^
-Q "SELECT @@VERSION"

Notes

Les versions plus récentes de sqlcmd sont sécurisées par défaut. Si vous souhaitez en savoir plus sur le chiffrement de connexion, veuillez consulter les rubriques Utilitaire sqlcmd pour Windows et Connexion avec sqlcmd pour Linux et macOS. Si la connexion échoue, vous pouvez ajouter l’option -No à sqlcmd pour spécifier que le chiffrement est facultatif, et non obligatoire.

Vous pouvez aussi identifier la version et le numéro de la build de SQL Server pour une image conteneur cible. La commande suivante affiche la version SQL Server et les informations de version de l’image mcr.microsoft.com/mssql/server:2022-latest. Pour ce faire, elle exécute un nouveau conteneur avec une variable d’environnement PAL_PROGRAM_INFO=1. Le conteneur résultant s’arrête instantanément et la commande docker rm le supprime.

docker run -e PAL_PROGRAM_INFO=1 --name sqlver \
-ti mcr.microsoft.com/mssql/server:2022-latest && \
docker rm sqlver
docker run -e PAL_PROGRAM_INFO=1 --name sqlver `
-ti mcr.microsoft.com/mssql/server:2022-latest; `
docker rm sqlver
docker run -e PAL_PROGRAM_INFO=1 --name sqlver ^
-ti mcr.microsoft.com/mssql/server:2022-latest && ^
docker rm sqlver

Les commandes précédentes affichent des informations de version semblables à la sortie suivante :

sqlservr
  Version 16.0.1000.6
  Build ID d81e9b6de06534e649bd57dd609aa3050f5e380f361b7f8a80a80eeb71e7422c
  Build Type release
  Git Version 2aede92f
  Built at Tue Nov 01 06:11:40 GMT 2022

PAL
  Build ID 754097e8f0db68f559e1cbc9d46952ac9fd518b5da9f12964ef40fc9033720e3
  Build Type release
  Git Version d88e3e1130
  Built at Tue Nov 01 06:08:02 GMT 2022

Packages
  system.security                         mssql-16.0.1000.6_26_official-release
  system.certificates                     mssql-16.0.1000.6_26_official-release
  sqlagent                                16.0.1000.6
  system.wmi                              10.0.17763.2061.202107231
  system.netfx                            4.7.0.0.202104262
  system                                  mssql-16.0.1000.6_26_official-release
  system.common                           10.0.17763.2061.202107231
  sqlservr                                16.0.1000.6
  secforwarderxplat                       16.0.1000.6

Exécuter une image de conteneur SQL Server spécifique

Notes

  • À compter de SQL Server 2019 (15.x) CU3, Ubuntu 18.04 est pris en charge.
  • À compter de SQL Server 2019 (15.x) CU10, Ubuntu 20.04 est pris en charge.
  • Vous pouvez récupérer la liste de toutes les étiquettes disponibles pour mssql/server sur https://mcr.microsoft.com/v2/mssql/server/tags/list.

Il existe des scénarios dans lesquels il est possible que vous ne souhaitiez pas utiliser la dernière image de conteneur SQL Server. Pour exécuter une image de conteneur SQL Server spécifique, procédez comme suit :

  1. Identifiez la tag Docker pour la version que vous souhaitez utiliser. Pour voir les balises disponibles, consultez le Registre des artefacts Microsoft.

  2. Extrayez l’image de conteneur SQL Server avec la balise. Par exemple, pour extraire l’image 2019-CU18-ubuntu-20.04, remplacez <image_tag> dans la commande suivante par 2019-CU18-ubuntu-20.04.

    docker pull mcr.microsoft.com/mssql/server:<image_tag>
    
  3. Pour exécuter un nouveau conteneur avec cette image, spécifiez le nom de la balise dans la commande docker run. Dans la commande suivante, remplacez <image_tag> par la version que vous souhaitez exécuter.

    Important

    La variable d’environnement SA_PASSWORD est dépréciée. Utilisez MSSQL_SA_PASSWORD à la place.

    docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' -p 1401:1433 -d mcr.microsoft.com/mssql/server:<image_tag>
    
    docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1401:1433 -d mcr.microsoft.com/mssql/server:<image_tag>
    
    docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1401:1433 -d mcr.microsoft.com/mssql/server:<image_tag>
    

Vous pouvez également utiliser ces étapes pour rétrograder un conteneur existant. Par exemple, vous souhaiterez peut-être restaurer ou rétrograder un conteneur en cours d’exécution à des fins de dépannage ou de test. Pour rétrograder un conteneur en cours d’exécution, vous devez utiliser une technique de persistance pour le dossier de données. Suivez les mêmes étapes que celles décrites dans la section de mise à niveau, mais spécifiez le nom de balise de l’ancienne version lorsque vous exécutez le nouveau conteneur.

Exécuter des images conteneurs basées sur RHEL

La documentation pour les images conteneur SQL Server Linux pointe vers des conteneurs basés sur Ubuntu. À compter de SQL Server 2019 (15.x), il est possible d’utiliser des conteneurs basés sur Red Hat Enterprise Linux (RHEL). Un exemple d’image pour RHEL va ressembler à mcr.microsoft.com/mssql/rhel/server:2019-CU15-rhel-8.

Par exemple, la commande suivante tire (pull) la mise à jour cumulative CU 18 du conteneur SQL Server 2019 (15.x) qui utilise RHEL 8 :

docker pull mcr.microsoft.com/mssql/rhel/server:2019-CU18-rhel-8.4
docker pull mcr.microsoft.com/mssql/rhel/server:2019-CU18-rhel-8.4
docker pull mcr.microsoft.com/mssql/rhel/server:2019-CU18-rhel-8.4

Exécuter des images de conteneur de production

Le guide de démarrage rapide de la section précédente exécute la version gratuite de l’édition Developer de SQL Server à partir du Registre des artefacts Microsoft. La plupart des informations s’appliquent toujours si vous souhaitez exécuter des images de conteneur de production, comme les éditions Enterprise, Standard ou Web. Toutefois, il existe quelques différences qui sont décrites ici.

  • Vous ne pouvez utiliser SQL Server dans un environnement de production que si vous disposez d’une licence valide. Vous pouvez vous procurer gratuitement une licence de production SQL Server Express ici. Les licences pour l’édition Standard et Entreprise de SQL Server sont disponibles via le programme de licence en volume Microsoft.

  • L’image de conteneur du développeur peut également être configurée pour exécuter les éditions de production.

Pour exécuter une édition de production, passez en revue les exigences et les procédures d’exécution dans le guide de démarrage rapide. Vous devez spécifier votre édition de production avec la variable d’environnement MSSQL_PID. L’exemple suivant montre comment exécuter l’image conteneur de SQL Server 2022 (16.x) la plus récente pour la fonctionnalité de modification essentielle de l’Entreprise.

docker run --name sqlenterprise \
-e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' \
-e 'MSSQL_PID=EnterpriseCore' -p 1433:1433 \
-d mcr.microsoft.com/mssql/server:2022-latest
docker run --name sqlenterprise `
-e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" `
-e "MSSQL_PID=EnterpriseCore" -p 1433:1433 `
-d "mcr.microsoft.com/mssql/server:2022-latest"
docker run --name sqlenterprise ^
-e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" ^
-e "MSSQL_PID=EnterpriseCore" -p 1433:1433 ^
-d "mcr.microsoft.com/mssql/server:2022-latest"

Important

En passant la valeur Y à la variable d’environnement ACCEPT_EULA et une valeur d'édition à MSSQL_PID, vous indiquez que vous disposez d’une licence valide et existante pour l’édition et la version de SQL Server que vous avez l’intention d’utiliser. Vous acceptez également que votre utilisation du logiciel SQL Server exécuté dans une image conteneur sera régie par les conditions de votre licence SQL Server.

Notes

Pour obtenir la liste complète des valeurs possibles pour MSSQL_PID, consultez Configurer les paramètres de SQL Server avec des variables d’environnement sur Linux.

Exécuter plusieurs conteneurs SQL Server

Docker offre un moyen d’exécuter plusieurs conteneurs SQL Server sur le même ordinateur hôte. Utilisez cette approche pour les scénarios qui requièrent plusieurs instances de SQL Server sur le même hôte. Chaque conteneur doit s’exposer lui-même sur un port différent.

L’exemple suivant crée deux conteneurs SQL Server 2017 (14.x) et les associe aux ports 1401 et 1402 sur l’ordinateur hôte.

docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' -p 1401:1433 -d mcr.microsoft.com/mssql/server:2017-latest
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' -p 1402:1433 -d mcr.microsoft.com/mssql/server:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1401:1433 -d mcr.microsoft.com/mssql/server:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1402:1433 -d mcr.microsoft.com/mssql/server:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1401:1433 -d mcr.microsoft.com/mssql/server:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1402:1433 -d mcr.microsoft.com/mssql/server:2017-latest

L’exemple suivant crée deux conteneurs SQL Server 2019 (15.x) et les associe aux ports 1401 et 1402 sur l’ordinateur hôte.

docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' -p 1401:1433 -d mcr.microsoft.com/mssql/server:2019-latest
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' -p 1402:1433 -d mcr.microsoft.com/mssql/server:2019-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1401:1433 -d mcr.microsoft.com/mssql/server:2019-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1402:1433 -d mcr.microsoft.com/mssql/server:2019-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1401:1433 -d mcr.microsoft.com/mssql/server:2019-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1402:1433 -d mcr.microsoft.com/mssql/server:2019-latest

L’exemple suivant crée deux conteneurs SQL Server 2022 (16.x) et les mappe aux ports 1401 et 1402 sur la machine hôte.

docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' -p 1401:1433 -d mcr.microsoft.com/mssql/server:2022-latest
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' -p 1402:1433 -d mcr.microsoft.com/mssql/server:2022-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1401:1433 -d mcr.microsoft.com/mssql/server:2022-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1402:1433 -d mcr.microsoft.com/mssql/server:2022-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1401:1433 -d mcr.microsoft.com/mssql/server:2022-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1402:1433 -d mcr.microsoft.com/mssql/server:2022-latest

Il existe maintenant deux instances de SQL Server s’exécutant dans des conteneurs distincts. Les clients peuvent se connecter à chaque instance SQL Server en utilisant l’adresse IP de l’hôte de conteneur et du numéro de port pour le conteneur.

Notes

Les versions plus récentes de sqlcmd (dans mssql-tools18) sont sécurisées par défaut. Si vous utilisez la version 18 ou ultérieure, vous devez ajouter l’option No à sqlcmd pour spécifier que le chiffrement est facultatif, et non obligatoire.

sqlcmd -S 10.3.2.4,1401 -U SA -P '<YourPassword>'
sqlcmd -S 10.3.2.4,1402 -U SA -P '<YourPassword>'
sqlcmd -S 10.3.2.4,1401 -U SA -P "<YourPassword>"
sqlcmd -S 10.3.2.4,1402 -U SA -P "<YourPassword>"
sqlcmd -S 10.3.2.4,1401 -U SA -P "<YourPassword>"
sqlcmd -S 10.3.2.4,1402 -U SA -P "<YourPassword>"

Mettre à niveau SQL Server dans les conteneurs

Pour mettre à niveau l’image de conteneur avec Docker, commencez par identifier la balise pour la version de votre mise à niveau. Extrayez cette version à partir du registre à l’aide de la commande docker pull :

docker pull mcr.microsoft.com/mssql/server:<image_tag>

Cela met à jour l’image de SQL Server pour les nouveaux conteneurs que vous créez, mais ne met pas à jour SQL Server dans les conteneurs en cours d’exécution. Pour ce faire, vous devez créer un nouveau conteneur avec la dernière image de conteneur SQL Server et migrer vos données vers ce nouveau conteneur.

  1. Assurez-vous que vous utilisez une des techniques de persistance des données pour votre conteneur SQL Server existant. Cela vous permet de démarrer un nouveau conteneur avec les mêmes données.

  2. Arrêtez le conteneur SQL Server à l'aide de la commande docker stop.

  3. Créez un conteneur SQL Server avec docker run et spécifiez un répertoire hôte mappé ou un conteneur de volume de données. Veillez à utiliser la balise spécifique pour votre mise à niveau SQL Server. Le nouveau conteneur utilise désormais une nouvelle version de SQL Server avec vos données SQL Server existantes.

    Important

    La mise à niveau est uniquement prise en charge entre RC1, RC2 et GA pour l’instant.

  4. Vérifiez vos bases de données et vos données dans le nouveau conteneur.

  5. Si vous le souhaitez, supprimez l'ancien conteneur avec docker rm.

  • Bien démarrer avec les images conteneur SQL Server 2017 (14.x) sur Docker en suivant le démarrage rapide
  • Bien démarrer avec les images conteneur SQL Server 2019 (15.x) sur Docker en suivant le démarrage rapide

Contribuer à la documentation SQL

Saviez-vous que vous pouvez modifier le contenu SQL vous-même ? Dans ce cas, non seulement vous nous aidez à améliorer notre documentation, mais vous êtes également cité en tant que contributeur à la page.

Pour plus d’informations, consultez Guide pratique pour contribuer à la documentation SQL Server