שאלה האם אתה יכול להפעיל את docker באופן מקורי על Windows 10 חדש (אובונטו) באש למשתמשים?


ההבנה שלי היתה כי המגבלה העיקרית של הרציף פועל על מערכות הפעלה אחרות היה לינוקס רשת מכולות שהפכו את זה אפשרי. (בוודאי עבור Mac).

לאחרונה הודיעה מיקרוסופט בטא של אובונטו לינוקס מצב משתמש פועל באופן מקורי על Windows 10. זה יכול לרוץ קבצים בינאריים מלוקט בפורמט ELF ב- Windows (בניגוד cygwin הדורש קומפילציה).

השאלה שלי היא: האם אתה יכול להפעיל את docker באופן מקורי על Windows 10 חדש (אובונטו) באש למשתמשים?


121
2018-04-04 10:16




זה לא "רק" א bash -. זוהי ממשית לינוקס ממשית למדי, אך ללא טקסט X בלבד. אומר "bash" מתקשר רק את המגבלה טקסט בלבד .. - MSalters
האם פספסתי משהו? האם זה באמת מקבל מופץ? כרגע אני רק יודע על זה כמו vaporware. - Michael Hampton♦
אני חושב שזה לא יהיה ברור עד שהם משחררים את זה (AFAIK זה אפילו לא זמין לחלונות insiders עדיין) אבל זה שווה לציין כי מיקרוסופט ו Docker עובדים על הבאת Docker ל- Windows מקורי, כדי להשתחרר לצד Windows Server 2016 - Rоry McCune
@ RouryMcCune: מעניין. עם זאת, על פי זה בלוג כניסה מ אוגוסט 2015, זה יהיה נמל המאפשר Docker לרוץ Windows תמונות ב- Windows, לא תמונות לינוקס ב- Windows. - sleske
אכן זו המטרה של המעגן דובר Windows. האופי של containerisation הוא שאתה לא יכול להפעיל מערכות עם גרעינים אחרים, מבלי להוסיף קצת וירטואליזציה או (אולי) זו המשנה החדשה כי מיקרוסופט מפתחת - Rоry McCune


תשובות:


נכון לעכשיו (אפריל 2016) התשובה היא:

אנחנו לא יודעים עדיין (אבל כנראה לא).

העובדות

  • Windows 10 יכול כעת להפעיל מגוון רחב של תוכניות לינוקס (בין אותם פגז באש וטקסטים שונים). אלה אינם יציאות (כלומר, גרסאות רקומפיליות, כמו למשל ב סייגווין), הם אותו הדבר ELF קבצים בינאריים כי לרוץ על מערכת לינוקס טיפוסי. ב במקרה זה, הם נלקחו מאובונטו.
  • כדי להפוך את זה אפשרי, Windows 10 שונה כדי לקבל את מערכת לינוקס שיחות (syscalls), וכדי להיות מסוגל לטעון ולהפעיל קבצים בינאריים ELF (על ידי סקוט הנסלמן). משמעות הדבר היא שיכולות הפעלה לינוקס ללא שינוי ניתנות להפעלה, הן יטענו את הספריות המשותפות שלהן ללא שינוי כנדרש, ו- Windows יפעיל אותן כתהליכים של Windows.
  • בכל פעם תוכנית כזו לינוקס רוצה אינטראקציה עם הקרנל, זה בעיות בשיחת המערכת (או מאפשר לספרייה לעשות את זה). זה (כנראה) ההבדל היחיד לרוץ על לינוקס: כאשר פועל על לינוקס, הקרנל לינוקס מטפל שיחות אלה; ב- Windows 10, Windows 10 הקרנל עושה את זה במקום.

הספקולציות

אז השאלה היא אם את syscalls כי דוקר צריך (עבור chroot ו namespaces, בין היתר) יושמו או לא. התשובה היא כי סביר להניח כי "לא". Docker דורש פונקציונליות מתוחכמת למדי (ו- Linux ספציפית) לניהול תהליכים ומשאבים, ובידוד התהליך. למרות שזה כנראה אפשרי לשכפל את כל זה ב- Windows, זה יהיה הרבה עבודה, ומאחר המטרה של תכונה זו Windows נראה פועל תוכניות לינוקס לינוקס, זה נראה סביר שהם עשו את כל העבודה (ושמר את זה בסוד) .

עם זאת, אין מידע סופי או כך, ככל שאני יכול לספר. 

יציאות Docker קיימות

כמובן, אם מיקרוסופט תחליט שהם רוצים תמיכה ב- Docker ב- Windows 10, סביר להניח שהם יוכלו להציע את זה. יש תקדימים מסוימים להעברת דוקר לקרנל אחר:

  • יש נמל Docker עבור FreeBSD. זה נקרא "ניסיוני", אבל נראה לעבוד באופן עקרוני. זה יכול להשתמש במכולות Docker ללא שינוי ממאגר Docker, כלומר זה מספק למעשה סביבת לינוקס כמו מארח עבור התמונות.
  • יש פרויקט שמתבצע עבור העברת ה- Docker ל- Windows (במיוחד, Windows Server 2016) - ראה זאת כניסה לערוץ בלוג מ אוגוסט 2015. עם זאת, בניגוד יציאת FreBSD לעיל, זה יהיה נמל המאפשר דוקר להריץ תמונות Windows ב- Windows, לא תמונות לינוקס ב- Windows. תודה Roury McCune להצביע על זה.

50
2018-04-05 07:15



עדכון: יש מאמר בנושא בבלוג MSDN עכשיו: מערכת המשנה של Windows עבור לינוקס סקירה. - sleske
נכון להיום זה אפשרי עם Hyper-V: tutorials.ubuntu.com/tutorial/... - Nick Sweeting
אני downvoted פשוט כי התשובה הצביעו גבוה יותר שימושי אז ספקולציות של מה יכול להיות, הוא מכסה את מה. - James


אתה יכול להשתמש ב- Docker עבור Windows כמו מנוע ו Docker עבור לינוקס כמו הלקוח בשאוב על אובונטו ב- Windows. חבר אותם באמצעות TCP.

התקן את Docker עבור Windows: https://docs.docker.com/docker-for-windows/ אם אתה רוצה להשתמש מיכלי Windows במקום מיכלי לינוקס הן סוג מכולות יכול להיות מנוהל על ידי הלקוח עגינה לינוקס ב- userspace bash.

מאז גרסה 17.03.1-ce-win12 (12058) עליך לבדוק לחשוף daemon ב tcp: // localhost: 2375 ללא TLS כדי הלקוח לינוקס עגינה להמשיך לתקשר עם daemon docker של Windows על ידי TCP

בצע את הפעולות הבאות:

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

או

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

כמובן שאתה יכול להתקין docker-compose

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

או באמצעות פייתון פיפס

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

בדקתי את זה באמצעות 18.06.0-ce-win59 (19098) גירסה של Docker עבור Windows באמצעות Hyper-V:

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

חפש הן את הלקוח והן את השרת מערכת הפעלה / קשת: לינוקס / amd64

כרכים

היזהר בעת הוספת אמצעי אחסון. הנתיב C:\dir יהיה גלוי כמו /mnt/c/dir על WSL ו /c/dir/ על ידי מנוע מעגן. אתה יכול להתגבר על זה לצמיתות:

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

עליך לצאת ולטען מחדש את WSL לאחר ביצוע השינוי ל- wsl.conf כך ש- WSL יקרא את השינויים שלך בעת ההשקה.

עדכון

מ: מה חדש עבור שורת הפקודה ב - Windows 10 גרסה 1803

שקעי Unix   Unix Sockets לא נתמכו ב- Windows, ועכשיו הם! ניתן גם לתקשר על שקעי Unix בין Windows ו- WSL. אחד הדברים הגדולים על זה הוא מאפשר WSL להפעיל את לקוח Docker לינוקס אינטראקציה עם Daemon Daemon פועל על Windows.

בברכה


99
2017-07-19 22:05



שלום @ joel-pearson, מעגן יש שני חלקים: את המנוע ואת הלקוח. המנוע פועל בחלונות באמצעות Docker Toolbox (VirtualBox מבוסס) או Docker עבור Windows (Hyper-V מבוסס) שניהם נתמכים באופן רשמי על ידי צוות המעגן. מנוע Docker אינו פועל בחלל המשתמש של Bash עדיין. הלקוח Docker ב - Windows ניתן להפעיל ב cmd, powershell או cygwin. מה התשובה הזו אומרת את הדרך להפעיל את הלקוח עגינה ב bash userspace. למה? אישית אני מעדיף bash, עבודות השלמה. אני מסכים כי השאלה היא לגבי מנוע מעגן, אבל מצאתי את זה כאשר אני מחפש את הלקוח, ואנשים רבים עושים את אותו הדבר. - Carlos Rafael Ramirez
אני רק בדקה את זה וזה עובד בשבילי על 1.12 :) סופר נרגש עכשיו להיות מסוגל לעשות קצת פיתוח רציני על Windows. - Zach Russell
ניסיתי את ההוראות שלך בשאוב על אובונטו על Windows, יש "לא מצליח להתחבר אל הדמון של דוקר, האם הדמון של המעגן רץ על המארח הזה?". האם חסרים לך כמה צעדים? - mpen
נכון לפברואר 2017, זו עדיין הדרך היחידה. - hdave
לאחר יוני 2017, אתה יכול הפעל את מעגן עבור Windows רצועות פגז. במקום להתקין את הלקוח מעגן אתה יכול להשתמש docker.exe ישירות לשאילתה / אינטראקציה המשנה המשנה. עם זאת, שים לב כי המעגן עבור Windows ישתמש משתנים Windows ותצורות. - Jaime


התצוגה המקדימה הראשונה שוחררה אתמול. ניסיתי להתקין מעגן אבל זה נכשל עם הבאות: docker fail

אז זה ייראה, כי עבור התצוגה המקדימה הראשונה זה לא עובד כרגע. עם זאת, כפי שאנשים רבים משערים, זה עשוי לעבוד במהדורה עתידית.


12
2018-04-07 10:29



מגניב - תודה על שניסית! - Hawkeye
רעיון טוב לנסות את זה. דבר אחד: אתה יכול בבקשה להוסיף את הטקסט של צילום מסך כמו טקסט בפועל (מסוף אובונטו תומך העתק והדבק). "נדל" טקסט יש יתרונות רבים (קל יותר לקרוא, תומך קוראי מסך, לזחול על ידי מנועי החיפוש) - 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? - kumar_harsh
נראה שזה עובד עכשיו: tutorials.ubuntu.com/tutorial/... - Nick Sweeting


לא, זה לא אפשרי.

Docker צריך מספר דברים כדי להפעיל מכולות:

  • chroot
  • מרחבי שמות עבור:
    • PID
    • משתמשים
    • רשת
    • הרכבות
    • UTS
    • IPC

כל אלה הם תכונות ליבה המיושמות ב- Linux. למרבה הצער, לרובם אין תכונה דומה ב- Windows לשימוש כתחליף (ולא בתת-מערכת לינוקס ש- Microsoft מיישמת בליבת Windows). כל אלה צריכים להיות מסופקים על ידי מערכת ההפעלה.


11
2018-04-04 10:21



למעשה, ל- Windows יש מרחבי שמות עבור משתמשים, הרכבות ו- IPC. שמות משתמשים נדרשים עבור Active Directory, יש צורך במספרי שמות ושטחי IPC עבור פעולות מרובות משתמשים. ביסודו של דבר, מנהל האובייקטים של הליבה ב- Windows תמיד היה מרחבי שמות, משחרורו הראשון של Windows NT, כך שזה לא מוזר. - MSalters
ועם שירותי שולחן עבודה מרוחק, אובייקטים מושב פעיל להשתמש אלה מרחבי לספק פעולה בו זמנית. זה לא אומר שיש לך את כל התשתית הנדרשת, אבל חלקים גדולים הם שם. בנוגע ל chroot, להבין כי הסביבה אובונטו כבר יש שורש שונה מאשר אחד WIN32. - MSalters
למעשה, אני חושב שזה מוקדם מדי לענות על כך בכל מקרה. כמתואר ב הערה של סקוט הנסלמן, Windows 10 הקרנל עכשיו מקבל syscalls לינוקס. אז השאלה היא אם את syscalls כי Docker צריך (עבור chroot ו namespaces) יושמו או לא. אמנם התשובה היא "לא", אין מידע סופי או כך, ככל שאני יכול לספר. - sleske
@sleske צודק, השאלה הזאת היא לא אחראית כרגע, ואומרת "לא זה לא יכול" ללא שום אינדיקציה ממשית מה devs לעבוד על שטח לינוקס באלמנות הם עד הוא די יומרני. - Ryan
אני לא יודע מספיק כדי לקבוע בביטחון שהתשובה הזאת מוטעית לחלוטין, אבל הדרך בה היא מנוסחת מעוררת בי קצת ספקנות לגבי תוקפה. בפרט נאמר כי "בש הוא תוכנית שטח משתמש פשוטה ואינו יכול לספק אף אחד מאלה", ובהתייחסו לתת-המערכת של חלונות עבור לינוקס כ"מאפיין החדש של באש ", זה נשמע כאילו התשובה הזאת מבוססת על ההנחה השגויה לחלוטין שכל מיקרוסופט עשתה היה נמל bash ל - Windows. זה לא מה שקרה. הם פיתחו ממשק לינוקס שלם הפועל על גבי הקרנל של Windows: msdn.microsoft.com/en-us/commandline/wsl/about - Ajedi32


החל ב עדכון יוצר (פורסם ב 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_BINDirectory:

$ 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

אזהרה אחת: תקבל הודעת שגיאה כגון "לא ניתן לתרגם את ספריית העבודה הנוכחיתmsgstr "אם רצים מספריית לינוקס cd לתוך ספריית Windows (למשל /mnt/c/Users/YourUsername) ואתה צריך להיות טוב.


6
2018-06-22 06:02



זה לא נראה להרים משתנים הסביבה bash לתוך מעגן-לחבר קבצי YML. יש לך מושג? - Rüdiger Schulz
זה הגיוני, כי אתה משתמש Windows docker בינארי, ופשוט עושה זאת דרך קליפת לינוקס. אני לא בטוח אם יש דרך טובה להשיג זאת. - dimo414


לאחר Docker 1.12 הוא שוחרר ואת הלקוח Docker לינוקס מופרד, אתה אמור להיות מסוגל להפעיל את המעגן הלקוח ב - Windows 10.

זה אולי לא נשמע כמו הרבה נתון יש לך לקוח Windows Docker אבל זה שימושי אם יש לך כלי עבודה לינוקס הכוללים מעגן עבור זה בצד הלקוח פונקציונליות.


5
2018-04-29 09:31





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

אז זה בהחלט stopper מצד הצד.

עם זאת, ניתן להתקין מעגן עבור Windows וזה עובד כמו קסם, אתה יכול כמובן לפרוס שרתים לינוקס וכל מה שאתה צריך.

> 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





החל מספטמבר 2016, מס '

כל היישומים הנוכחיים של Docker ב- Windows משתמשים בווירטואליזציה, Docker 1.12 משתמש ב- Hypervisor ב- Windows - ובכך להסיר את היתרון של containerisation מעל וירטואליזציה.

Docker צריך יותר מאשר רק באמצעות מערכות לינוקס שיחות.

הוא זקוק לקבוצת בקרת תהליכים (cgroups), למערכת קבצים סטאקאפ (aufs), ובנוסף למערכות מבוססות לינוקס אחרות מחוץ לקרנל.

לא cgroups ולא aufs הם מקורי בליבה של Windows 10.

יש יישום של Windows Server 2016 כאן: https://msdn.microsoft.com/en-gb/virtualization/windowscontainers/quick_start/quick_start_windows_server .. אבל זה יפעיל רק כמה שירותי Windows, למשל. IIS, ולא אובונטו


2
2017-09-05 13:15





Docker אינו עובד כרגע בבנייה הנוכחית (14316) - בהנחה שאתה יכול לקבל את זה מותקן.

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

1
2018-04-12 20:47



מדהים! המשך לנסות. - Hawkeye
זה נראה כאילו זה עשוי להיות קשור איך הקצאת זיכרון עובד golang (אשר Docker כתוב): groups.google.com/forum/#!msg/golang-dev/EpUlHQXWykg/... - Timothy Meade
שלי פשוט תולה לנצח אחרי הפקודה. - wieczorek1990


מ: 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



זה משלים עם העובדה כי עכשיו אתה יכול להריץ לקוח docker עבור לינוקס בבאש, כך הימנעות באמצעות PowerShell אם אתה לא משתמש כדי - Carlos Rafael Ramirez
זה יהיה מעניין לראות אם הם בקנה מידה זה עד נחיל מעגן. - Hawkeye