127 votes

Peut-on exécuter Docker en mode natif sur le nouvel espace utilisateur bash de Windows 10 (Ubuntu) ?

D'après ce que j'ai compris, la principale limitation de l'exécution de Docker sur d'autres systèmes d'exploitation était les conteneurs réseau Linux qui le rendaient possible. (Certainement pour les Macs).

Récemment Microsoft a annoncé un bêta d'un Ubuntu linux mode utilisateur fonctionnant en mode natif sur Windows 10. Il peut exécuter des binaires compilés au format ELF sur Windows (contrairement à cygwin qui nécessite une compilation).

Ma question est la suivante : Peut-on exécuter Docker en mode natif sur le nouvel espace utilisateur bash de Windows 10 (Ubuntu) ?

104voto

Carlos Rafael Ramirez Points 1201

Vous pouvez utiliser Docker Desktop pour Windows comme moteur et Docker pour Linux comme client dans WSL sur Ubuntu / Debian sur Windows. Connectez-les via TCP.

Installez Docker Desktop pour Windows : https://hub.docker.com/editions/community/docker-ce-desktop-Windows Si vous souhaitez utiliser des conteneurs Windows au lieu de conteneurs Linux, les deux types de conteneurs peuvent être gérés par le client docker Linux dans l'espace utilisateur bash.

Depuis la version 17.03.1-ce-win12 (12058) vous devez vérifier Exposer le démon sur tcp://localhost:2375 sans TLS pour permettre au client Docker Linux de continuer à communiquer avec le démon Docker Windows par TCP

Suivez les étapes suivantes :

cd
wget https://download.docker.com/linux/static/stable/`uname -m`/docker-19.03.1.tgz
tar -xzvf docker-*.tgz
cd docker
./docker -H tcp://0.0.0.0:2375 ps

ou

env DOCKER_HOST=tcp://0.0.0.0:2375 ./docker ps

Pour le rendre permanent :

mkdir ~/bin
mv ~/docker/docker ~/bin

Ajoutez les variables correspondantes au fichier .bashrc

export DOCKER_HOST=tcp://0.0.0.0:2375
export PATH=$PATH:~/bin

Bien sûr, vous pouvez installer docker-compose

sudo -i
curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

Ou en utilisant Python pip

sudo apt-get install python-pip bash-completion
sudo pip install docker-compose

Et l'achèvement du Bash. La meilleure partie :

sudo -i
apt-get install bash-completion
curl -L https://raw.githubusercontent.com/docker/docker-ce/master/components/cli/contrib/completion/bash/docker > /etc/bash_completion.d/docker
curl -L https://raw.githubusercontent.com/docker/compose/$(docker-compose version --short)/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose

Je l'ai testé en utilisant la version 2.1.0.1 (37199) de Docker Desktop en utilisant Hyper-V :

$ docker version
Client: Docker Engine - Community
 Version:           19.03.1
 API version:       1.40
 Go version:        go1.12.5
 Git commit:        74b1e89e8a
 Built:             Thu Jul 25 21:17:37 2019
 OS/Arch:           linux/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          19.03.1
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.12.5
  Git commit:       74b1e89
  Built:            Thu Jul 25 21:17:52 2019
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          v1.2.6
  GitCommit:        894b81a4b802e4eb2a91d1ce216b8817763c29fb
 runc:
  Version:          1.0.0-rc8
  GitCommit:        425e105d5a03fabd737a126ad93d62a9eeede87f
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683
Look both client and server say **OS/Arch: linux/amd64**

Volumes

Faites attention lorsque vous ajoutez des volumes. Le chemin C:\dir sera visible en tant que /mnt/c/dir sur le WSL et en tant que /c/dir/ par le moteur de docker. Vous pouvez le surmonter de façon permanente :

sudo bash -c "echo -e '[automount] \nroot = /'>/etc/wsl.conf"

Vous devez quitter et recharger WSL après avoir fait le changement à wsl.conf pour que WSL lise vos changements au lancement.

アップデイト

de : Nouveautés de la ligne de commande dans la version 1803 de Windows 10

Sockets Unix Les sockets Unix n'étaient pas supportés par Windows, et maintenant ils le sont ! Vous pouvez également communiquer via des sockets Unix entre Windows et WSL. L'un des avantages de cette fonctionnalité est qu'elle permet à WSL d'exécuter le client Docker Linux pour interagir avec le démon Docker sous Windows.

アップデイト

Ce script et l'utilisation de Unix Sockets a été inclus dans Pengwin de pengwin-setup.

Saludos

51voto

Andrew Grimm Points 928

À l'heure actuelle (avril 2016), la réponse est :

Nous ne savons pas encore (mais probablement pas).

Les faits

  • Windows 10 peut désormais exécuter une variété de programmes Linux (entre autres parmi eux le Bash Shell et divers utilitaires de texte). Il ne s'agit pas de ports (c'est-à-dire des versions recompilées, comme par exemple dans Cygwin ), ils sont les mêmes Binaires ELF qui fonctionnent sur un système Linux typique. Dans Dans ce cas, ils ont été pris de Ubuntu.
  • Pour rendre cela possible, Windows 10 a été modifié pour accepter les appels système Linux (syscalls), et pour pouvoir charger et exécuter des binaires ELF ( commentaire de Scott Hanselman ). Cela signifie que les exécutables Linux non modifiés peuvent être exécutés, qu'ils chargeront leurs bibliothèques partagées non modifiées comme requis, et que Windows les exécutera en tant que processus Windows.
  • Lorsqu'un tel programme Linux veut interagir avec le noyau, il émet un appel système (ou laisse une bibliothèque le faire). C'est (vraisemblablement) la seule différence avec l'exécution sur Linux : Sous Linux, le noyau Linux gère ces appels ; sous Windows 10, c'est le noyau Windows 10 qui s'en charge.

La spéculation

La question est donc de savoir si les appels système dont Docker a besoin (pour le chroot et les espaces de noms, entre autres) ont été implémentés ou non. La réponse à cette question est probablement "non". Docker nécessite des fonctionnalités assez sophistiquées (et spécifiques à Linux) pour la gestion des processus et des ressources, et l'isolation des processus. Bien qu'il soit probablement possible de reproduire tout cela sous Windows, cela représenterait beaucoup de travail, et puisque le but de cette fonctionnalité Windows semble être d'exécuter des programmes en espace utilisateur Linux, il semble peu probable qu'ils aient fait tout le travail (et l'aient gardé secret).

Cependant, il n'y a aucune information définitive dans un sens ou dans l'autre, pour autant que je sache.

Ports Docker existants

Bien sûr, si Microsoft décide qu'elle souhaite que Windows 10 prenne en charge Docker, elle sera probablement en mesure de le proposer. Il existe un précédent pour le portage de Docker sur un noyau différent :

  • Il existe un Portage Docker pour FreeBSD . Elle est qualifiée d'"expérimentale", mais semble fonctionner en principe. Il peut utiliser des conteneurs Docker non modifiés provenant du dépôt Docker, ce qui signifie qu'il fournit un environnement hôte de type Linux pour les images.
  • Un projet de portage de Docker sur Windows (plus précisément sur Windows Server 2016) est en cours. Article de blog sur les dockers à partir d'août 2015. Cependant, contrairement au portage FreBSD ci-dessus, il s'agira d'un portage permettant à Docker d'exécuter des images Windows sur Windows, et non des images Linux sur Windows. Merci à Rry McCune de nous l'avoir signalé.

13voto

Florin Asăvoaie Points 6854

Non, ce n'est pas possible.

Docker a besoin de plusieurs choses pour faire fonctionner les conteneurs :

  • chroot
  • Espaces de noms pour :
    • PID
    • Utilisateurs
    • Réseau
    • Supports
    • UTS
    • IPC

Ce sont toutes des fonctionnalités du noyau qui sont implémentées dans Linux. Malheureusement, la plupart d'entre elles n'ont pas de fonctionnalité similaire dans Windows pour les remplacer (ni dans le sous-système Linux que Microsoft a implémenté dans le noyau Windows). Toutes ces fonctions doivent être fournies par le système d'exploitation.

13voto

CodedBeard Points 249

La première preview insider a été publiée hier. J'ai essayé d'installer Docker mais j'ai échoué avec le message suivant : docker fail

Il semblerait donc que pour le premier aperçu, cela ne fonctionne pas actuellement. Cependant, comme de nombreuses personnes l'ont suggéré, il pourrait fonctionner dans une version ultérieure.

7voto

timakro Points 165

A partir du Mise à jour du créateur (publié publiquement le 13 juin 2017), vous pouvez exécuter un exécutable Windows natif directement dans WSL. Cela signifie que si vous avez déjà installé Docker pour Windows vous pouvez simplement invoquer la docker installés sous C:\Program Files . Puisqu'ils se terminent par .exe l'option la plus simple est de créer des alias. Quelque chose comme ce qui suit dans votre .bashrc devrait fonctionner :

DOCKER_BIN='/mnt/c/Program Files/Docker/Docker/resources/bin'
for f in "$DOCKER_BIN"/*; do
  alias "$(basename "$f" | sed 's/.exe$//')"'="'"$f"'"'
done

Cela permet de créer des alias pour tous les fichiers de l'application DOCKER_BIN répertoire :

$ type docker
docker is aliased to `"/mnt/c/Program Files/Docker/Docker/resources/bin/docker.exe"'

$ docker --version
Docker version 17.03.1-ce, build c6d412e

Un bémol : vous obtiendrez un message d'erreur du type " ". Impossible de traduire le répertoire de travail actuel "si elle est exécutée à partir d'un répertoire Linux. Il suffit de cd dans un répertoire Windows (par exemple /mnt/c/Users/YourUsername ) et vous devriez être bon.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X