[Docker] Docker Datacenter dans Azure

Docker Datacenter sur Azure et AWS a été annoncé ce Mardi 21 Juin 2016 à la DockerCon.

Docker Datacenter, c’est quoi?

Docker Datacenter vous permet d’avoir, dans votre datacenter ou maintenant sur le Cloud, votre environnement Docker, comme la version officiel. C’est à dire, avec les interfaces de gestions, un repository, etc.

L’architecture qui va être déployée sur Azure est la suivante:

Installation

Avant de commencer, assurez-vous d’avoir une licence pour Docker Datacenter: https://www.docker.com/products/docker-datacenter

Sur Azure, il est très simple de déployer cette solution, via un Template ARM. Regardons comment faire. Connectez vous sur https://portal.azure.com et cliquez sur New. Recherchez Docker dans le Marketplace et sélectionnez Docker Datacenter:

Choisissez un nom d’utilisateur, un mot de passe ou une clé SSH qui sera utilisé pour toutes les VMs et un nouveau groupe de ressource:

Choisissez un nom préfixe pour chaque ressource et ensuite, sélectionnez la taille des VMs qui seront crées. Créez un nouveau réseau ainsi que 2 sous réseaux, pour les contrôleurs et pour les nœuds et le docker trusted registry (DTR):

Créez une IP publique pour le load-balancer des nœuds et pour le load-balancer du DTR. Associez un nom DNS publique à chacun d’entre eux. Enfin, choisissez un mot de passe pour l’administrateur du Universal Control Plane (UCP) et choisissez la clé que vous avez téléchargé précédemment:

Vérifiez les informations que vous avez renseignez:

En cliquant sur Purchase, vous acceptez les différentes licence  et le déploiement commence:

Le déploiement a pris une vingtaine de minutes chez moi:

Découverte et configuration

Ouvrez un navigateur et allez sur votre URL ucp, dans mon cas, https://dockerucp.florentappointaire.cloud:

Connectez vous avez le nom d’utilisateur admin et utilisez le mot de passe que vous avez renseigné plus tôt, lors du déploiement. Si l’authentification est réussi, vous devriez arriver sur le Dashboard:

De cette interface, vous allez pouvoir:

  • Gérer les applications
  • Gérer les conteurs
  • Gérer les nœuds
  • Gérer les volumes
  • Gérer les réseaux
  • Gérer les images

Mais aussi, gérer les utilisateurs et quelques paramètres.

Sécurisation de la registry

Avant de commencer à remplir notre registry et de déployer des conteneurs, il va falloir sécuriser l’environnement pour que la communication entre l’UCP et la DTR soit sans faille.

Pour commencer, connectez vous en SSH sur votre nœud UCP:

Exécutez la commande suivante:

sudo docker run --rm --name ucp -v /var/run/docker.sock:/var/run/docker.sock docker/ucp dump-certs --cluster --ca

Après avoir téléchargé l’image uc-dump-certs et créé un nouveau conteneur, vous devriez avoir un résultat comme ceci:

Copiez le résultat dans un fichier sur votre ordinateur et nommez le ucp-cluster-ca.pem. Connectez vous ensuite à votre DTR, dans mon cas https://dockerdatacenter.florentappointaire.cloud:

Connectez vous avec le nom d’utilisateur admin et le mot de passe que vous avez renseigné lors de l’installation. Allez dans Settings et dans la partie Domain, cliquez sur Show TLS Settings. Copiez le contenu de la partie TLS CA dans un fichier sur votre ordinateur, qui se nommera dtr-ca.pem:

Allez sur  votre interface UCP, dans Settings > DTR et renseignez l’URL de votre registry. Sélectionnez également le certificat dtr-ca.pem et cliquez sur Update Registry:

Il faut maintenant truster l’UCP depuis le DTR. Dans l’interface du DTR, dans Settings, collez le contenu du certificat ucp-cluster-ca.pem dans Auth ByPass TLS Root CA et sauvegardez:

Nous devons maintenant copier le fichier dtr-ca.pem sur chaque nœud de l’UCP (il y en a 7 par défaut). J’ai utilisé un serveur pour me connecter aux autres serveurs en ssh. J’ai alors exécuté les commandes suivantes:

sudo su -
mkdir /etc/docker/certs.d/
mkdir /etc/docker/certs.d/dlbpiplabel.westeurope.cloudapp.azure.com/
vi /etc/docker/certs.d/dlbpiplabel.westeurope.cloudapp.azure.com/ca.crt

Collez le résultat du fichier dtr-ca.pem. Redémarrez le service docker avec la commande suivante:

service docker restart

Mise à jour du stockage des images dans DTR

Pour stocker les images Docker dans le repository, vous aurez besoin d’un compte de stockage. Je vais continuer sur Azure, et donc créer mon compte de stockage dessus:

Récupérez ensuite les informations avec le nom du compte de stockage que vous avez choisi mais surtout la clé primaire pour y accéder:

Dans l’interface DTR, allez dans Settings > Storage et choisissez Azure. Renseignez les informations que vous avez récupéré plus tôt:


Nouvelle image dans DTR

Nous allons maintenant pousser une image dans notre DTR, pour pouvoir déployer des conteneurs avec cette image. Connectez vous à DTR si ce n’est déjà fait et cliquez sur New repository pour créer un nouveau repository:

Renseignez les champs et cliquez sur Save:

Nous allons maintenant pousser une image sur ce repository. J’ai créé une image qui va faire tourner un site web (sous nginx) avec une page HTML, avec le Dockerfile suivant (les sources sont ici: https://github.com/Flodu31/Floapp-Cloud):

FROM nginx
MAINTAINER Florent APPOINTAIRE <florent.appointaire@gmail.com>
COPY index.html /usr/share/nginx/html/

Exécutez les commandes suivantes pour « construire » l’image:

docker build –t floapp-website .

Copiez votre certificat drt-ca.pem sur votre machine où vous allez vous connecter avec les commandes Docker. Sur ma Debian, j’ai fait ceci:

Il faut maintenant se connecter à ce hub pour pouvoir pusher notre image Docker. Ici, je vais me connecter avec le compte admin, compte avec lequel j’ai créé mon repository:

docker login dlbpiplabel.westeurope.cloudapp.azure.com

Bien sur, remplacez l’url par la votre.

Si vous avez l’erreur suivante, effectuez la manipulation suivante:

vi /lib/systemd/system/docker.service
#Remplacez ExecStart=/usr/bin/docker daemon -H fd:// par la ligne suivante
ExecStart=/usr/bin/docker daemon -H fd:// --insecure-registry dlbpiplabel.westeurope.cloudapp.azure.com
#Sauvegardez
systemctl daemon-reload
service docker restart
ps aux | grep docker

Il faut maintenant tagger l’image. Utilisez la commande suivante:

docker tag floapp-website:latest dlbpiplabel.westeurope.cloudapp.azure.com/admin/floappwebsite:latest

On peut l’envoyer maintenant sur notre repository que l’on a créé précédemment:

docker push dlbpiplabel.westeurope.cloudapp.azure.com/admin/floappwebsite:latest

L’envoi est terminé:

Déployer l’image FloAppWebsite

Nous allons maintenant créer un conteneur depuis cette image. Pour commencer, il faut télécharger l’image sur notre compte. Dans l’UCP, allez dans Images et cliquez sur Pull image:

Fournissez le nom de votre image, dans mon cas dlbpiplabel.westeurope.cloudapp.azure.com/admin/floappwebsite, et cliquez sur Pull:

Après quelques secondes (ceci dépend de la taille de l’image), vous la verrez apparaître dans la liste des images disponibles:

Allez maintenant dans Containers et cliquez sur Deploy Container. Donnez le nom de l’image, et adaptez les paramètres au besoin:

Cliquez sur Run Container à droite:

Après quelques secondes, vous avez le nouveau conteneur:

Si vous cliquez sur le conteneur, vous aurez la possibilité de voir le port qui est exposé, dans la partie Network:

Pour pouvoir tester que tout fonctionne, j’ai déployé un VM dans le même réseau que les nœuds Docker UCP:

Cette nouveauté est plutôt agréable, même si quelques bugs sont toujours présents, ceci va certainement résoudre certains casse-tête de certaines entreprises 🙂

Laisser un commentaire