docker

Développer en Linux sous Windows

Récemment, je vous ai fait part de mon mécontentement en jouant avec Docker sous une VM Linux hébergée sous un Windows. Les temps de réponses des répertoires partagés étaient désastreux, les liens symboliques ne fonctionnaient pas… Mais tout ça, c’était avant WSL 2. WSL c’est l’intégration du noyau Linux directement dans Windows, et ca change tout ! Voyons ensemble comment intégrer tout cela.

Installation de WSL 2:

Pour commencer, vous devez être en Windows 10 et installer ce fichier:
https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi.
Entrez ensuite les commandes suivantes dans un terminal en mode administrateur:

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform -NoRestart
wsl --set-default-version 2

Installer Docker Desktop for Windows:


Installer Docker via https://hub.docker.com/editions/community/docker-ce-desktop-windows/
Lancer le, et dans les réglages, cocher Expose daemon on tcp://localhost:2375 without TLS
On redémarre le Windows

Dans le microsoft store, installer puis lancer debian
Faire un user VOTRENOM – password : VOTREPASSWORD
On y accède via \wsl$\Debian
Son ip se trouve avec wsl hostname -i, ici, on va lui mettre 192.168.50.16
Copier vos clés ssh dans \wsl$\Debian/root/.ssh

Activer SSH et l’IP fixe à chaque démarrage:

Par défaut ssh est désactivé, nous allons le réactiver et aussi passer l’ip en fixe:
Taper la touche Windows + R, puis
shell:startup et coller ce contenu dans un fichier startssh.vbs dans le répertoire.

Set WshShell = WScript.CreateObject("WScript.Shell")
If WScript.Arguments.Length = 0 Then
  Set ObjShell = CreateObject("Shell.Application")
  ObjShell.ShellExecute "wscript.exe" _
    , """" & WScript.ScriptFullName & """ RunAsAdministrator", , "runas", 1
  WScript.Quit
End if

Set ws = CreateObject("Wscript.Shell") 
ws.run "wsl -d Debian -u root service ssh start", vbhide
WScript.Sleep 15000 'On attend que la VM se charge
ws.run "wsl -d Debian -u root ip addr add 192.168.50.16/24 broadcast 192.168.50.255 dev eth0 label eth0:1", 0 
ws.run "netsh interface ip add address " & chr(34) & "vEthernet (WSL)" & chr(34) & " 192.168.50.88 255.255.255.0", 0 
Set WshShell = Nothing

Paramétrage du SSH, et ajout de quelques commandes utiles:

Ensuite dans la console ssh, faites:
sudo su

Taper la commande
vi /etc/ssh/sshd_config
Ajouter la ligne suivante à la fin dans
%sudo ALL=NOPASSWD: /etc/init.d/ssh

Dans votre ~/.bashrc, ajouter les alias suivants:
alias gosite=’cd /application/VOTRESITE’
alias goweb=’gosite && docker-compose exec web /bin/bash’
alias godb=’gosite && docker-compose exec db /bin/bash’
alias doup=’gosite && docker-compose up’
alias gogulp=’docker exec -i web bash -c « cd /application/VOTRESITE && ./node_modules/gulp/bin/gulp.js »‘
alias godi=’docker exec -i web bash -c « cd /application/VOTRESITE && php bin/magento setup:di:compile »‘
alias gosu=’docker exec -i web bash -c « cd /application/VOTRESITE && php bin/magento setup:upgrade »‘

apt-get update
apt-get install iputils-ping stow apt-transport-https ca-certificates curl gnupg-agent software-properties-common docker git openssh-server docker-compose
git config –global user.name « VOTRENOM »
git config –global user.email « VOTRENOM@VOTREAGENCE.com »
service ssh start
mkdir /application
cd /application
chmod 777 -R /application #Pour donner les acces a Windows (en désactivant la sécurité)
git clone ssh://git@VOTREPROJET.git

Comment accéder à mon linux ?

Pour rappel ,vous pouvez y accéder via son IP, et pour la connaitre, il faut faire: wsl hostname -i
Ou via le réseau \\wsl$\Debian
Pour obtenir un shell, vous pouvez taper bash dans un invité de commande, ou encore lancer debian dans votre menu Windows. Si vous souhaitez y accéder via un autre terminal type ssh comme par exemple le fameux mobaXterm, alors il vous faut activer le serveur ssh comme indiqué ci-dessus.

Et pour monter un docker avec Apache, et le reste ?

Je vous renvoie à mon ancien tutoriel: Docker PHP / Apache / Magento qui explique tout. Le résultat est bluffant. On n’est plus dans de l’émulation, et là ca marche vraiment bien !

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.