HTTP_PROXY
et HTTPS_PROXY
Docker machine est un script qui permet de générer des machines virtuelles et d'installer docker automatiquement. Il est capable d'utiliser plusieurs hyperviseurs comme virtutalbox ou openstack mais aussi les fournisseurs de cloud publiques : AWS, Azure … Vous avez une documentation plus spécifique sur openstack ici
Certaines requêtes de docker machine utilisent un port inhabituel qui est filtré sur le réseau wifi. Vous devez donc utiliser les machines de l'université et télécharger le script par la commande :
curl -L https://github.com/docker/machine/releases/download/v0.13.0/docker-machine-`uname -s`-`uname -m` > docker-machine \ && chmod +x ./docker-machine
La commande docker-machine est assez simple car elle signale la plupart des options qui lui manque. La commande de création est documentée ici, les options relatives à //openstack// là. Vous devez savoir que :
openstack
https://cloud-info.univ-lyon1.fr:5000/v3/
openstack-tenant-id
t lui donner la valeur fd8c7337154b4c8ea246c1bca973f9f0
Ubuntu 16.04.3 LTS Xenial
docker-machine ... --engine-env HTTP_PROXY="http://adresse_de_votre_proxy:port" ... NOMDELAMACHINE
docker-machine sauvegarde ses informations dans le répertoire ~/.docker/machine/
. Si à un moment docker-machine rm …
ne fonctionne pas car openstack n'a pas créé la machine correspondante, il suffit d'effacer le répertoire ~/.docker/machine/machines/NOMDELAMACHINE
.pour que docker-machine oublie cette denière.
<hi #ff7f27>Protection de votre mot de passe</hi>: attention, vous vous connectez au serveur openstack avec votre login et mot de passe de l'université. Pour éviter de laisser votre mot de passe en clair dans la ligne de commande, n'utilisez pas l'option openstack-password
. Vous devez stocker votre mot de passe dans la variable d'environnement OS_PASSWORD
. Pour cela copier/coller la commande :
export OS_PASSWORD=$(python3 -c "import getpass; pa=getpass.getpass('Mot de passe : '); print (pa)")
Vous pouvez ensuite voir les nœuds gérés par docker-machine via la commande docker-machine ls
, en supprimer une par docker-machine rm
…
Pour exécuter des commandes docker sur ces machines il y a 3 méthodes :
docker-machine env NOMMACHINE
. Dans note TP c'est impossible car le logiciel docker n'est pas installé sur les ordinateur de l'université.docker-machine ssh NOMMACHINE
docker-machine ssh NOMMACHINE COMMANDE
. Par exempledocker-machine ssh NOMMACHINE sudo docker ps
Vous avez vu lors du TP précédant que le cluster swarm pouvait facilement lancer des dockers basés sur des images publiques. Mais pour le moment vous ne pouvez pas le faire avec des images construites via un dockerfile. Pour éviter cette limite, il faut installer un dépôt docker privé dans lequel vous placerez et téléchargez les images que vous avez généré. Vous trouverez la documentation ici
Attention, les registry que vous pouvez facilement utiliser sont des registry locaux c'est à dire que leur adresse est localhost
. En effet, pour autoriser un registry distant, il faut gérer des certificats d'authentification SSL ce qui est hors du cadre du cours. Vous allez donc créer un unique docker registry qui répond à l'adresse localhost:5000
sur plusieurs machines virtuelle. Cela n'est possible que grâce au cluster swarm qui va s'occuper pour vous de la redirection des paquets.
registry
qui partage le port 5000 avec toutes les machines du cluster.Vous pouvez construire une image personnelle, par exemple le docker/php via ce Dockerfile. Pour l'utiliser via un service swarm vous devez :
localhost:5000/
Vous pouvez ensuite :
Pour automatiser vos déploiement, il est plus pratique d'utiliser un fichier yaml pour décrire votre application. Comme pour le premier TP avec docker-compose, vous allez maintenant utiliser docker stack.
Vous devez supprimer votre précédent service avec docker service rm
.
Ecrivez votre fichier yaml pour lancer votre image localhost:5000/VOTRETAG
avec 2 replicas.
Lancez le stack avec la commande docker stack up -c votre fichier
Lors de la mise en place d'application, il y a de nombreuses données sensibles comme les certificats ou les mots de passe. Pour ne pas les mettre en clair dans vos fichiers, docker propose la fonction secret.
Maintenant, vous allez créer un secret avec la commande docker secret
. Puis modifier votre fichier yaml afin de lui indiquer qu'il peut accéder à ce secret externe.
Quand vous avez fini vous pouvez modifier le fichier afin d'afficher votre secret :
echo “mon secret :” . file_get_contents(“/var/run/secrets/nom de votre secret
”,“r”);
Ne pas oublier de rebuild votre image et de recréer votre stack.
HTTP_PROXY
et HTTPS_PROXY