Bisakah Anda menjalankan Docker secara native Di Ruang pengguna bash Windows 10 (Ubuntu) yang baru?

Pemahaman saya adalah bahwa batasan utama menjalankan docker di OS lain adalah wadah Jaringan Linux yang memungkinkannya. (Tentu saja untuk Mac).

Baru-baru ini Microsoft mengumumkan beta dari A Ubuntu linux mode pengguna berjalan secara native di Windows 10. Ini dapat menjalankan binari yang dikompilasi dalam format ELF di Windows (tidak seperti cygwin yang membutuhkan Kompilasi.)

Pertanyaan saya adalah: Bisakah Anda menjalankan Docker secara native Di Ruang pengguna bash Windows 10 (Ubuntu) yang baru?

Anda dapat menggunakan Docker Desktop untuk Windows sebagai mesin dan Docker untuk Linux sebagai klien di Wsl di Ubuntu / Debian di Windows. Hubungkan mereka melalui TCP.

Instal Docker Desktop untuk Windows: https://hub.docker.com/editions/community/docker-ce-desktop-windowsJika Anda ingin menggunakan wadah Windows alih-alih wadah Linux, kedua jenis wadah dapat dikelola oleh klien Docker Linux di ruang pengguna bash.

Sejak versi 17.03.1-ce-win12 (12058) Anda harus memeriksa Mengekspos daemon pada tcp: / / localhost: 2375 tanpa TLS untuk memungkinkan klien Docker Linux untuk terus berkomunikasi dengan daemon Docker Windows oleh TCP

Ikuti langkah-langkah berikut:

cdwget https://download.docker.com/linux/static/stable/`uname -m`/docker-19.03.1.tgztar -xzvf docker-*.tgzcd docker./docker -H tcp://0.0.0.0:2375 ps

atau

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

Untuk membuatnya permanen:

mkdir ~/binmv ~/docker/docker ~/bin

Tambahkan variabel yang sesuai ke .bashrc

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

Tentu saja, Anda dapat menginstal docker-compose

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

Atau menggunakan python pip

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

Dan Bash selesai. Bagian terbaik:

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

Saya telah mengujinya menggunakan versi 2.1.0.1 (37199) dari Docker Desktop menggunakan Hyper-V:

$ docker versionClient: 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:      falseServer: 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:        fec3683Look both client and server say **OS/Arch: linux/amd64**

Volume

Berhati-hatilah saat menambahkan volume. The path C:\dir akan terlihat sebagai /mnt/c/dir pada WSL dan as /c/dir/ dengan docker engine. Anda dapat mengatasinya secara permanen:

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

Anda harus keluar dan reload WSL setelah membuat perubahan ke Wsl.conf sehingga Wsl membaca perubahan Anda saat peluncuran.

Pembaruan

dari: Apa yang baru untuk baris perintah di Windows 10 versi 1803

Unix Sockets Soket Unix tidak didukung pada Windows, dan sekarang mereka! Anda juga dapat berkomunikasi melalui soket Unix antara Windows dan WSL. Salah satu hal hebat tentang ini adalah memungkinkan WSL untuk menjalankan klien Docker Linux untuk berinteraksi dengan Daemon Docker yang berjalan di Windows.

Pembaruan

Script ini dan penggunaan soket Unix termasuk dalam Pengwinpengwin-setup.

Salam

Sampai sekarang (April 2016) Jawabannya adalah:

Kami belum tahu (tapi mungkin tidak).

Fakta

  • Windows 10 sekarang dapat menjalankan berbagai program Linux (di antara mereka shell Bash dan berbagai utilitas teks). Ini bukan port (yaitu versi yang dikompilasi ulang, seperti misalnya di Cygwin), mereka adalah sama Binari ELF yang berjalan pada sistem Linux yang khas. Dalam kasus ini, mereka diambil dari Ubuntu.
  • Untuk membuat ini mungkin, Windows 10 dimodifikasi untuk menerima panggilan sistem Linux( syscalls), dan untuk dapat memuat dan menjalankan binari ELF (komentar oleh Scott Hanselman). Ini berarti executable Linux yang tidak dimodifikasi dapat dijalankan, mereka akan memuat pustaka bersama yang tidak dimodifikasi sesuai kebutuhan, dan Windows akan menjalankannya sebagai proses Windows.
  • Setiap kali program Linux seperti itu ingin berinteraksi dengan kernel, ia mengeluarkan panggilan sistem (atau membiarkan Perpustakaan melakukannya). Ini (mungkin) satu-satunya perbedaan untuk berjalan di Linux: ketika berjalan di Linux, kernel Linux menangani panggilan tesis; pada Windows 10, kernel Windows 10 melakukannya sebagai gantinya.

Spekulasi

Jadi pertanyaannya adalah apakah syscalls yang dibutuhkan Docker (untuk chroot dan namespace, antara lain) diimplementasikan atau tidak. Jawabannya adalah bahwa kemungkinan "tidak". Docker membutuhkan fungsionalitas yang cukup canggih (dan khusus Linux) untuk proses dan manajemen sumber daya, dan isolasi proses. Meskipun mungkin untuk mereplikasi semua ini di Windows, itu akan menjadi banyak pekerjaan, dan karena tujuan dari fitur Windows ini tampaknya menjalankan Program Ruang pengguna Linux, tampaknya tidak mungkin mereka melakukan semua pekerjaan (dan merahasiakannya).

Namun, tidak ada informasi pasti, sejauh yang saya tahu.

Port Docker yang ada

Tentu saja, jika Microsoft memutuskan mereka menginginkan dukungan Docker di Windows 10, mereka mungkin dapat menawarkannya. Ada beberapa preseden untuk porting Docker ke kernel yang berbeda:

  • Ada Port Docker untuk FreeBSD. Hal ini diberi label "eksperimental", tetapi dalam tampaknya bekerja pada prinsipnya. Itu dapat menggunakan wadah Docker yang tidak dimodifikasi dari repositori Docker, yang berarti Itu benar-benar menyediakan lingkungan host seperti Linux untuk gambar.
  • Ada proyek yang sedang berlangsung untuk porting Docker ke Windows (khususnya, Windows Server 2016) - lihat ini Entri blog Docker dari Agustus 2015. Namun, tidak seperti port FreBSD di atas, ini akan menjadi port yang memungkinkan Docker menjalankan gambar Windows di Windows, bukan gambar Linux di Windows. Terima kasih kepada Rory McCune untuk menunjukkan hal ini.

Tidak, ini tidak mungkin.

Docker membutuhkan banyak hal untuk menjalankan kontainer:

  • chroot
  • Ruang nama untuk:
    • PID
    • Pengguna
    • Jaringan
    • Mounts
    • UTS
    • IPC

Ini semua adalah fitur kernel yang diimplementasikan di Linux. Sayangnya, kebanyakan dari mereka tidak memiliki fitur serupa di Windows untuk digunakan sebagai pengganti (atau di subsistem Linux yang diterapkan Microsoft di kernel Windows). Semua ini perlu disediakan oleh OS.

Pratinjau orang dalam pertama dirilis kemarin. Saya telah mencoba menginstal docker tetapi gagal dengan yang berikut:

Jadi akan muncul, bahwa untuk pratinjau pertama saat ini tidak berfungsi. Namun seperti banyak orang berspekulasi, mungkin bekerja di masa mendatang.

Pada Pembaruan Pembuat (dirilis secara publik pada 13 Juni 2017) Anda dapat menjalankan Windows asli yang dapat dieksekusi langsung di Wsl. Ini berarti Jika Anda sudah menginstal Docker untuk Windows Anda hanya dapat memanggil docker binari diinstal di bawah C:\Program Files. Karena mereka berakhir di .exe opsi termudah adalah membuat alias. Sesuatu seperti berikut di Anda .bashrc harus bekerja:

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

Hal ini menciptakan alias untuk semua file dalam DOCKER_BIN direktori:

$ type dockerdocker is aliased to `"/mnt/c/Program Files/Docker/Docker/resources/bin/docker.exe"'$ docker --versionDocker version 17.03.1-ce, build c6d412e

Satu peringatan: Anda akan mendapatkan pesan kesalahan seperti "Tidak dapat menerjemahkan direktori kerja saat ini"jika dijalankan dari direktori Linux. Hanya cd ke direktori Windows (mis. /mnt/c/Users/YourUsername) dan Anda harus baik.

Setelah Docker 1.12 dirilis dan klien Docker Linux dipisahkan, Anda harus dapat menjalankan docker klien di Windows 10 bash.

Ini mungkin tidak terdengar seperti banyak mengingat Anda memiliki klien Windows Docker tetapi ini berguna jika Anda memiliki toolchain Linux yang menyertakan docker untuk fungsionalitas sisi kliennya.

Di Windows 10 versi 1607 Build 1493.10 Anda dapat berhasil menginstalnya di Ubuntu Bash, tetapi tidak bekerja :(

"Versi docker" sederhana akan memberi tahu Anda:

Client version: 1.6.2Client API version: 1.18Go version (client): go1.2.1Git commit (client): 7c8fca2OS/Arch (client): linux/amd64FATA[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?

Jika Anda kemudian menjalankan "sudo docker-d" Anda mendapatkan kesalahan berikut:

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

Jadi ini jelas merupakan stopper dari sisi bash.

Namun demikian, Anda dapat menginstal Docker untuk Windows dan itu berfungsi seperti pesona, Anda jelas dapat menggunakan server Linux dan semua yang anda butuhkan.

> docker versionClient: 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/amd64Server: 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

Pada September 2016, Tidak.

Semua implementasi Docker saat ini di Windows menggunakan virtualisasi, Docker 1.12 menggunakan hypervisor di Windows-sehingga menghilangkan keuntungan containerisation dibandingkan virtualisasi.

Docker membutuhkan lebih dari sekadar menggunakan Panggilan Sistem Linux.

Dibutuhkan process control groups (cgroups), stackable filesystem (aufs), ditambah sistem berbasis Linux lainnya di luar kernel.

Baik cgroups maupun aufs tidak ada di kernel Windows 10.

Ada implementasi Windows Server 2016 di sini: https://msdn.microsoft.com/en-gb/virtualization/windowscontainers/quick_start/quick_start_windows_server ..tapi ini hanya akan menjalankan beberapa layanan Windows, misalnya IIS, dan bukan Ubuntu

Docker saat ini tidak berfungsi di build saat ini (14316) - dengan asumsi Anda bisa menginstalnya.

root@localhost:~# docker --helpruntime: address space conflict: map(0x7ff5ddbb0000) = 0x7ff5ffd20000fatal error: runtime: address space conflict

Dari: https://blog.docker.com/2016/07/docker-for-mac-and-windows-production-ready/

Faster and more reliable – native development environment usinghypervisors built into each operating system. (No more VirtualBox!)

Ini bukan" hanya " ruang pengguna bash. Ini adalah ruang pengguna Linux yang nyata dan cukup lengkap, tetapi tanpa X Windows yaitu hanya teks. Mengatakan" bash " mengkomunikasikan batasan teks saja dengan cukup baik…

memang itulah tujuan dari Windows native docker. Sifat kontainerisasi adalah Anda tidak dapat menjalankan sistem dengan kernel lain, tanpa menambahkan beberapa virtualisasi atau (mungkin) subsistem baru yang sedang dikembangkan Microsoft

Saya pikir itu tidak akan jelas sampai mereka merilis ini (AFAIK itu bahkan belum tersedia untuk Windows insiders) namun perlu dicatat bahwa Microsoft dan Docker sedang berupaya membawa Docker ke Windows secara asli, untuk dirilis bersama Windows server 2016

@ RoryMcCune: Menarik. Namun, menurut [entri blog Docker ini] (https://blog.docker.com/2015/08/tp-docker-engine-windows-server-2016/) mulai Agustus 2015, ini akan menjadi port yang memungkinkan Docker menjalankan gambar windows di Windows, bukan gambar Linux di Windows.

Untuk sistem GNU untuk berjalan pada kernel Windows tentu mungkin. Ini akan menjadi banyak pekerjaan untuk pergeseran kualitas yang sangat lateral. Saya akan terkejut jika itu terjadi, atau jika orang mengadopsinya.

Apa aku melewatkan sesuatu? Apakah ini benar-benar didistribusikan? Saat ini saya hanya tahu itu sebagai vaporware.

Terkait: kesalahan docker: /var/run/docker.sock: tidak ada file atau direktori seperti itu.

Apakah mungkin untuk menjalankan Windows docker image pada instance ubuntu aws ? atau ada beberapa alternatif ? …akar @ ip-172-31-22-20:~/docker / windows# docker tarik microsoft / nanoserver
Menggunakan tag default: terbaru
Terbaru: Menarik dari microsoft / nanoserver
bce2fbc256ea: menarik lapisan fs
4806a44e00a0: menarik lapisan fs
sistem operasi gambar “windows” tidak dapat digunakan pada platform ini
akar @ ip-172-31-22-20:~/docker / windows#