- Modifié
Installer docker sur Windows via Windows Subsystem for Linux
L'objectif est de faire fonctionner Docker sur la distribution linux que vous avez installer sur votre Windows.
Voir tuto ici : https://mondedie.fr/d/10493-deployez-nativement-linux-sur-windows-10
Pour ceux qui dispose de Windows pro, je ne recommande pas cette technique.
En effet, Je vous recommande Docker for Windows qui utilise hyper-v pour virtualiser vos conteneurs.
Pour ceux qui utilise Windows home/famille, on est obligé de passer par virtualbox pour virtualiser nos conteneurs. Bref Windows quoi
1) Installation de Docker
Pour commencer, il faut télécharger sur github docker toolbox un outil qui va nous faciliter la configuration de virtualbox.
Vous pouvez trouver docker toolbox ici https://github.com/docker/toolbox/releases
Il faut choisir la dernière version ex: DockerToolbox-18.09.0.exe
Lancez l'exécutable et choisissez les options suivante, on a besoin que de virtualbox pour le moment.
Une fois tout installé, on va pouvoir créer une machine virtuelle pour que docker puisse fonctionner.
Vous pouvez lancer les commandes via bash (ou le shell de votre distribution linux).
Moi j'ai par exemple, j'ai créée un alias docker-machine="docker-machine.exe" dans mon bashrc.
docker-machine.exe create --driver virtualbox docker
On peut voir le statut de la ou les vm dans virtualbox via docker-machine
docker-machine.exe ls
Maintenant on peut installer Docker sur notre distribution LInux. J'utilise Ubuntu dans ce tuto, pour les autres distributions veuillez vous référer à la doc Docker ici https://docs.docker.com/install/
Avant ça on supprime les anciennes versions de docker qui peuvent être présente sur le système.
sudo apt-get autoremove docker*
Mettre à jour le système
sudo apt-get update && sudo apt-get upgrade
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
On ajoute le dépôt Docker officiel
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo apt-key fingerprint 0EBFCD88
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
Installation de Docker-ce
sudo apt-get update
sudo apt-get install docker-ce
Installation de docker-compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.23.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
Maintenant il faut connecter la vm docker à notre shell bash de Ubuntu.
Pour cela il faut ajouter ceci à la fin de votre .bashrc
# connexion de bash à la vm docker
export DOCKER_HOST="tcp://$(docker-machine.exe ip docker):2376"
export DOCKER_CERT_PATH=/mnt/c/Users/{votre_user_windows}/.docker/machine/certs
export DOCKER_TLS_VERIFY=1
Il faut bien remplacer {votre_user_windows} par votre utilisateur Windows (la première lettre est en majuscule bien souvent, ne pas faire l'erreur)
Il suffit de relancer bash et vous pouvez utiliser Docker normalement.
[magicalex] [win-magicalex] [~] > docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
source : https://blog.jayway.com/2017/04/19/running-docker-on-bash-on-windows/
2) Problème rencontré
La vm docker (boot2docker) doit être allumé pour que docker fonctionne
A chaque redémarrage de Windows il ne faudra pas oublier de relancer la vm docker dans virtualbox.
Pour cela il suffit de lancer cette commande dans bash
docker-machine.exe start docker
S'assurer que les volumes montés fonctionnent
source: blog nickjanetakis.com
Lorsque l'on utilise WSL, Docker s'attend à ce que vous fournissiez vos chemins de volume dans un format qui correspond à ceci: /c/Users/magicalex/lab/myapp
Mais WSL ne fonctionne pas comme ça. Au lieu de cela, il utilise le format /mnt/c/Users/magicalex/lab/myapp
Pour résoudre le problème il existe un fichier de configuration pour changer le point de montage des disks
Solution qui ne fonctionne que à partir de windows 18.03 et plus
sudo vim /etc/wsl.conf
[automount]
root = /
options = "metadata"
L'option metadata permet de pas mettre la permission 777 sur tous les fichiers. Ce qui, en terme de sécurité, ne coûte pas chère.
Port forwarding ne fonctionne pas en localhost
source: blog jhipster.tech
Bon en réalité ça fonctionne mais docker forward sur la vm virtualbox. Donc si vous récupérer l'ip de la vm comme ceci docker-machine ip docker
et que vous avez une application qui écoute sur le port 8080 http://ip_de_la_vm:8080 et ça fonctionne.
Dans l'article que je cite il vous explique comme forward le port vers locahost dans virtualbox pour pouvoir appeler directement l'url localhost:8080
à utiliser pour les ports que vous utilisez souvent moi je l'ai fait que pour le port 8080.