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


126

Benim fikrim, diğer işletim sistemlerinde liman işçisi çalıştırmanın birincil sınırlamasının, bunu mümkün kılan Linux Ağı kapları olduğuydu. (Kesinlikle Mac'ler için).

Son zamanlarda Microsoft , Windows 10'da yerel olarak çalışan bir Ubuntu linux kullanıcı modunun beta sürümünü duyurdu . Bu, Windows'ta ELF biçiminde derlenmiş ikilileri çalıştırabilir (derleme gerektiren cygwin'in aksine).

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


4
Kullanıcı bashalanı "sadece" değil . Gerçek, oldukça eksiksiz bir Linux kullanıcı alanıdır, ancak yalnızca X Windows yani metin değildir. "Bash"
demek

Bir şey mi kaçırdım? Bu gerçekten dağıtıldı mı? Şu anda sadece buhar yazılımı olarak biliyorum.
Michael Hampton,

2
Ben ancak, Microsoft ve Docker Windows server 2016 ile birlikte tahliye edilecek, doğal Windows Docker getirerek üzerinde çalışıyoruz dikkati çekiyor bu (AFAIK o henüz pencereler içeriden bile müsait değil) serbest bırakana kadar açık olmayacak düşünüyorum
Rоry McCune

1
@ RоryMcCune: İlginç. Ancak, Ağustos 2015’teki bu Docker blog girişine göre, bu Docker’ın Windows’taki Windows resimlerini değil Windows’da Windows resimlerini çalıştırmasını sağlayan bir bağlantı noktası olacak .
sleske

2
Gerçekten de, Windows yerel liman işçisi amacı. Konteynerizasyon doğası siz ya (muhtemelen) bazı sanallaştırma Microsoft geliştiriyoruz bu yeni alt sistemi eklemeden, diğer çekirdekler ile sistemlerini koşamam ki
Rоry McCune

Yanıtlar:


103

Windows için Docker Masaüstü'nü motor olarak ve Linux için Docker'ı Windows'taki Ubuntu / Debian'da WSL'de istemci olarak kullanabilirsiniz. Onları TCP ile bağlayın.

Windows için Docker Masaüstü'nü yükleyin: https://hub.docker.com/editions/community/docker-ce-desktop-windows Linux Konteynerleri yerine Windows Konteynerleri kullanmak istiyorsanız, her iki tür konteyner de Linux liman işçisi istemcisi tarafından yönetilebilir. bash kullanıcı alanı.

17.03.1-ce-win12 (12058) sürümünden bu yana , Linux Docker istemcisinin Windows Docker daemon ile TCP ile iletişim kurmaya devam etmesini sağlamak için TLS'siz Explo daemon'u tcp: // localhost: 2375'de kontrol etmelisiniz

Bu adımları takip et:

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

veya

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

Kalıcı yapmak 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

Tabii ki, docker-compose yükleyebilirsiniz

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

Veya python pip kullanarak

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

Ve Bash tamamlama. 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

Doper Desktop’ın 2.1.0.1 (37199) sürümünü Hyper-V kullanarak test ettim:

$ 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**

Cilt

Cilt eklerken dikkatli olun. Yol , WSL'deki ve docker motorundaki gibi C:\dirgörünecektir . Kalıcı olarak üstesinden gelebilirsin:/mnt/c/dir/c/dir/

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

Wsl.conf dosyasında değişiklik yaptıktan sonra WSL'den çıkıp yeniden yüklemelisiniz, böylece WSL başlatılırken değişikliklerinizi okur.

GÜNCELLEME

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

Unix Soketleri Unix Soketleri Windows'ta desteklenmiyordu ve şimdi onlar! Ayrıca, Windows ve WSL arasındaki Unix soketleri üzerinden de iletişim kurabilirsiniz. Bununla ilgili en güzel şeylerden biri, WSL'nin Windows'ta çalışan Docker Daemon ile etkileşimde bulunmak için Linux Docker İstemcisi'ni çalıştırmasını sağlamaktır.

GÜNCELLEME

Bu senaryo ve Unix Sockets kullanımı, Pengwin'in pengwin kurulumuna dahil edildi .

Saygılarımızla


3
Merhaba @ joel-pearson, liman işçisi iki bölümden oluşur: motor ve müşteri. Motor, her ikisi de resmi olarak docker ekibi tarafından desteklenen Docker Toolbox (VirtualBox tabanlı) veya Windows için Docker (Hyper-V tabanlı) kullanarak pencerelerde çalışır. Docker motoru henüz bash kullanıcı alanında çalışmıyor. Windows’taki Docker istemcisi cmd, powershell veya cygwin’de çalıştırılabilir. Bu cevabın söylediği şey, liman kullanıcısını bash kullanıcı alanında çalıştırmanın yoludur. Neden? Şahsen ben bash'ı tercih ederim, tamamlanma işe yarıyor. Sorunun liman motoruyla ilgili olduğunu kabul ediyorum, ancak müşteriyi ararken bunu gördüm ve birçok kişi de aynısını yaptı.
Carlos Rafael Ramirez

1
Sadece test ettim ve benim için 1.12'de çalışıyor :) Pencerelerde ciddi bir gelişme gösterebildiğim için çok heyecanlıyım.
Zach Russell

2
Talimatlarınızı Windows'ta Ubuntu'daki Bash'de denedim, "Docker arka planına bağlanılamıyor. Docker arka plan programı bu ana bilgisayarda çalışıyor mu?" Bazı adımları mı özlüyorsun?
16’da

5
Şubat 2017 itibariyle, bu hala tek yol.
saat

3
Haziran 2017'den sonra, Windows için docker'ı bash kabuğundan çalıştırabilirsiniz . Liman işçisi istemcisini kurmak yerine, liman docker.exeişçisi alt sistemini sorgulamak / etkileşimde bulunmak için doğrudan kullanabilirsiniz . Ancak, Windows docker'ın Windows değişkenlerini ve yapılandırmalarını kullanacağını unutmayın.
Jaime

51

Şu an itibariyle (Nisan 2016) cevap:

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

Gerçekler

  • Windows 10 şimdi çeşitli Linux programlarını çalıştırabilir (bunların arasında Bash kabuğu ve çeşitli metin programları). Bunlar (örneğin gibi, yani çekirdekler versiyonları portları olmayan Cygwin , bunlar aynıdır) ELF ikili tipik bir Linux sistemlerinde çalışabilir. Bu durumda Ubuntu'dan alındı.
  • Bunu mümkün kılmak için Windows 10, Linux Sistem çağrılarını (sistem çağrıları) kabul edecek ve ELF ikili dosyalarını yükleyip çalıştırabilecek ( Scott Hanselman'ın yorumu ) olarak değiştirildi. Bu, değiştirilmemiş Linux çalıştırılabilir dosyalarının çalıştırılabileceği, değiştirilmemiş paylaşılan kitaplıkların gerektiği gibi yükleneceği ve Windows'un Windows işlemleri olarak çalıştırılacağı anlamına gelir.
  • Ne zaman böyle bir Linux programı çekirdekle etkileşime girmek isterse, sistem çağrısı yapar (veya bir kütüphanenin yapmasına izin verir). Bu, (muhtemelen) Linux'ta çalıştırmanın tek farkı şudur: Linux'ta çalıştırırken, Linux çekirdeği tez çağrılarını gerçekleştirir; Windows 10'da, bunun yerine Windows 10 çekirdeği yapar.

Spekülasyon

Bu yüzden soru Docker'ın ihtiyaç duyduğu sistem çağrılarının (chroot ve ad alanları için, diğer şeylerin yanı sıra) uygulanıp uygulanmadığıdır. Bunun cevabı muhtemelen "hayır" dır. Docker, işlem ve kaynak yönetimi ve işlem yalıtımı için oldukça karmaşık (ve Linux'a özgü) işlevler gerektirir. Bunların hepsini Windows'ta çoğaltmak mümkün olsa da, çok fazla iş olacaktı ve bu Windows özelliğinin amacı Linux kullanıcı alanı programları çalıştırıyor gibi göründüğü için, tüm işi yapmış olmaları muhtemel görünüyor (ve bunu gizli tutuyorlardı) .

Ancak, söyleyebileceğim kadarıyla hiçbir şekilde kesin bilgi yok.

Mevcut Docker bağlantı noktaları

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

  • FreeBSD için bir Docker bağlantı noktası var . "Deneysel" olarak etiketlenmiş, ancak ilke olarak çalışıyor görünüyor. Docker deposundaki değiştirilmemiş Docker kapsayıcılarını kullanabilir, yani görüntüler için Linux benzeri bir ana bilgisayar ortamı sağlar.
  • Docker’ı Windows’a taşıma işlemi için bir proje var (özellikle, Windows Server 2016) - Ağustos 2015’teki Docker blog girişine bakın . Ancak, yukarıdaki FreBSD bağlantı noktasının aksine, Docker’ın Windows’da Windows görüntülerini Windows’ta çalıştırmasını sağlayan bir bağlantı noktası olacaktır. Windows'ta Linux görüntüleri değil. Bunu işaret ettiği için Rоry McCune'a teşekkürler.

1
Güncelleme: Artık bir MSDN blogunda konu hakkında bir makale var: Linux için Windows Alt Sistemi .
sleske

Bugün itibariyle Hyper-V ile mümkün: tutorials.ubuntu.com/tutorial/…
Nick Sweeting

Oyları düşürdüm, çünkü yüksek oy kullanmada verilen cevap, ne olabileceğine dair spekülasyonlardan daha yararlı, çünkü ne olduğunu kapsar.
James

13

İlk içeriden önizleme dün yayımlandı. Liman işçisi yüklemeye çalıştım, ancak aşağıdakilerle başarısız oluyor: liman işçisi başarısız

Öyle görünüyor ki, ilk önizleme için şu anda çalışmıyor. Ancak, birçok insanın tahmin ettiği gibi, gelecek sürümlerde çalışabilir.


5
Bunu denemek için iyi bir fikir. Bir şey: Lütfen ekran görüntüsünün metnini asıl metin olarak ekleyebilir misiniz (Ubuntu terminali kopyala ve yapıştır özelliğini destekler). "Gerçek" metin çok sayıda avantaja sahiptir (okunması kolay, ekran okuyucuları destekler, arama motorları tarafından taranabilir)
sleske

Bazı güncellemeler: Son yıldönümü güncellemesini çalıştıran makineme docker'ı tamamen yükleyebildim. Ancak docker psbaşarısızlıkla sonuçlanır: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?
kumarharsh 13

Şimdi çalışıyor gibi görünüyor: tutorials.ubuntu.com/tutorial/…
Nick Sweeting

13

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

Docker'ın konteynerleri çalıştırmak için birden çok şeye ihtiyacı var:

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

Bunların hepsi Linux'ta uygulanan çekirdek özellikleridir. Ne yazık ki, bunların çoğu Windows'ta değiştirme olarak kullanmak için benzer bir özelliğe sahip değildir (ya da Microsoft'un Windows çekirdeğinde uyguladığı Linux Alt Sisteminde). Bütün bunlar işletim sistemi tarafından sağlanmalıdır.


4
Aslında, Windows Kullanıcılar, Bağlar ve IPC için ad alanlarına sahiptir. Active Directory için kullanıcı ad alanları, çoklu kullanıcı işlemleri için mount ad alanları ve IPC ad alanları gerekir. Temel olarak, Windows'taki çekirdek Nesnesi Yöneticisi her zaman ilk Windows NT sürümünden itibaren ad alanlarına sahipti, bu yüzden garip değil.
MSalters,

3
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 ana kısımlar oradadır. Gelince chroot, Ubuntu ortam zaten Wın32 farklı bir köke sahip olduğunu biliyoruz.
MSalters

6
Aslında, bence her iki şekilde de cevap vermek için çok erken. Scott Hanselman'ın yorumunda açıklandığı gibi , Windows 10 çekirdeği şimdi Linux sistem çağrılarını kabul ediyor. Bu yüzden soru Docker'ın ihtiyaç duyduğu sistem çağrıları (chroot ve ad alanları için) uygulanıp uygulanmadığıdır. Cevap muhtemelen "hayır" olsa da, söyleyebileceğim kadarıyla hiçbir şekilde kesin bilgi yoktur.
sleske

1
@sleske haklı, bu soru şu anda cevaplandırılmıyor ve dullardaki linux uzayda çalışan devlerin ne yaptığının gerçek bir göstergesi olmadan "yapamazsın" diyerek oldukça küstah.
Ryan,

2
Bu cevabın tamamen yanlış olduğunu güvenle söyleyebilecek kadar bilgim yok, ancak cümlecik biçimi beni geçerliliğinden biraz şüpheci kılıyor. Özellikle "Bash basit bir kullanıcı alanı programıdır ve bunlardan hiçbirini sağlayamaz" diyerek ve Linux için Windows Alt Sistemine "yeni Bash özelliği" olarak atıfta bulunarak, bu cevabın Microsoft’un yaptığı tüm yanlış varsayımlara dayandığını söyler. Windows’a bağlantı noktası oldu. Öyle olmadı. Windows çekirdeğinin üzerinde çalışan bir Linux çekirdeği arabirimi geliştirdiler: msdn.microsoft.com/en-us/commandline/wsl/about
Ajedi32

7

İtibariyle Oluşturan Güncellemesi (13 Haziran 2017 tarihinde kamuya yayımlanan) Eğer WSL doğrudan çalıştırılabilir yerli Windows'u çalıştırabilir. Bunun anlamı eğer Windows için Docker'ı daha önce kurduysanız , dockeraltında kurulu olan ikili dosyaları çağırabilirsiniz C:\Program Files. .exeEn kolay seçenekle sona erdiklerinden, takma adlar oluşturmaktır. Aşağıdaki gibi bir şey .bashrcçalışması gerekir:

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, DOCKER_BINdizindeki tüm dosyalar için takma adlar oluşturur :

$ 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ı: Linux dizininden çalıştırıldığında " Geçerli çalışma dizini çevrilemiyor " gibi bir hata mesajı alırsınız . Sadece cdbir Windows dizinine (örneğin /mnt/c/Users/YourUsername) ve iyi olmalısın.


Bu, bash ortam değişkenlerini docker-compose YML dosyalarına aktarmıyor gibi görünüyor. Bunun hakkında bir fikrin var mı?
Rüdiger Schulz

1
Bu, Windows dockerikiliyi çağırdığınızdan ve bunu sadece Linux kabuğuyla yaptığınız için anlamlıdır . Bunu başarmanın iyi bir yolu olup olmadığından emin değilim.
dimo414

6

Docker 1.12 piyasaya sürüldüğünde ve Linux Docker istemcisi ayrıldıktan sonra, docker istemcisini Windows 10 bash'ta çalıştırabilmelisiniz .

Bu, bir Docker Windows istemcisine sahip olduğunuz gibi görünmeyebilir, ancak istemci tarafı işlevselliği için docker içeren Linux araç zincirleriniz varsa kullanışlıdır.


4

Windows 10 Version 1607 Build 1493.10’da Ubuntu Bash’e başarıyla yükleyebilirsiniz, ancak çalışmaz :(

Basit bir "liman işçisi" 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?

Daha sonra "sudo docker -d" komutunu ç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 durdurucu.

Bununla birlikte, Windows için Docker'ı yükleyebilirsiniz ve bir cazibe işlevi görür, açıkça Linux Sunucularını ve ihtiyacınız olan her şeyi 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

Eylül 2016 itibariyle, No.

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

Docker'ın Linux sistem çağrılarını kullanmaktan daha fazlasına ihtiyacı var.

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

Ne gruplar, ne de auflar yerel olarak Windows 10 çekirdeğindedir.

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ıracak, örneğin, IIS ve Ubuntu değil


2

Docker şu anda geçerli derlemede çalışmıyor (14316) - kurulu olduğunu varsayarsak.

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

Korku veren! Lütfen denemeye devam et.
Hawkeye

Bu, bellek tahsisatının Golang'da (Docker'da yazıldığı) nasıl çalıştığıyla ilgili gibi görünebilir: groups.google.com/forum/#!msg/golang-dev/EpUlHQXWykg/…
Timothy Meade

Mine komuttan sonra sonsuza dek kilitleniyor.
wieczorek1990

1

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!)

2
Bu, şimdi bash olarak linux için liman işçisi istemcisini çalıştırabileceğiniz, bu nedenle kullanmayacaksanız PowerShell kullanmaktan kaçınmanız,
Carlos Rafael Ramirez

1
Bunu liman işçisi kümesine kadar ölçeklendirdiklerini görmek ilginç olacak.
Hawkeye
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.