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.

docker machine

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.

    laster13 Après plusieurs tests, je viens de me rendre compte que je peux pas monter de volume...
    Je regarde ça et je reviens avec une solution ^^

      4 jours plus tard

      Bon j'ai mis à jour le tuto, là les gars vous avez une superbe config. Y'a plus d'excuse pour pas se mettre à docker maintenant 😂

      Répondre…