Ma compréhension était que la principale limitation de l'exécution de docker sur d'autres systèmes d'exploitation était les conteneurs du réseau Linux qui rendaient cela possible. (Certainement pour les Mac).
Récemment Microsoft a annoncé une version bêta d'un bunt linux mode utilisateur fonctionnant nativement sur Windows 10. Cela peut exécuter des binaires compilés au format ELF sur Windows (contrairement à cygwin qui nécessite une compilation.)
Ma question est: Pouvez-vous exécuter Docker en mode natif sur le nouvel espace utilisateur bash de Windows 10 (Ubuntu)?
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é par le client docker Linux dans l'espace utilisateur bash.
Depuis la version 17.03.1-ce-win12 (12058), vous devez cocher Exposer le démon sur tcp: // localhost: 2375 sans TLS pour autoriser Linux Docker client pour continuer à communiquer avec le démon Windows Docker par TCP
Suivez ces étapes:
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 à .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 de 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 avec 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
Soyez prudent lors de l'ajout de volumes. Le chemin C:\dir
sera visible comme /mnt/c/dir
sur WSL et comme /c/dir/
par moteur 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 apporté la modification à wsl.conf afin que WSL lise vos modifications au lancement.
[~ # ~] mise à jour [~ # ~]
de: Quoi de neuf pour la ligne de commande dans Windows 10 version 18
Sockets Unix Les sockets Unix n'étaient pas pris en charge sous Windows, et maintenant ils le sont! Vous pouvez également communiquer sur des sockets Unix entre Windows et WSL. L'une des grandes choses à ce sujet est qu'il permet à WSL d'exécuter le client Docker Linux pour interagir avec le démon Docker exécuté sur Windows.
[~ # ~] mise à jour [~ # ~]
Ce script et l'utilisation des sockets Unix ont été inclus dans la configuration pengwin de Pengwin .
Cordialement
En ce moment (avril 2016), la réponse est:
Nous ne savons pas encore (mais probablement pas).
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 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'isolement des processus. Bien qu'il soit probablement possible de répliquer tout cela sur Windows, ce serait beaucoup de travail, et puisque l'objectif de cette fonctionnalité Windows semble exécuter des programmes d'espace utilisateur Linux, il semble peu probable qu'ils aient fait tout le travail (et l'ont gardé secret) .
Cependant, il n'y a aucune information définitive de toute façon, pour autant que je sache.
Bien sûr, si Microsoft décide de vouloir la prise en charge de Docker dans Windows 10, il sera probablement en mesure de l'offrir. Il existe un précédent pour le portage de Docker vers un autre noyau:
Le premier aperçu d'initié a été publié hier. J'ai essayé d'installer Docker mais il échoue avec les éléments suivants:
Il semblerait donc que pour le premier aperçu, cela ne fonctionne pas actuellement. Cependant, comme beaucoup de gens l'ont spéculé, cela pourrait fonctionner dans une prochaine version.
Non, ce n'est pas possible.
Docker a besoin de plusieurs choses pour exécuter des conteneurs:
Ce sont toutes les fonctionnalités du noyau qui sont implémentées sous Linux. Malheureusement, la plupart d'entre eux n'ont pas de fonctionnalité similaire dans Windows à utiliser en remplacement (ni dans le sous-système Linux que Microsoft a implémenté dans le noyau Windows). Tous ces éléments doivent être fournis par le système d'exploitation.
Depuis le Creator Update (publié publiquement le 13 juin 2017), vous pouvez exécuter l'exécutable Windows natif directement dans WSL. Cela signifie que si vous avez déjà installé Docker pour Windows vous pouvez simplement appeler les binaires 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 marcher:
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 crée des alias pour tous les fichiers dans le 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
Une mise en garde: vous obtiendrez un message d'erreur comme " Impossible de traduire le répertoire de travail actuel " s'il est exécuté à 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.
Une fois Docker 1.12 publié et le client Linux Docker séparé, vous devriez pouvoir exécuter le docker client dans Windows 10 bash.
Cela peut ne pas sembler beaucoup étant donné que vous avez un client Docker Windows, mais c'est utile si vous avez des chaînes d'outils Linux qui incluent Docker pour ses fonctionnalités côté client.
Dans Windows 10 Version 1607 Build 1493.10, vous pouvez l'installer avec succès sur Ubuntu Bash, mais cela ne fonctionne pas: (
Une simple "version docker" vous dira:
Client version: 1.6.2
Client API version: 1.18
Go version (client): go1.2.1
Git commit (client): 7c8fca2
OS/Arch (client): linux/AMD64
FATA[0000] Get http:///var/run/docker.sock/v1.18/version: dial unix /var/run/docker.sock: setsockopt: invalid argument. Are you trying to connect to a TLS-enabled daemon without TLS?
Si vous exécutez ensuite "Sudo docker -d", vous obtenez l'erreur suivante:
FATA[0000] ERROR: You are running Linux kernel version 3.4.0+, which is unsupported for running Docker. Please upgrade your kernel to 3.8+.
C'est donc définitivement un bouchon du côté bash.
Néanmoins, vous pouvez installer Docker pour Windows et cela fonctionne comme un charme, vous pouvez évidemment déployer des serveurs Linux et tout ce dont vous avez besoin.
> docker version
Client:
Version: 1.12.0
API version: 1.24
Go version: go1.6.3
Git commit: 8eab29e
Built: Thu Jul 28 21:15:28 2016
OS/Arch: windows/AMD64
Server:
Version: 1.12.0
API version: 1.24
Go version: go1.6.3
Git commit: 8eab29e
Built: Thu Jul 28 21:15:28 2016
OS/Arch: linux/AMD64
En septembre 2016, non.
Toutes les implémentations actuelles de Docker sur Windows utilisent la virtualisation, Docker 1.12 utilise un hyperviseur dans Windows, supprimant ainsi l'avantage de la conteneurisation sur la virtualisation.
Docker a besoin de plus que de simples appels aux systèmes Linux.
Il a besoin de groupes de contrôle de processus (cgroups), d'un système de fichiers empilable (aufs), ainsi que d'autres systèmes basés sur Linux en dehors du noyau.
Ni les cgroups ni les aufs ne sont nativement dans le noyau Windows 10.
Il existe une implémentation de Windows Server 2016 ici: https://msdn.Microsoft.com/en-gb/virtualization/windowscontainers/quick_start/quick_start_windows_server ..mais cela ne fonctionnera que certains services Windows, par exemple IIS, et non Ubuntu
Docker ne fonctionne pas actuellement dans la version actuelle (14316) - en supposant que vous puissiez l'installer.
root@localhost:~# docker --help
runtime: address space conflict: map(0x7ff5ddbb0000) = 0x7ff5ffd20000
fatal error: runtime: address space conflict
De: https://blog.docker.com/2016/07/docker-for-mac-and-windows-production-ready/
Faster and more reliable – native development environment using
hypervisors built into each operating system. (No more VirtualBox!)