Configurer et personnaliser les conteneurs Linux de SQL Server
S’applique à : SQL Server - Linux
Cet article explique comment configurer et personnaliser des conteneurs Linux SQL Server à l’aide de Docker. Vous pouvez conserver vos données, déplacer des fichiers depuis et vers des conteneurs, et modifier les paramètres par défaut.
Conseil
Vous pouvez utiliser sqlcmd (Go) pour créer une instance de SQL Server dans un conteneur à des fins de développement. Pour plus d’informations, consultez Créer et interroger un conteneur SQL Server.
Créer un conteneur personnalisé
Vous pouvez créer votre propre Dockerfile pour créer un conteneur SQL Server personnalisé. Pour plus d’informations, consultez une démonstration qui associe SQL Server et une application Node. Si vous créez votre propre Dockerfile, tenez compte du processus de premier plan, car ce processus contrôle la durée de vie du conteneur. S’il se termine, le conteneur s’arrête. Par exemple, si vous souhaitez exécuter un script et démarrer SQL Server, assurez-vous que le processus SQL Server est la commande la plus à droite. Toutes les autres commandes sont exécutées en arrière-plan. La commande suivante illustre cela à l’intérieur d’un fichier Dockerfile :
/usr/src/app/do-my-sql-commands.sh & /opt/mssql/bin/sqlservr
Si vous avez inversé les commandes dans l’exemple précédent, le conteneur s’arrêtera à la fin du script do-my-sql-commands.sh.
Rendre vos données persistantes
Vos modifications de configuration et fichiers de base de données SQL Server sont conservés dans le conteneur même si vous redémarrez le conteneur avec docker stop
et docker start
. Toutefois, si vous supprimez le conteneur avec docker rm
, tout ce qui se trouve dans le conteneur est supprimé, y compris SQL Server et vos bases de données. La section suivante explique comment utiliser des volumes de données pour conserver les fichiers de votre base de données même si les conteneurs associés sont supprimés.
Important
Par SQL Server, il est essentiel que vous compreniez la persistance des données dans Docker. En plus de la discussion de cette section, consultez la documentation de Docker pour savoir comment gérer les données dans les conteneurs Docker.
Monter un répertoire hôte en tant que volume de données
La première option consiste à monter un répertoire sur votre hôte en tant que volume de données dans votre conteneur. Pour ce faire, utilisez la commande docker run
avec l’indicateur -v <host directory>:/var/opt/mssql
, où <host directory>
correspond à un chemin d’accès donné. Par exemple : C:\SQL
sur Windows ou ~/sqlvolumes
sur Linux. Cela permet de restaurer les données entre les exécutions de conteneur.
Notes
Les conteneurs SQL Server 2019 (15.x) et versions ultérieures démarrent automatiquement avec un compte non racine, contrairement aux conteneurs SQL Server 2017 (14.x) qui démarrent par défaut en tant qu’utilisateur racine. Pour plus d’informations sur l’exécution de conteneurs SQL Server avec un compte non racine, consultez Configuration de la sécurité.
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 1433:1433 \
-v <host directory>/data:/var/opt/mssql/data \
-v <host directory>/log:/var/opt/mssql/log \
-v <host directory>/secrets:/var/opt/mssql/secrets \
-d mcr.microsoft.com/mssql/server:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" `
-p 1433:1433 `
-v <host directory>/data:/var/opt/mssql/data `
-v <host directory>/log:/var/opt/mssql/log `
-v <host directory>/secrets:/var/opt/mssql/secrets `
-d mcr.microsoft.com/mssql/server:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" ^
-p 1433:1433 ^
-v <host directory>/data:/var/opt/mssql/data ^
-v <host directory>/log:/var/opt/mssql/log ^
-v <host directory>/secrets:/var/opt/mssql/secrets ^
-d mcr.microsoft.com/mssql/server:2017-latest
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' \
-p 1433:1433 \
-v <host directory>/data:/var/opt/mssql/data \
-v <host directory>/log:/var/opt/mssql/log \
-v <host directory>/secrets:/var/opt/mssql/secrets \
-d mcr.microsoft.com/mssql/server:2019-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" `
-p 1433:1433 `
-v <host directory>/data:/var/opt/mssql/data `
-v <host directory>/log:/var/opt/mssql/log `
-v <host directory>/secrets:/var/opt/mssql/secrets `
-d mcr.microsoft.com/mssql/server:2019-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" ^
-p 1433:1433 ^
-v <host directory>/data:/var/opt/mssql/data ^
-v <host directory>/log:/var/opt/mssql/log ^
-v <host directory>/secrets:/var/opt/mssql/secrets ^
-d mcr.microsoft.com/mssql/server:2019-latest
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' \
-p 1433:1433 \
-v <host directory>/data:/var/opt/mssql/data \
-v <host directory>/log:/var/opt/mssql/log \
-v <host directory>/secrets:/var/opt/mssql/secrets \
-d mcr.microsoft.com/mssql/server:2022-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" `
-p 1433:1433 `
-v <host directory>/data:/var/opt/mssql/data `
-v <host directory>/log:/var/opt/mssql/log `
-v <host directory>/secrets:/var/opt/mssql/secrets `
-d mcr.microsoft.com/mssql/server:2022-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" ^
-p 1433:1433 ^
-v <host directory>/data:/var/opt/mssql/data ^
-v <host directory>/log:/var/opt/mssql/log ^
-v <host directory>/secrets:/var/opt/mssql/secrets ^
-d mcr.microsoft.com/mssql/server:2022-latest
Cette technique vous permet également de partager et d’afficher les fichiers sur l’ordinateur hôte en dehors de Docker.
Utiliser des conteneurs de volume de données
La deuxième option consiste à utiliser un conteneur de volume de données. Vous pouvez créer un conteneur de volume de données en spécifiant un nom de volume à la place d’un répertoire hôte avec le paramètre -v
. L’exemple suivant crée un volume de données partagé nommé sqlvolume
.
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' \
-p 1433:1433 \
-v sqlvolume:/var/opt/mssql \
-d mcr.microsoft.com/mssql/server:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" `
-p 1433:1433 `
-v sqlvolume:/var/opt/mssql `
-d mcr.microsoft.com/mssql/server:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" ^
-p 1433:1433 ^
-v sqlvolume:/var/opt/mssql ^
-d mcr.microsoft.com/mssql/server:2017-latest
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' \
-p 1433:1433 \
-v sqlvolume:/var/opt/mssql \
-d mcr.microsoft.com/mssql/server:2019-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" `
-p 1433:1433 `
-v sqlvolume:/var/opt/mssql `
-d mcr.microsoft.com/mssql/server:2019-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" ^
-p 1433:1433 ^
-v sqlvolume:/var/opt/mssql ^
-d mcr.microsoft.com/mssql/server:2019-latest
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' \
-p 1433:1433 \
-v sqlvolume:/var/opt/mssql \
-d mcr.microsoft.com/mssql/server:2022-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" `
-p 1433:1433 `
-v sqlvolume:/var/opt/mssql `
-d mcr.microsoft.com/mssql/server:2022-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" ^
-p 1433:1433 ^
-v sqlvolume:/var/opt/mssql ^
-d mcr.microsoft.com/mssql/server:2022-latest
Remarque
Cette technique pour la création implicite d’un volume de données dans la commande d’exécution ne fonctionne pas avec les versions antérieures de Docker. Dans ce cas, utilisez les étapes explicites décrites dans la documentation de Docker, Création et montage d’un conteneur de volume de données.
Même si vous arrêtez et supprimez ce conteneur, le volume de données persiste. Vous pouvez l’afficher avec la commande docker volume ls
.
docker volume ls
Si vous créez ensuite un autre conteneur avec le même nom de volume, le nouveau conteneur utilise les mêmes données SQL Server contenues dans le volume.
Pour supprimer un conteneur de volume de données, utilisez la commande docker volume rm
.
Avertissement
Si vous supprimez le conteneur de volume de données, toutes les données de SQL Server dans le conteneur sont définitivement supprimées.
Sauvegarde et restauration
Outre ces techniques de conteneur, vous pouvez également utiliser des techniques de sauvegarde et de restauration SQL Server standard. Vous pouvez utiliser des fichiers de sauvegarde pour protéger vos données ou déplacer les données vers une autre instance de SQL Server. Pour plus d’informations, consultez Sauvegarder et restaurer des bases de données SQL Server sur Linux.
Avertissement
Si vous créez des sauvegardes, assurez-vous de créer ou de copier les fichiers de sauvegarde en dehors du conteneur. Dans le cas contraire, si le conteneur est supprimé, les fichiers de sauvegarde sont également supprimés.
Activer la sauvegarde et la restauration VDI dans les conteneurs
Les opérations de sauvegarde et restauration de l'interface de dispositif virtuel (VDI) sont désormais prises en charge dans les déploiements de conteneurs SQL Server à partir de CU15 pour SQL Server 2019 (15.x) et CU28 pour SQL Server 2017 (14.x). Suivez ces étapes pour activer la sauvegarde ou la restauration basée sur VDI pour les conteneurs SQL Server :
Lors du déploiement de conteneurs SQL Server, utilisez l'option
--shm-size
. Pour commencer, définissez le dimensionnement à 1 Go, comme indiqué dans la commande suivante :docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=Mystr0ngP@ssw0rd!" \ --shm-size 1g \ -p 1433:1433 \ --name sql19 \ --hostname sql19 \ -d mcr.microsoft.com/mssql/server:2019-latest
L'option
--shm-size
vous permet de configurer la taille du répertoire de mémoire partagée (/dev/shm
) à l'intérieur du conteneur, qui est fixée à 64 Mo par défaut. Cette taille par défaut de la mémoire partagée est insuffisante pour prendre en charge les sauvegardes VDI. Nous vous recommandons de configurer cette valeur à 1 Go minimum lorsque vous déployez des conteneurs SQL Server et souhaitez prendre en charge les sauvegardes VDI.Vous devez également activer le nouveau paramètre
memory.enablecontainersharedmemory
dansmssql.conf
à l'intérieur du conteneur. Vous pouvez montermssql.conf
au moment du déploiement du conteneur en utilisant l'option-v
comme décrit dans la section Persister vos données, ou après avoir déployé le conteneur en mettant à jour manuellementmssql.conf
à l'intérieur du conteneur. Voici un exemple de fichiermssql.conf
avec le paramètrememory.enablecontainersharedmemory
réglé surtrue
.[memory] enablecontainersharedmemory = true
Copier des fichiers à partir d’un conteneur
Pour copier un fichier hors du conteneur, utilisez la commande suivante :
docker cp <Container ID>:<Container path> <host path>
Vous pouvez obtenir l’ID du conteneur en exécutant la commande docker ps -a
.
Exemple :
docker cp d6b75213ef80:/var/opt/mssql/log/errorlog /tmp/errorlog
docker cp d6b75213ef80:/var/opt/mssql/log/errorlog C:\Temp\errorlog
docker cp d6b75213ef80:/var/opt/mssql/log/errorlog C:\Temp\errorlog
Copier des fichiers dans un conteneur
Pour copier un fichier dans le conteneur, utilisez la commande suivante :
docker cp <Host path> <Container ID>:<Container path>
Exemple :
docker cp /tmp/mydb.mdf d6b75213ef80:/var/opt/mssql/data
docker cp C:\Temp\mydb.mdf d6b75213ef80:/var/opt/mssql/data
docker cp C:\Temp\mydb.mdf d6b75213ef80:/var/opt/mssql/data
Configurer le fuseau horaire
Pour exécuter SQL Server dans un conteneur Linux avec un fuseau horaire spécifique, configurez la variable d’environnement TZ
(Pour plus d’informations, consultez Configurer le fuseau horaire pour SQL Server 2022 sur Linux). Pour trouver la valeur de fuseau horaire appropriée, exécutez la commande tzselect
à partir d’une invite Bash Linux :
tzselect
Après avoir sélectionné le fuseau horaire, tzselect
affiche une sortie similaire à l’exemple suivant :
The following information has been given:
United States
Pacific
Therefore TZ='America/Los_Angeles' will be used.
Vous pouvez utiliser ces informations pour définir la même variable d’environnement dans votre conteneur Linux. L’exemple suivant montre comment exécuter SQL Server dans un conteneur dans le fuseau horaire Americas/Los_Angeles
:
sudo docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' \
-p 1433:1433 --name sql1 \
-e 'TZ=America/Los_Angeles' \
-d mcr.microsoft.com/mssql/server:2017-latest
sudo docker run -e 'ACCEPT_EULA=Y' -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" `
-p 1433:1433 --name sql1 `
-e "TZ=America/Los_Angeles" `
-d mcr.microsoft.com/mssql/server:2017-latest
sudo docker run -e 'ACCEPT_EULA=Y' -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" ^
-p 1433:1433 --name sql1 ^
-e "TZ=America/Los_Angeles" ^
-d mcr.microsoft.com/mssql/server:2017-latest
sudo docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' \
-p 1433:1433 --name sql1 \
-e 'TZ=America/Los_Angeles' \
-d mcr.microsoft.com/mssql/server:2019-latest
sudo docker run -e 'ACCEPT_EULA=Y' -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" `
-p 1433:1433 --name sql1 `
-e "TZ=America/Los_Angeles" `
-d mcr.microsoft.com/mssql/server:2019-latest
sudo docker run -e 'ACCEPT_EULA=Y' -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" `
-p 1433:1433 --name sql1 `
-e "TZ=America/Los_Angeles" `
-d mcr.microsoft.com/mssql/server:2019-latest
sudo docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' \
-p 1433:1433 --name sql1 \
-e 'TZ=America/Los_Angeles' \
-d mcr.microsoft.com/mssql/server:2022-latest
sudo docker run -e 'ACCEPT_EULA=Y' -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" `
-p 1433:1433 --name sql1 `
-e "TZ=America/Los_Angeles" `
-d mcr.microsoft.com/mssql/server:2022-latest
sudo docker run -e 'ACCEPT_EULA=Y' -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" ^
-p 1433:1433 --name sql1 ^
-e "TZ=America/Los_Angeles" ^
-d mcr.microsoft.com/mssql/server:2022-latest
Modifier le chemin d’accès tempdb
Il est recommandé de séparer votre base de données tempdb
de vos bases de données utilisateur.
Connectez-vous à l’instance SQL Server, puis exécutez le script Transact-SQL (T-SQL) suivant. Si d'autres fichiers sont associés à
tempdb
, vous devez également les déplacer.ALTER DATABASE tempdb MODIFY FILE ( NAME = tempdev, FILENAME = '/var/opt/mssql/tempdb/tempdb.mdf' ); GO ALTER DATABASE tempdb MODIFY FILE ( NAME = templog, FILENAME = '/var/opt/mssql/tempdb/templog.ldf' ); GO
Vérifiez que l’emplacement du fichier
tempdb
a été modifié à l’aide du script T-SQL suivant :SELECT * FROM sys.sysaltfiles WHERE dbid = 2;
Vous devez redémarrer le conteneur SQL Server pour que ces modifications prennent effet.
docker stop sql1 docker start sql1
docker stop sql1 docker start sql1
docker stop sql1 docker start sql1
Ouvrez une session
bash
interactive pour vous connecter au conteneur.docker exec -it sql1 bash
docker exec -it sql1 bash
docker exec -it sql1 bash
Une fois connecté à l’interpréteur de commandes interactif, exécutez la commande suivante pour vérifier l’emplacement de
tempdb
:ls /var/opt/mssql/tempdb/
Si le déplacement a réussi, vous verrez une sortie similaire :
tempdb.mdf templog.ldf
Modifier l’emplacement des fichiers par défaut
Ajoutez la variable MSSQL_DATA_DIR
pour modifier votre répertoire de données dans votre commande docker run
, puis montez un volume à cet emplacement auquel l’utilisateur de votre conteneur a accès.
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=MyStrongPassword' \
-e 'MSSQL_DATA_DIR=/my/file/path' \
-v /my/host/path:/my/file/path \
-p 1433:1433 \
-d mcr.microsoft.com/mssql/server:2017-latest
docker run -e 'ACCEPT_EULA=Y' -e "MSSQL_SA_PASSWORD=MyStrongPassword" `
-e "MSSQL_DATA_DIR=/my/file/path" `
-v /my/host/path:/my/file/path `
-p 1433:1433 `
-d mcr.microsoft.com/mssql/server:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=MyStrongPassword" ^
-e "MSSQL_DATA_DIR=/my/file/path" ^
-v /my/host/path:/my/file/path ^
-p 1433:1433 ^
-d mcr.microsoft.com/mssql/server:2017-latest
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=MyStrongPassword' \
-e 'MSSQL_DATA_DIR=/my/file/path' \
-v /my/host/path:/my/file/path \
-p 1433:1433 \
-d mcr.microsoft.com/mssql/server:2019-latest
docker run -e 'ACCEPT_EULA=Y' -e "MSSQL_SA_PASSWORD=MyStrongPassword" `
-e "MSSQL_DATA_DIR=/my/file/path" `
-v /my/host/path:/my/file/path `
-p 1433:1433 `
-d mcr.microsoft.com/mssql/server:2019-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=MyStrongPassword" ^
-e "MSSQL_DATA_DIR=/my/file/path" ^
-v /my/host/path:/my/file/path ^
-p 1433:1433 ^
-d mcr.microsoft.com/mssql/server:2019-latest
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=MyStrongPassword' \
-e 'MSSQL_DATA_DIR=/my/file/path' \
-v /my/host/path:/my/file/path \
-p 1433:1433 \
-d mcr.microsoft.com/mssql/server:2022-latest
docker run -e 'ACCEPT_EULA=Y' -e "MSSQL_SA_PASSWORD=MyStrongPassword" `
-e "MSSQL_DATA_DIR=/my/file/path" `
-v /my/host/path:/my/file/path `
-p 1433:1433 `
-d mcr.microsoft.com/mssql/server:2022-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=MyStrongPassword" ^
-e "MSSQL_DATA_DIR=/my/file/path" ^
-v /my/host/path:/my/file/path ^
-p 1433:1433 ^
-d mcr.microsoft.com/mssql/server:2022-latest
Utiliser mssql-config pour configurer SQL Server à l’intérieur d’un conteneur
Vous pouvez utiliser le mssql-conf pour définir des paramètres dans des conteneurs SQL Server.
Par exemple, vous pouvez définir une limite de mémoire pour l’instance en procédant comme suit :
Connectez-vous directement au conteneur en utilisant
docker exec
en tant qu'utilisateur racine. Remplacezsqlcontainer
par le nom de votre conteneur.docker exec -u root -it sqlcontainer "bash"
Utilisez mssql-conf pour modifier un paramètre. Cet exemple montre comment modifier le paramètre
memory.memorylimitmb
sur 2 Go (2 048 Mo)./opt/mssql/bin/mssql-conf set memory.memorylimitmb 2048
Exemples de conteneurs Docker personnalisés
Exemples de conteneurs Docker personnalisés, consultez https://github.com/microsoft/mssql-docker/tree/master/linux/preview/examples. Il s’agit des scénarios suivants :
- Exemple Dockerfile avec recherche en texte intégral
- Exemple Dockerfile pour RHEL 7 et SQL Server 2019
- Exemple Dockerfile pour RHEL 8 et SQL Server 2017
- Exemple Dockerfile pour Ubuntu 20.04 et SQL Server 2019 avec recherche en texte intégral, PolyBase et Tools
Pour plus d'informations sur la construction et l'exécution de conteneurs Docker à l'aide de Dockerfiles, consultez les exemples ML Services sur GitHub.
Contenu connexe
- 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
- Bien démarrer avec les images conteneur SQL Server 2022 (16.x) sur Docker en suivant le guide de 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