Les compétences du DBA moderne : Docker

Le métier de DBA est en pleine évolution, voire révolution. Tout un pan du métier a tout simplement disparu : le choix du matériel, son installation avant la mise à jour des firmware et drivers. La virtualisation (disons la virtualisation 1.0, virtualisation matérielle) a grandement simplifié la tâche des administrateurs système et donc par voie de conséquence des DBAs.

Elle permet en effet de choisir une configuration « matérielle » sans pour autant être contraint par cette même configuration durant toute la vie de l’applicatif. Il est extrêmement simple de faire évoluer les ressources dont dispose le serveur de bases de données. Ajouter de la CPU, étendre la mémoire, ajouter des volumes, autant de manipulations qui ne nécessitent que quelques secondes d’arrêt, dans le pire des cas, même s’il reste possible d’ajouter à chaud de la CPU et de la mémoire, ces options restent déconseillées pour des VMs dédies à SQL Server.

Dès 2010 / 2011 (ahhh, les JSS) je donnais des sessions liées à la virtualisation de SQL Server. Aujourd’hui, les raisons qui pousseraient à ne PAS virtualiser SQL Server ne sont pas légion. Bref, la virtualisation fait partie intégrante de la vie du produit, et donc des compétences du DBA. Je ne revendrais pas sur le sujet, bien qu’il soit important de « bien » configurer les VMs.

Depuis 2016 et le SQLSaturday #510 de Paris, je vous présente régulièrement Docker. L’idée ici n’est pas de vous transformer en administrateur système spécialisé en Docker, mais bien de vous donner les informations nécessaires et suffisantes relative à votre rôle de DBA.

Pour faire simple, la containerisation, la virtualisation (disons 2.0) est une virtualisation d’OS. On « supprime » tout simplement la couche Guest OS d’une VM. LE conteneur fit alors directement appel aux « DLL » de l’OS hôte en lieu et place de l’OS Guest.

On va installer le moteur Docker juste au-dessus de l’OS hôte (Windows OU Linux). Ce moteur va permettre la prise en charge de containers. Un container n’est ni plus ni moins que l’exécution d’une image, un template, qui encapsule un service.

L’installation de Docker peut se faire sur Linux (Ubuntu, Redhat, SUSE et les déclinaisons basées sur le jeu des distributions héritées) ou bien sur Windows. Le moteur Docker s’intègre parfaitement sur Windows Server.

Pour Linux Ubuntu :

sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-cache policy docker-ce
sudo apt-get install -y docker-ce
sudo service docker start

Pour Windows Server :

Install-Module -Name DockerMsftProvider -Repository PSGallery -Force
Install-Module -Name DockerMsftProvider -Force
Install-Package -Name docker -ProviderName DockerMsftProvider -Force

Pour Windows 10, c’est un peu différent, on peut télécharger Docker depuis l’adresse https://docs.docker.com/docker-for-windows/install/ et cela installe une VM Moby qui contient tout le nécessaire.

On peut ainsi créer une image contenant un applicatif, tel que SQL Server, un serveur Web, un LoadBalancer tel que NGINX ou tout service que vous auriez développé.

Il est également possible de télécharger (commande DOCKER PULL) une image depuis une registry. Cette registry peut être publique, telle la registry de Docker ( http://hub.docker.com ) ou de Microsoft ( http://mcr.microsoft.com ) mais également privée, sur vos serveurs OnPrem ou bien chez un fournisseur Cloud (Azure, AWS, …). Certaines images sont officielles (crées par l’éditeur lui-même) comme c’est le cas pour SQL Server de la part de Microsoft, mais vous pouvez également créer vos propres images en « dérivant » une autre image. Vous avez alors la possibilité de publier cette image (commande DOCKER PUSH) vers une registry.

La construction d’une image se fait au travers d’un ficheri DOCKERFILE, un fichier qui contient les scripts que doit exécuteur le moteur DOCKER pour construire (commande DOCKER BUILD) une nouvelle image. La fichier Dockerfile contient la référence d’une image sur laquelle on se base et ensuite une suite de commande a exécuter.

Une fois votre image prête à l’emploi, il vous suffit d’instancier une image et d’exécuter le conteneur (commande DOCKER START). D’un point de vue exécution, il est important de noter que le conteneur n’est pas visible depuis le réseau. En effet, il va falloir rediriger un port TCP de l’OS hôte vers un port du conteneur.

Un conteneur est stateless. Si vous souhaitez conserver les données liées à votre conteneur, ce qui dans el cas de SQL Server est … plutôt une bonne chose, il convient d’effectuer une redirection de stockage. Soit en utilisant une redirection de répertoires soit en utilisant la notion de volumes docker. Quel que soit l’environnement d’exécution, Docker, au travers de la ligne de commande, permet une expérience utilisateur identique, comme on peut le voir sur l’exemple suivant. Le démarrage d’un conteneur SQL Server sur Windows ou Linux est similaire, la seule différence tenant au nom de l’image à démarrer.

Une fois démarré, ce qui est bien plus rapide que le démarrage d’une VM, votre conteneur est prêt à recevoir les connexions.

Pour stopper un conteneur, il suffit de lancer la commande DOCKER STOP. DOCKER RM quant à lui permet la suppression d’un conteneur. Le tableau suivant présente un parallèle entre la gestion et l’installation d’un logiciel dans le monde traditionnel et dans le monde Docker.

L’utilisation de Docker, et par voie de conséquence l’utilisation de SQL Server au travers de Docker s’inscrit dans la tendance actuelle de développements : les micro-services. Il est temps de mettre au placard les « vieux » développements monolithiques comme on a pu les connaitre (et les coder) durant les 20 dernières années. Ce genre d’application est relativement difficile à maintenir, car à chaque changement il fallait effectuer une batterie de tests de non-régression.

Alors qu’un modèle de développement basé sur des micro-services dialoguant entre eux sous est plus simple à maintenir et faire évoluer.

Une application devient alors l’assemble, simple, de briques applicatives. Docker compose (commande DOCKER-COMPOSE UP) permet alors de créer et de démarrer la notion d’application multi conteneur.

Un fichier YAML va décrire les différences services, comprenez par-là différents conteneurs, qui composent l’application. Chaque conteneur peut être créé via un fichier Dockerfile, ou bien en se basant directement sur une image.

Et cela s’intègre encore plus facilement dans un modèle de développement CI/CD avec de la mise en production automatique ou quasi automatique au travers de Wokflows supportés par des produits tels que ANSIBLE, JENKINS et d’autres.

Les avantages indéniables de travailler avec des conteneurs se résument en quelques points :

  • Légèreté : un conteneur est plus léger qu’une VM, nécessite moins de ressources et moins de mises à jour (pas de patching de l’OS guest), et offre une plus grande efficacité du Host
  • Simplicité : la mise en œuvre est simple. On créé une image une seule fois et on peut la déployer sur plusieurs environnements avec l’assurance que cela va s’exécuter exactement de la même manière, on évite le problème du « Ca marchait pourtant très bien sur mon PC mais en prod on a des problèmes … ». La même image peut être déployée en Dev, test et Prod.
  • la rapidité de mise en oeuvre
  • L’expérience utilisateur similaire sur Windows, Linux ou MacOS
  • Et certainement bien d’autres que j’oublie à cet instant

Je vous suggère les lectures suivantes :

 

L’utilisation de conteneurs est une tendance forte du marché. Pour le passage en production il faut tout de même s’équiper un peu, principalement d’un orchestrateur (Kubernetes, Swarm), ce que nous verrons dans un prochain article.

Je vous encourage fortement à tester Docker. Cela fonctionne parfaitement pour SQL Server et pourrait vous rendre bien des services. De plus il y a fort à parier que dans le futur vous soyez confronté à cette technologie. Autant jouer avec dès maintenant.

Happy Docker !

Publicités

A propos Christophe

Consultant SQL Server Formateur certifié Microsoft MVP SQL Server MCM/MCSM SQL Server
Cet article a été publié dans Containers, Docker, Linux, Non classé. Ajoutez ce permalien à vos favoris.

Un commentaire pour Les compétences du DBA moderne : Docker

  1. Ping : Les compétences du DBA moderne : Kubernetes | Christophe LAPORTE – Consultant SQL Server

Répondre

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google

Vous commentez à l'aide de votre compte Google. Déconnexion /  Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s