Soru Docker'ı yeni Windows 10 (Ubuntu) bash kullanıcı alanında yerel olarak çalıştırabilir misiniz?


Anladığım kadarıyla, çalışan docker'ın diğer işletim sistemlerinde birincil kısıtlaması, bunu mümkün kılan Linux Ağ kaplarıydı. (Kesinlikle Mac'ler için).

Son günlerde Microsoft duyurdu bir beta Ubuntu linux Kullanıcı modu Windows 10 üzerinde yerel olarak çalışıyor. Bu, Windows'da ELF formatında derlenen ikili dosyaları çalıştırabilir (derleme gerektiren cygwin'den farklı olarak).

Sorum şu: Docker'ı yeni Windows 10 (Ubuntu) bash kullanıcı alanında yerel olarak çalıştırabilir misiniz?


121
2018-04-04 10:16


Menşei


Bu "sadece" değil bash Kullanıcı alanı. Bu gerçek, oldukça eksiksiz bir Linux kullanıcı alanıdır, ancak X Windows ve sadece metin içermez. "Bash" deyince, salt metin sınırlaması oldukça iyi anlaşılır. - MSalters
Bir şey mi kaçırdım? Bu gerçekten dağıtılmış mıydı? Şu anda sadece vaporware olarak biliyorum. - Michael Hampton♦
Bunu açıklayana kadar açık olmayacağını düşünüyorum (AFAIK, şu an içerdekiler için bile mevcut değil) ancak Microsoft ve Docker'ın Windows Server 2016 ile birlikte piyasaya sürülmek üzere Docker'ı Windows'a getirmeye çalıştıklarına dikkat etmeliyiz. - Rоry McCune
@ RоryMcCune: İlginç. Ancak, göre Bu Docker blog girişi Ağustos 2015'ten itibaren, bu Docker'ın çalışmasına izin veren bir bağlantı noktası olacak , Windows Windows'daki resimler, Windows'ta Linux görüntüleri değil. - sleske
aslında Windows yerli docker'ın amacı budur. Konteynerleşmenin doğası, bazı sanallaştırma veya (muhtemelen) Microsoft'un geliştirdiği bu yeni alt sistemi eklemeden, diğer çekirdeklerle sistemleri çalıştıramayacağınızdır. - Rоry McCune


Cevaplar:


Şu an itibariyle (Nisan 2016) cevap:

Henüz bilmiyoruz (ama muhtemelen değil).

Gerçekler

  • Windows 10 artık çeşitli Linux programlarını çalıştırabilir (bunlar arasında Onları Bash kabuğu ve çeşitli metin araçları). Bunlar bağlantı noktası değil (örneğin, yeniden derlenmiş versiyonlar, örneğin Cygwin), onlar aynısı ELF ikili dosyaları Bu tipik bir Linux sistemi üzerinde çalışır. İçinde Bu dava, Ubuntu'dan alındı.
  • Bunu mümkün kılmak için Windows 10, Linux Sistem çağrılarını kabul etmek için (syscalls) ve ELF ikili dosyalarını yükleyip çalıştırabilmek için değiştirildi (yorum yapan: Scott Hanselman). Bu, değiştirilmemiş Linux yürütücülerinin çalıştırılabileceği anlamına gelir, değiştirilmemiş paylaşılan kitaplıkları gerektiği gibi yükler ve Windows bunları Windows işlemleri olarak çalıştırır.
  • Böyle bir Linux programı, çekirdekle etkileşime girmek istediğinde, bir sistem çağrısı yapar (ya da bir kütüphanenin bunu yapmasına izin verir). Bu (muhtemelen) Linux'ta koşmanın tek farkı: Linux üzerinde çalışırken, Linux çekirdeği, tezlerin üstesinden gelir; Windows 10'da, Windows 10 çekirdeği bunun yerine yapar.

Spekülasyon

Bu yüzden soru, Docker'ın ihtiyaç duyduğu (chroot ve namespaces, diğer şeyler arasında) sistemlerin uygulanıp uygulanmadığıdır. Cevap, muhtemelen "hayır" dır. Docker, süreç ve kaynak yönetimi ve süreç yalıtımı için oldukça karmaşık (ve Linux'a özgü) bir işlevsellik gerektirir. Tüm bunları Windows üzerinde çoğaltmak mümkün olsa da, çok fazla iş olurdu ve bu Windows özelliğinin amacı Linux kullanıcı programlarını çalıştırıyor gibi göründüğü için, tüm işleri yapmaları pek mümkün görünmüyor (ve bunu gizli tutuyorlardı). .

Ancak, anlatabildiğim kadarıyla hiçbir şekilde kesin bir bilgi yoktur. 

Mevcut Docker portları

Tabii ki, Microsoft Windows 10'da Docker desteğini istediğine karar verirse, muhtemelen bunu sunabileceklerdir. Docker'ı farklı bir çekirdeğe taşımak için bazı emsaller var:

  • Var FreeBSD için docker portu. Bu "deneysel" olarak etiketlenmiştir, ancak prensipte çalışmak gibi görünüyor. Değiştirilmemiş Docker kapsayıcılarını Docker deposundan kullanabilir, yani resimler için Linux benzeri bir ana bilgisayar ortamı sağlar.
  • Docker'ı Windows'a (özellikle Windows Server 2016) taşımak için bir proje var. Docker blog girişi Bununla birlikte, Ağustos 2015'ten itibaren, yukarıdaki FreBSD bağlantı noktasından farklı olarak, Docker'ın Windows üzerinde Windows görüntüleri değil, Windows'daki görüntüleri çalıştırmasına izin veren bir bağlantı noktası olacaktır. Bunu işaret ettiği için Rоry McCune'a teşekkürler.

50
2018-04-05 07:15



Güncelleme: Şu anda bir MSDN blogunda konuyla ilgili bir makale var: Linux için Windows Alt Sistemine Genel Bakış. - sleske
Bugün itibariyle Hyper-V ile mümkün: tutorials.ubuntu.com/tutorial/... - Nick Sweeting
Basitçe reddettim çünkü daha yüksek oy veren cevap daha kullanışlı olabilir, o zaman ne olabileceğini spekülasyon, ne olduğunu kapsar. - James


Windows için Docker for Windows'u, Ubuntu'daki Bash istemcisi olarak Linux için Docker ve Linux için Docker'ı kullanabilirsiniz. TCP yoluyla bağlayın.

Windows için Docker'ı yükle: https://docs.docker.com/docker-for-windows/ Windows Containers yerine Linux Containers kullanmak istiyorsanız, her iki tipte kapsayıcılar, bash kullanıcı alanında linux docker istemcisi tarafından yönetilebilir.

17.03.1-ce-win12 (12058) versiyonundan beri kontrol etmelisiniz TLC'siz tcp: // localhost: 2375 üzerindeki daemon'u açığa çıkarın linux docker istemcisinin TCP ile windows docker daemon ile iletişim kurmaya devam etmesi için

Bu adımları takip et:

cd
wget https://download.docker.com/linux/static/stable/x86_64/docker-18.06.1-ce.tgz
tar -xzvf docker-*.tgz
cd docker
./docker -H tcp://0.0.0.0:2375 ps

veya

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

Kalıcı hale getirmek için:

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

İlgili değişkenleri .bashrc'ye ekleyin.

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

Elbette docker-compose'u yükleyebilirsiniz.

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

Ya da python pip kullanarak

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

Ve Bash tamamlanması. En iyi kısım:

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

Hyper-V kullanarak Windows için Docker for 18.06.0-ce-win59 (19098) sürümünü kullanarak test ettim:

~$ docker version
Client:
 Version:           18.06.0-ce
 API version:       1.38
 Go version:        go1.10.3
 Git commit:        0ffa825
 Built:             Wed Jul 18 19:04:39 2018
 OS/Arch:           linux/amd64
 Experimental:      false

Server:
 Engine:
  Version:          18.06.0-ce
  API version:      1.38 (minimum version 1.12)
  Go version:       go1.10.3
  Git commit:       0ffa825
  Built:            Wed Jul 18 19:13:46 2018
  OS/Arch:          linux/amd64
  Experimental:     true

İstemciye ve sunucuya bak OS / Arch: linux / amd64

Cilt

Hacim eklerken dikkatli olun. Yol C:\dir görülebilir /mnt/c/dir WSL ve olarak /c/dir/ docker motoru tarafından. Kalıcı olarak üstesinden gelebilirsiniz:

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

WSL'yi değiştirdikten sonra WSL'den çıkmalı ve yeniden yüklemelisiniz. Böylece WSL, lansmandaki değişiklikleriniz için okur.

GÜNCELLEŞTİRME

dan: Windows 10 sürüm 1803'te Komut Satırı için yenilikler nelerdir?

Unix Yuvaları   Unix Sockets, Windows'ta desteklenmedi ve şimdi onlar! Windows ve WSL arasındaki Unix soketleri üzerinden de iletişim kurabilirsiniz. Bununla ilgili en önemli şeylerden biri, WSL'nin Windows'ta çalışan Docker Daemon ile etkileşimde bulunmak için Linux Docker İstemcisini çalıştırmasına olanak tanımasıdır.

Saygılarımızla


99
2017-07-19 22:05



Merhaba @ joel-pearson, docker iki bölümden oluşur: motor ve müşteri. Motor, docker takımı tarafından resmi olarak desteklenen Docker Toolbox (VirtualBox tabanlı) veya Docker for Windows (Hyper-V tabanlı) kullanarak pencerelerde çalışır. Docker motoru, henüz kullanıcı alanı alanında çalışmaz. Pencerelerde Docker istemcisi cmd, powershell veya cygwin olarak çalıştırılabilir. Bu cevabın söyleyeceği şey, bash kullanıcısı alanında docker istemcisini çalıştırmanın yoludur. Niye ya? Şahsen bash'ı tercih ederim, tamamlama işe yarıyor. Sorunun docker motoruyla ilgili olduğunu kabul ediyorum, ancak müşteriyi aradığımda buldum ve birçok insan aynı şeyi yapıyor. - Carlos Rafael Ramirez
Ben sadece test ettim ve 1.12'de benim için çalışıyor :) Süper şimdi Windows'da ciddi bir gelişme yapmak için heyecanlı. - Zach Russell
Windows'ta Ubuntu'daki Bash'deki talimatlarınızı denedim, "Docker daemon'una bağlanamıyor. Bu sunucuda çalışan docker sunucusu mu?" Bazı adımlar eksik mi? - mpen
Şubat 2017 itibariyle, bu hala tek yoldur. - hdave
Haziran 2017’den sonra koş windows için docker bash kabuktan çalıştırılabilir. Docker istemcisini yüklemek yerine, docker.exe docker alt sistemini sorgulamak / etkileşmek için doğrudan. Ancak, windows için docker pencereleri değişkenleri ve yapılandırmaları kullanacağını unutmayın. - Jaime


İlk içeriğin önizlemesi dün yayınlandı. Docker'ı yüklemeyi denedim ancak aşağıdakilerle başarısız oluyor: docker fail

Görünüşe göre, ilk önizleme için şu anda çalışmıyor. Ancak, birçok kişi speküle ettiği gibi, gelecekte yayınlanacak bir sürümde çalışabilir.


12
2018-04-07 10:29



Cool - Denediğiniz için teşekkürler! - Hawkeye
Bunu gerçekten denemek için iyi bir fikir. Bir şey: Lütfen ekranın metnini gerçek metin olarak ekleyebilir misiniz (Ubuntu terminali kopyala & yapıştır destekliyor). "Gerçek" metin çok sayıda avantajı vardır (okumak daha kolay, ekran okuyucuları destekler, arama motorları tarafından taranabilir) - sleske
Bazı güncellemeler: Son yıldönümü güncellemesini çalıştıran makinemde docker'ı tamamen yükleyebildim. Ama yapmak docker ps ile başarısız olur: Get http:///var/run/docker.sock/v1.18/containers/json: dial unix /var/run/docker.sock: setsockopt: invalid argument. Are you trying to connect to a TLS-enabled daemon without TLS? - kumar_harsh
Şimdi çalışıyor gibi görünüyor: tutorials.ubuntu.com/tutorial/... - Nick Sweeting


Hayır, bu mümkün değil.

Docker'ın konteynırları çalıştırmak için birden fazla şeye ihtiyacı var:

  • chroot
  • İsim alanları:
    • PID
    • Kullanıcılar
    • Mounts
    • UTS
    • IPC

Bunlar Linux'ta uygulanan tüm çekirdek özelliklerdir. Ne yazık ki, çoğu Windows'da benzer bir özelliğe sahip değil (Windows çekirdeğinde Microsoft'un uyguladığı Linux Alt Sisteminde). Tüm bunların işletim sistemi tarafından sağlanması gerekir.


11
2018-04-04 10:21



Aslında, Windows Kullanıcıları, Bağlantıları ve IPC için ad alanlarına sahip. Active Directory için kullanıcı ad alanları gereklidir, çok kullanıcılı işlemler için mount ad alanları ve IPC ad alanları gereklidir. Temel olarak, Windows'daki çekirdek Nesne Yöneticisi'nin her zaman ilk Windows NT sürümünden ad alanları vardı, bu yüzden bu garip değil. - MSalters
Uzak Masaüstü Hizmetleri ile Oturum nesneleri, eşzamanlı işlem sağlamak için bu ad alanlarını aktif olarak kullanır. Bu, gerekli tüm altyapıya sahip olduğunuz anlamına gelmez, ancak büyük parçalar var. Gelince chrootUbuntu ortamının zaten WIN32 olandan farklı bir kökü olduğunu fark edin. - MSalters
Aslında, bu şekilde cevaplamak için çok erken olduğunu düşünüyorum. Açıklandığı gibi Scott Hanselman'ın bir yorumuWindows 10 çekirdeği artık Linux sistemlerini kabul ediyor. Yani soru, Docker'ın ihtiyaç duyduğu (chroot ve namespaces) syscallların uygulanıp uygulanmadığıdır. Cevap muhtemelen "hayır" iken, anlatabildiğim kadarıyla hiçbir şekilde kesin bir bilgi yoktur. - sleske
@sleske haklı, bu soru şu anda yanıtlanmıyor ve dullardaki linux uzayda çalışan devlerin ne olduğunu tam olarak göstermeden "hayır o olamaz" diyerek oldukça ihtişamlı. - Ryan
Bu cevabın tamamen yanlış olduğuna dair güvenle söyleyeceğim kadar bilgim yok, ama bu şekilde ifade edilme şekli bana geçerliliğinden biraz kuşku duyuyor. Özellikle "Bash basit bir kullanıcı uzay programıdır ve bunlardan herhangi birini sağlayamaz" ve Linux için Pencere Alt Sistemine atıfta bulunarak "yeni Bash özelliği" ifadesinin bu yanıtın tüm Microsoft'un yaptığı tamamen yanlış varsayımdan kaynaklandığını söyler Windows için liman bash oldu. Bu böyle olmadı. Windows çekirdeğinin üstünde çalışan bir Linux çekirdek arayüzü geliştirdiler: msdn.microsoft.com/en-us/commandline/wsl/about - Ajedi32


İtibariyle İçerik Güncelleme (13 Haziran 2017'de herkese açık olarak yayınlanmıştır), yerel Windows çalıştırıcısını doğrudan WSL'de çalıştırabilirsiniz. Bu, zaten yüklediyseniz demektir Windows için Docker basitçe docker altında yüklü ikili dosyalar C:\Program Files. Bittikleri için .exe En kolay seçenek takma ad oluşturmaktır. Aşağıdaki gibi bir şey .bashrc çalışmalı:

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

Bu, içindeki tüm dosyalar için takma adlar oluşturur. DOCKER_BINdizin:

$ 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

Bir uyarı: "gibi bir hata mesajı alırsınız"Geçerli çalışma dizinini çeviremiyor"Linux dizininden çalıştırılırsa. Sadece cd bir Windows dizinine (ör. /mnt/c/Users/YourUsername) ve iyi olmalısın.


6
2018-06-22 06:02



Bu, bash ortam değişkenlerini docker-compose YML dosyalarına almak için görünmüyor. Bunun için bir fikrin var mı? - Rüdiger Schulz
Bu, Windows’u çağırdığın için mantıklı. docker ikili ve Linux kabuğundan bunu yapıyor. Bunu başarmanın iyi bir yolu olup olmadığından emin değilim. - dimo414


Docker 1.12 piyasaya sürüldüğünde ve Linux Docker istemcisi ayrıldıktan sonra, docker'ı çalıştırabilmeniz gerekir. müşteri Windows 10'da bash.

Bu bir Docker Windows istemciniz varsa çok fazla ses gelmeyebilir, ancak istemci tarafı işlevselliği için docker içeren Linux araçlarına sahipseniz yararlıdır.


5
2018-04-29 09:31





Windows 10 Sürüm 1607 Yapı 1493.10'da Ubuntu Bash üzerinde başarıyla yükleyebilirsiniz, ancak çalışmıyor :(

Basit bir "docker versiyonu" size söyleyecektir:

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?

Sonra "sudo docker -d" çalıştırırsanız, aşağıdaki hatayı alırsınız:

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+.

Yani bu kesinlikle bash tarafında bir stoper.

Yine de yükleyebilirsiniz Windows için Docker ve çekicilik gibi çalışır, Linux Sunucularını ve ihtiyacınız olan her şeyi açık bir şekilde dağıtabilirsiniz.

> 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

3
2017-08-12 21:38





Eylül 2016 itibariyle Hayır.

Docker on Windows'daki tüm güncel uygulamalar sanallaştırmayı kullanıyor, Docker 1.12 Windows'da bir hipervizör kullanıyor, bu da sanallaştırma üzerinden kapsayıcılığın avantajını ortadan kaldırıyor.

Docker, Linux sistem çağrılarını kullanmaktan daha fazlasına ihtiyaç duyuyor.

İşlem kontrol gruplarına (cgroups), bir yığın dosya sistemine (auf) ve çekirdeğin dışındaki diğer Linux tabanlı sistemlere ihtiyaç duyar.

Ne gruplar ne de auflar, Windows 10 çekirdeğinde yer almaz.

Burada Windows Server 2016'nın bir uygulaması var: https://msdn.microsoft.com/en-gb/virtualization/windowscontainers/quick_start/quick_start_windows_server .. ama bu sadece bazı Windows servislerini çalıştıracaktır, ör. IIS ve Ubuntu değil


2
2017-09-05 13:15





Docker şu an mevcut yapıda çalışmıyor (14316) - yükleyebileceğinizi varsayarak.

root@localhost:~# docker --help
runtime: address space conflict: map(0x7ff5ddbb0000) = 0x7ff5ffd20000
fatal error: runtime: address space conflict

1
2018-04-12 20:47



Korku veren! Lütfen denemeye devam et. - Hawkeye
Görünüşe göre bu, bellek tahsisinin golang'da nasıl çalıştığıyla ilgili olabilir (Docker'ın yazıldığı yer): groups.google.com/forum/#!msg/golang-dev/EpUlHQXWykg/... - Timothy Meade
Benimki emirden sonra tamamen askıda kalıyor. - wieczorek1990


Gönderen: 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!)

0
2017-08-03 12:20



Bu, şimdi bash'ta linux için docker istemcisini çalıştırabileceğiniz gerçeğiyle tamamlanır, bu nedenle eğer kullanmıyorsanız PowerShell'i kullanmaktan kaçının. - Carlos Rafael Ramirez
Bunları docker sürüsüne göre ölçeklendirmek ilginç olacak. - Hawkeye