คุณสามารถเรียกใช้ Docker แบบดั้งเดิมบน Windows 10 (Ubuntu) ใหม่ทุบตีผู้ใช้งานได้หรือไม่?


126

ความเข้าใจของฉันคือข้อ จำกัด หลักของการใช้งานนักเทียบท่าบนระบบปฏิบัติการอื่นคือคอนเทนเนอร์เครือข่าย Linux ที่ทำให้เป็นไปได้ (แน่นอนสำหรับ Macs)

เมื่อเร็ว ๆ นี้Microsoft ประกาศรุ่นเบต้าของโหมดผู้ใช้Ubuntu Linux ที่ทำงานบน Windows 10 ซึ่งสามารถเรียกใช้ไบนารีที่รวบรวมในรูปแบบ ELF บน Windows (ต่างจาก cygwin ซึ่งต้องมีการรวบรวม)

คำถามของฉันคือ: คุณสามารถเรียกใช้ Docker แบบดั้งเดิมบน Windows 10 (Ubuntu) ทุบตีผู้ใช้ใหม่ได้หรือไม่?


4
ไม่ใช่ "เพียงแค่" bashuserspace เป็นพื้นที่ผู้ใช้ Linux ที่สมบูรณ์และเป็นธรรม แต่ไม่มี X Windows เช่นข้อความเท่านั้น พูดว่า "ทุบตี" สื่อสารข้อ จำกัด ข้อความเท่านั้นค่อนข้างดี ..
MSalters

ฉันพลาดอะไรไปหรือเปล่า? สิ่งนี้เกิดขึ้นจริงหรือไม่? ตอนนี้ฉันรู้แค่ว่ามันเป็นไอ
Michael Hampton

2
ฉันคิดว่ามันจะไม่ชัดเจนจนกว่าพวกเขาจะวางจำหน่าย (AFAIK มันยังไม่พร้อมใช้งานสำหรับคนที่อยู่ใน windows) แต่ก็น่าสังเกตว่า Microsoft และ Docker กำลังทำงานเพื่อนำ Docker ไปยัง Windows โดยกำเนิดเพื่อวางจำหน่ายพร้อมกับเซิร์ฟเวอร์ Windows 2016
Rоry McCune

1
@ RоryMcCune: น่าสนใจ อย่างไรก็ตามตามที่เข้าบล็อกนี้เทียบท่าตั้งแต่เดือนสิงหาคมปี 2015 นี้จะเป็นพอร์ตที่ช่วยให้นักเทียบท่าในการทำงานของ Windowsภาพบน Windows, Linux ไม่ได้ภาพบน Windows
sleske

2
แน่นอนว่าเป็นจุดประสงค์ของ Windows native docker ลักษณะของ containerisation คือคุณไม่สามารถเรียกใช้ระบบด้วยเมล็ดอื่นโดยไม่ต้องเพิ่ม virtualisation หรือ (อาจ) ระบบย่อยใหม่นี้ที่ Microsoft กำลังพัฒนา
Rоry McCune

คำตอบ:


103

คุณสามารถใช้ Docker Desktop สำหรับ Windows เป็นเอ็นจิ้นและ Docker สำหรับ Linux เป็นไคลเอนต์ใน WSL บน Ubuntu / Debian บน Windows เชื่อมต่อผ่าน TCP

ติดตั้ง Docker Desktop สำหรับ Windows: https://hub.docker.com/editions/community/docker-ce-desktop-windows หากคุณต้องการใช้ Windows Containers แทน Linux Containers ทั้งสองประเภทสามารถจัดการได้โดยไคลเอนต์ Linux docker ใน bash userspace

ตั้งแต่เวอร์ชัน 17.03.1-ce-win12 (12058) คุณต้องตรวจสอบExpose daemon บน tcp: // localhost: 2375 โดยไม่มี TLSเพื่ออนุญาตให้ไคลเอ็นต์ Linux Docker สื่อสารกับ Windows Docker daemon โดย TCP ต่อไป

ทำตามขั้นตอนเหล่านี้:

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

หรือ

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

วิธีทำให้ถาวร:

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

เพิ่มตัวแปรที่เกี่ยวข้องลงใน. bashrc

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

แน่นอนคุณสามารถติดตั้งนักเทียบท่าได้

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

หรือใช้ไพ ธ ธ

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

และทุบตีเสร็จ ส่วนที่ดีที่สุด:

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

ฉันได้ทำการทดสอบโดยใช้ Docker Desktop เวอร์ชั่น 2.1.0.1 (37199) โดยใช้ 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**

ไดรฟ์

ระวังเมื่อเพิ่มปริมาณ เส้นทางC:\dirจะมองเห็นได้เช่นเดียว/mnt/c/dirกับใน WSL และตาม/c/dir/โดยนักเทียบท่าเครื่องยนต์ คุณสามารถเอาชนะมันได้อย่างถาวร:

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

คุณต้องออกและโหลด WSL อีกครั้งหลังจากทำการเปลี่ยนแปลงเป็น wsl.conf เพื่อให้ WSL อ่านการเปลี่ยนแปลงของคุณเมื่อเริ่มต้น

UPDATE

จาก: มีอะไรใหม่สำหรับ Command Line ใน Windows 10 เวอร์ชั่น 1803

Unix Sockets Unix Sockets ไม่ได้รับการสนับสนุนบน Windows และตอนนี้ก็คือ! คุณสามารถสื่อสารผ่านซ็อกเก็ต Unix ระหว่าง Windows และ WSL หนึ่งในสิ่งที่ยอดเยี่ยมเกี่ยวกับสิ่งนี้คือมันช่วยให้ WSL สามารถรันไคลเอ็นต์ Linux Docker เพื่อโต้ตอบกับ Docker Daemon ที่ทำงานบน Windows

UPDATE

สคริปต์นี้และการใช้ระบบปฏิบัติการยูนิกซ์ Sockets ถูกรวมอยู่ในPengwin pengwin การติดตั้ง 's

ความนับถือ


3
สวัสดี @ joel-pearson นักเทียบท่ามีสองส่วน: เครื่องยนต์และไคลเอนต์ เครื่องยนต์ทำงานใน Windows โดยใช้ Docker Toolbox (VirtualBox based) หรือ Docker สำหรับ Windows (Hyper-V based) ทั้งสองได้รับการสนับสนุนอย่างเป็นทางการจากทีมนักเทียบท่า เอ็นจิ้นนักเทียบท่ายังไม่ทำงานในพื้นที่ของผู้ใช้ทุบตี ไคลเอ็นต์ Docker ใน windows สามารถเรียกใช้ใน cmd, powershell หรือ cygwin สิ่งที่คำตอบนี้บอกคือวิธีการเรียกใช้ไคลเอนต์นักเทียบท่าใน bash userspace ทำไม? ส่วนตัวฉันชอบทุบตีงานเสร็จสมบูรณ์ ฉันยอมรับว่าคำถามนั้นเกี่ยวกับเอ็นจิ้นนักเทียบท่า แต่ฉันพบว่าเมื่อฉันกำลังมองหาลูกค้าและหลายคนก็ทำเช่นเดียวกัน
Carlos Rafael Ramirez

1
ฉันเพิ่งทดสอบและใช้งานได้กับฉันเมื่อวันที่ 1.12 :) ตื่นเต้นเป็นอย่างยิ่งที่ตอนนี้สามารถพัฒนาบน Windows ได้อย่างจริงจัง
Zach Russell

2
ลองทำตามคำแนะนำของคุณใน Bash บน Ubuntu บน Windows ได้รับ "ไม่สามารถเชื่อมต่อกับ Docker daemon ได้หรือไม่ Docker daemon ทำงานบนโฮสต์นี้หรือไม่" คุณพลาดขั้นตอนบางอย่างหรือไม่?
mpen

5
เมื่อวันที่กุมภาพันธ์ 2560 นี้ยังคงเป็นวิธีเดียว
hdave

3
หลังจากมิถุนายน 2017 คุณสามารถเรียกใช้นักเทียบท่าสำหรับ Windows executables จากเปลือกทุบตี แทนที่จะติดตั้งไคลเอ็นต์ docker คุณสามารถใช้docker.exeโดยตรงเพื่อเคียวรี / โต้ตอบระบบย่อย docker อย่างไรก็ตามโปรดทราบว่าตัวเทียบท่าสำหรับ windows จะใช้ตัวแปร windows และการตั้งค่าคอนฟิก
Jaime

51

ณ ตอนนี้ (เมษายน 2559) คำตอบคือ:

เรายังไม่รู้ (แต่อาจไม่)

ข้อเท็จจริง

  • Windows 10 สามารถรันโปรแกรม Linux ได้หลากหลาย (ในบรรดาพวกเขาคือ Bash shell และยูทิลิตี้ข้อความต่าง ๆ ) สิ่งเหล่านี้ไม่ใช่พอร์ต (เช่นรุ่นที่คอมไพล์แล้วเช่นในCygwin ) เป็นเอลฟ์ไบนารีเดียวกันที่ทำงานบนระบบ Linux ทั่วไป ในกรณีนี้พวกเขาถูกพรากไปจาก Ubuntu
  • เพื่อให้สามารถดำเนินการได้ Windows 10 ได้รับการปรับเปลี่ยนให้รองรับการเรียกระบบ Linux (syscalls) และสามารถโหลดและเรียกใช้ไบนารีของ ELF ( แสดงความเห็นโดย Scott Hanselman ) ซึ่งหมายความว่าสามารถเรียกใช้โปรแกรมปฏิบัติการ Linux ที่ไม่มีการแก้ไขได้พวกเขาจะโหลดไลบรารีที่ใช้ร่วมกันที่ไม่ได้แก้ไขตามต้องการและ Windows จะเรียกใช้งานเป็นกระบวนการ Windows
  • เมื่อใดก็ตามที่โปรแกรมลีนุกซ์ต้องการโต้ตอบกับเคอร์เนล, มันจะออกสายระบบ (หรือให้ไลบรารี่ทำ) นี่คือความแตกต่างเพียงอย่างเดียวของการเรียกใช้บน Linux: เมื่อทำงานบน Linux เคอร์เนล Linux จัดการสายเหล่านี้ บน Windows 10 เคอร์เนล Windows 10 ทำได้แทน

การเก็งกำไร

ดังนั้นคำถามคือว่า syscalls ที่ Docker ต้องการ (สำหรับ chroot และ namespaces, ในสิ่งอื่น ๆ ) ถูกนำไปใช้หรือไม่ คำตอบคือมีแนวโน้มว่า "ไม่" นักเทียบท่าต้องการฟังก์ชันการทำงานที่ซับซ้อน (และเฉพาะ Linux) สำหรับการจัดการกระบวนการและทรัพยากรและการแยกกระบวนการ แม้ว่ามันอาจเป็นไปได้ที่จะทำซ้ำสิ่งเหล่านี้บน Windows แต่มันก็เป็นงานจำนวนมากและเนื่องจากเป้าหมายของฟีเจอร์ Windows นี้ดูเหมือนว่าจะใช้งานโปรแกรม Linux userspace แต่ดูเหมือนว่าพวกเขาไม่ได้ทำงานทั้งหมด (และเก็บเป็นความลับ) .

อย่างไรก็ตามไม่มีข้อมูลที่ชัดเจนอย่างใดอย่างหนึ่งเท่าที่ฉันสามารถบอกได้

พอร์ต Docker ที่มีอยู่

แน่นอนถ้า Microsoft ตัดสินใจว่าพวกเขาต้องการการสนับสนุน Docker ใน Windows 10 พวกเขาอาจจะสามารถให้การสนับสนุนได้ มีตัวอย่างก่อนหน้าสำหรับการย้ายพอร์ต Docker ไปยังเคอร์เนลที่แตกต่างกัน:

  • มีความเป็นพอร์ตเทียบท่าสำหรับ FreeBSD มันมีข้อความว่า "ทดลอง" แต่ดูเหมือนว่าจะทำงานในหลักการ มันสามารถใช้คอนเทนเนอร์ Docker ที่ไม่ได้แก้ไขจากคลังเก็บ Docker ซึ่งหมายความว่ามันให้สภาพแวดล้อมโฮสต์เหมือน Linux สำหรับรูปภาพ
  • มีโครงการกำลังดำเนินการสำหรับการย้ายพอร์ต Docker เป็น Windows (โดยเฉพาะ Windows Server 2016) - ดูรายการบล็อก Dockerนี้ตั้งแต่เดือนสิงหาคม 2558 อย่างไรก็ตามไม่เหมือนกับพอร์ต FreBSD ด้านบนนี้จะเป็นพอร์ตที่ช่วยให้ Docker สามารถเรียกใช้รูปภาพ Windows บน Windows ได้ ไม่ใช่อิมเมจ Linux บน Windows ขอบคุณRоry McCune ที่ชี้เรื่องนี้ออกมา

1
อัปเดต: มีบทความในหัวข้อเกี่ยวกับบล็อก MSDN ที่คล้ายขณะนี้: ระบบย่อย Windows สำหรับภาพรวมของลินุกซ์
sleske

ณ วันนี้มันเป็นไปได้ด้วย Hyper-V: tutorials.ubuntu.com/tutorial/…
นิค Sweeting

ฉัน downvoted เพียงเพราะคำตอบที่โหวตสูงกว่ามีประโยชน์มากขึ้นแล้วการเก็งกำไรในสิ่งที่อาจจะเป็นมันครอบคลุมสิ่งที่เป็น
James

13

ภาพตัวอย่างวงในคนแรกได้รับการปล่อยตัวเมื่อวานนี้ ฉันพยายามติดตั้งนักเทียบท่า แต่มันล้มเหลวด้วยสิ่งต่อไปนี้: นักเทียบท่าล้มเหลว

ดังนั้นมันจะปรากฏว่าสำหรับการแสดงตัวอย่างครั้งแรกมันไม่ทำงาน อย่างไรก็ตามในขณะที่หลายคนคาดการณ์มันอาจทำงานในรุ่นอนาคต


5
เป็นความคิดที่ดีที่จะลองสิ่งนี้ สิ่งหนึ่ง: คุณช่วยเพิ่มข้อความของหน้าจอเป็นข้อความจริงได้ไหม (เทอร์มินัล Ubuntu รองรับการคัดลอกและวาง) ข้อความ "จริง" มีประโยชน์มากมาย (ง่ายต่อการอ่านสนับสนุนโปรแกรมอ่านหน้าจอที่สามารถรวบรวมข้อมูลโดยเครื่องมือค้นหา)
sleske

การอัปเดตบางอย่าง: ฉันสามารถติดตั้งนักเทียบท่าบนเครื่องของฉันเพื่อใช้การอัปเดตครบรอบปีสุดท้ายได้อย่างสมบูรณ์ แต่ทำdocker psล้มเหลวด้วย: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

ดูเหมือนว่าจะใช้งานได้ตอนนี้: tutorials.ubuntu.com/tutorial/…
นิค Sweeting

13

ไม่เป็นไปไม่ได้

นักเทียบท่าต้องการหลายสิ่งเพื่อใช้งานคอนเทนเนอร์:

  • chroot
  • เนมสเปซสำหรับ:
    • PID
    • ผู้ใช้
    • เครือข่าย
    • เมาท์
    • UTS
    • IPC

นี่คือคุณสมบัติเคอร์เนลทั้งหมดที่นำมาใช้ใน Linux น่าเสียดายที่ส่วนใหญ่ไม่มีคุณลักษณะที่คล้ายกันใน Windows เพื่อใช้แทน (หรือในระบบย่อย Linux ที่ Microsoft ใช้ในเคอร์เนล Windows) สิ่งเหล่านี้จำเป็นต้องได้รับจากระบบปฏิบัติการ


4
ที่จริงแล้ว Windows มี namespaces สำหรับผู้ใช้ Mounts และ IPC เนมสเปซผู้ใช้เป็นสิ่งจำเป็นสำหรับ Active Directory, เนมสเปซเมานต์และเนมสเปซ IPC เป็นสิ่งจำเป็นสำหรับการดำเนินการหลายผู้ใช้ โดยพื้นฐานแล้วเคอร์เนล Object Manager ใน Windows มักจะมีเนมสเปซอยู่เสมอตั้งแต่การเปิดตัว Windows NT ครั้งแรกดังนั้นจึงไม่ใช่เรื่องแปลก
MSalters

3
และด้วยบริการเดสก์ท็อประยะไกลวัตถุเซสชันจะใช้เนมสเปซเหล่านี้เพื่อให้การทำงานพร้อมกันเป็นไปอย่างกระตือรือร้น ไม่ได้หมายความว่าคุณมีโครงสร้างพื้นฐานที่จำเป็นทั้งหมด แต่มีส่วนสำคัญอยู่ที่นั่น สำหรับchrootตระหนักดีว่าสภาพแวดล้อมของ Ubuntu มีรูตที่แตกต่างจากวินโดวส์ 32 อยู่แล้ว
MSalters

6
จริงๆแล้วฉันคิดว่ามันเร็วเกินไปที่จะตอบคำถามนี้ ตามที่อธิบายไว้ในความคิดเห็นโดย Scott Hanselmanเคอร์เนล Windows 10 ในขณะนี้ยอมรับ Linux syscalls ดังนั้นคำถามคือการนำ syscalls ที่ Docker ต้องการ (สำหรับ chroot และ namespaces) มาใช้หรือไม่ ในขณะที่คำตอบน่าจะเป็น "ไม่" ไม่มีข้อมูลที่ชัดเจนทั้งสองวิธีเท่าที่ฉันสามารถบอกได้
sleske

1
@sleske ถูกต้องคำถามนี้ไม่สามารถตอบได้ในขณะนี้และพูดว่า "ไม่เป็นไปไม่ได้" หากไม่มีการบ่งชี้ที่แท้จริงของสิ่งที่ devs ทำงานบนพื้นที่ลินุกซ์ในหญิงม่ายนั้นขึ้นอยู่กับสถานการณ์
Ryan

2
ฉันไม่รู้ว่าจะตอบด้วยความมั่นใจว่าคำตอบนี้ผิดทั้งหมด แต่วิธีการใช้คำพูดทำให้ฉันสงสัยในความถูกต้องของมันเล็กน้อย โดยเฉพาะอย่างยิ่งการระบุ "Bash เป็นโปรแกรมพื้นที่ผู้ใช้ที่ง่ายและไม่สามารถให้สิ่งเหล่านี้ได้" และอ้างถึง Window Subsystem สำหรับ Linux ว่า ​​"คุณสมบัติ Bash ใหม่" ทำให้ดูเหมือนว่าคำตอบนี้ขึ้นอยู่กับสมมติฐานที่ผิดทั้งหมดที่ Microsoft ทำ เป็นพอร์ตทุบตีกับ Windows นั่นไม่ใช่สิ่งที่เกิดขึ้น พวกเขาพัฒนาส่วนต่อประสานเคอร์เนล Linux ที่ทำงานอยู่ด้านบนของเคอร์เนล Windows: msdn.microsoft.com/en-us/commandline/wsl/about
Ajedi32

7

ในฐานะของผู้อัปเดตผู้สร้าง (เผยแพร่สู่สาธารณะในวันที่ 13 มิถุนายน 2017) คุณสามารถเรียกใช้ Windows แบบปฏิบัติการได้โดยตรงใน WSL ซึ่งหมายความว่าถ้าคุณได้ติดตั้งแล้วหางสำหรับ Windowsคุณสามารถเรียกไบนารีติดตั้งภายใต้docker C:\Program Filesเนื่องจากพวกเขาสิ้นสุดใน.exeตัวเลือกที่ง่ายที่สุดคือการสร้างชื่อแทน สิ่งต่อไปนี้ที่คุณ.bashrcควรทำงาน:

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

สิ่งนี้จะสร้างนามแฝงสำหรับไฟล์ทั้งหมดในDOCKER_BINไดเรกทอรี:

$ 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

ข้อแม้หนึ่ง: คุณจะได้รับข้อความแสดงข้อผิดพลาดเช่น " ไม่สามารถแปลไดเรกทอรีทำงานปัจจุบัน " หากเรียกใช้จากไดเรกทอรี Linux เพียงแค่cdเป็นไดเรกทอรี Windows (เช่น/mnt/c/Users/YourUsername) และคุณควรจะดี


นี่ดูเหมือนจะไม่รับตัวแปรสภาพแวดล้อมของ bash ในไฟล์ YML ของนักเทียบท่า ความคิดใด ๆ
Rüdiger Schulz

1
มันสมเหตุสมผลแล้วเนื่องจากคุณเรียกใช้dockerไบนารีWindows และทำผ่านเชลล์ลินุกซ์ ฉันไม่แน่ใจว่ามีวิธีที่ดีที่จะทำให้สำเร็จหรือไม่
dimo414

6

เมื่อปล่อย Docker 1.12 และไคลเอ็นต์ Linux Docker ถูกแยกคุณควรจะสามารถรันไคลเอ็นต์ docker ใน Windows 10 bash

สิ่งนี้อาจฟังดูไม่ค่อยดีนักเมื่อคุณมีไคลเอ็นต์ Docker Windows แต่มันมีประโยชน์ถ้าคุณมี toolchains ของ Linux ที่มีตัวเชื่อมต่อสำหรับการทำงานของฝั่งไคลเอ็นต์


4

ใน Windows 10 เวอร์ชัน 1607 Build 1493.10 คุณสามารถติดตั้งบน Ubuntu Bash ได้สำเร็จ แต่มันไม่ทำงาน :(

"นักเทียบท่ารุ่น" ที่เรียบง่ายจะบอกคุณ:

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?

หากคุณเรียกใช้ "sudo docker -d" คุณจะได้รับข้อผิดพลาดต่อไปนี้:

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

ดังนั้นนี่คือจุกจากด้าน bash

อย่างไรก็ตามคุณสามารถติดตั้งDocker สำหรับ Windowsและทำงานได้อย่างมีเสน่ห์คุณสามารถปรับใช้เซิร์ฟเวอร์ Linux และทุกสิ่งที่คุณต้องการ

> 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

ข้อมูล ณ เดือนกันยายน 2559 เลขที่

การนำไปปฏิบัติในปัจจุบันทั้งหมดของนักเทียบท่าบน Windows ใช้ virtualisation นักเทียบท่า 1.12 ใช้ไฮเปอร์ไวเซอร์ใน Windows - ดังนั้นจึงเป็นการเอาข้อได้เปรียบของ containerisation ผ่าน virtualisation

นักเทียบท่าต้องการมากกว่าแค่การใช้การเรียกระบบ Linux

มันต้องการกลุ่มควบคุมกระบวนการ (cgroups), ระบบไฟล์แบบซ้อนได้ (aufs), รวมถึงระบบที่ใช้ Linux อื่น ๆ นอกเคอร์เนล

cgroups หรือ aufs นั้นไม่มีอยู่ในเคอร์เนลของ Windows 10

มีการใช้งาน Windows Server 2016 ที่นี่: https://msdn.microsoft.com/en-gb/virtualization/windowscontainers/quick_start/quick_start_windows_server .. แต่สิ่งนี้จะเรียกใช้บริการ Windows บางอย่างเท่านั้นเช่น IIS ไม่ใช่ Ubuntu


2

นักเทียบท่าในปัจจุบันไม่สามารถใช้งานได้ในบิลด์ปัจจุบัน (14316) โดยถือว่าคุณสามารถติดตั้งได้

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

น่ากลัว! โปรดลองอีกครั้ง
ฮ็อคอาย

ดูเหมือนว่านี่อาจเกี่ยวข้องกับการทำงานของการจัดสรรหน่วยความจำใน golang (ซึ่งนักเขียนนั้นเขียนไว้ที่ใด): groups.google.com/forum/#!msg/golang-dev/EpUlHQXWykg/…
Timothy Meade

ฉันเพิ่งแฮงค์ตลอดไปหลังจากคำสั่ง
wieczorek1990

1

จาก: 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
นี่คือความจริงที่ว่าตอนนี้คุณสามารถรันไคลเอ็นต์ docker สำหรับ linux ใน bash ได้ดังนั้นหลีกเลี่ยงการใช้ PowerShell หากคุณไม่ได้ใช้
Carlos Rafael Ramirez

1
มันจะน่าสนใจที่จะดูว่าพวกมันเพิ่มขนาดขึ้นเป็นนักเทียบท่า
ฮ็อคอาย
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.