
قم بتشغيل Windows داخل حاوية Docker مع تسريع KVM، والتثبيت التلقائي، والموارد القابلة للتخصيص. يدعم إصدارات متعددة من Windows، ونقل USB، وشبكات macvlan.
<h1 align="center">ويندوز<br />
<div align="center">
<a href="https://github.com/dockur/windows"><img src="https://raw.githubusercontent.com/dockur/windows/master/.github/logo.png" title="الشعار" style="max-width:100%;" width="96" /></a>
</div>
<div align="center">
[![بناء]][build_url]
[![إصدار]][tag_url]
[![حجم]][tag_url]
[![حزمة]][pkg_url]
[![سحوبات]][hub_url]
</div></h1>
ويندوز داخل حاوية دوكر.
## الميزات ✨
- تشغيل ويندوز داخل حاوية دوكر
- تحميل تلقائي وتثبيت بدون تدخل
- يدعم إصدارات ويندوز الحديثة والقديمة
- أداء قريب من الأصلي مع تسريع KVM
- تخصيص وحدة المعالجة المركزية والذاكرة والتخزين
- تخصيص ديناميكي للذاكرة باستخدام تقنية البالون
- تمرير USB ومشاركة مجلد المضيف
- يدعم شبكات NAT ووضع المستخدم وmacvlan وmacvtap
## فيديو 📺
[](https://www.youtube.com/watch?v=xhGYobuG508)
## الاستخدام 🐳
##### دوكر كومبوز:
```yaml
services:
windows:
image: dockurr/windows
container_name: windows
environment:
VERSION: "11"
devices:
- /dev/kvm
- /dev/net/tun
cap_add:
- NET_ADMIN
ports:
- 8006:8006
- 3389:3389/tcp
- 3389:3389/udp
volumes:
- ./windows:/storage
restart: always
stop_grace_period: 2m
```
##### واجهة سطر الأوامر لدوكر:
```bash
docker run -it --rm --name windows -e "VERSION=11" -p 8006:8006 --device=/dev/kvm --device=/dev/net/tun --cap-add NET_ADMIN -v "${PWD:-.}/windows:/storage" --stop-timeout 120 docker.io/dockurr/windows
```
##### كوبيرنيتس:
```shell
kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/master/kubernetes.yml
```
##### جيت هاب Codespaces:
[](https://codespaces.new/dockur/windows)
##### المثبت الرسومي:
[](https://winboat.app)
## المتطلبات ⚙️
- دوكر أو بودمان على مضيف لينكس مع دعم KVM.
- دوكر دسكتوب أو بودمان (دسكتوب) على ويندوز 11 مع تمكين المحاكاة الافتراضية المتداخلة.
- ذاكرة وصول عشوائي متوفرة بحجم 4 جيجابايت على الأقل.
- مساحة قرص خالية بحجم 64 جيجابايت على الأقل.
> [!NOTE]
> دوكر دسكتوب على لينكس وmacOS وويندوز 10 لا يوفر حاليًا وصول KVM للحاويات وبالتالي فهو غير مدعوم.
## الأسئلة الشائعة 💬
### كيف أستخدمه؟
بسيط جدًا! هذه هي الخطوات:
- ابدأ الحاوية واتصل بالمنفذ [8006](http://127.0.0.1:8006/) باستخدام متصفح الويب الخاص بك.
- استرخِ بينما يحدث السحر، سيتم التثبيت بأكمله تلقائيًا بالكامل.
- بمجرد رؤية سطح المكتب، يكون تثبيت ويندوز جاهزًا للاستخدام.
استمتع بجهازك الجديد، ولا تنسَ وضع نجمة لهذا المستودع!
### كيف أختار إصدار ويندوز؟
بشكل افتراضي، سيتم تثبيت ويندوز 11 برو. ولكن يمكنك إضافة متغير البيئة `VERSION` إلى ملف compose الخاص بك لتحديد إصدار ويندوز بديل ليتم تنزيله:
```yaml
environment:
VERSION: "10"
```
اختر من القيم أدناه:
| **القيمة** | **الإصدار** | **الحجم** |
|---|---|---|
| `11` | ويندوز 11 برو | 7.9 GB |
| `11l` | ويندوز 11 LTSC | 4.7 GB |
| `11e` | ويندوز 11 إنتربرايز | 6.6 GB |
||||
| `10` | ويندوز 10 برو | 5.7 GB |
| `10l` | ويندوز 10 LTSC | 4.6 GB |
| `10e` | ويندوز 10 إنتربرايز | 5.2 GB |
||||
| `8e` | ويندوز 8.1 إنتربرايز | 3.7 GB |
| `7u` | ويندوز 7 ألتيميت | 3.1 GB |
| `vu` | ويندوز فيستا ألتيميت | 3.0 GB |
| `xp` | ويندوز إكس بي بروفيشنال | 0.6 GB |
| `2k` | ويندوز 2000 بروفيشنال | 0.4 GB |
||||
| `2025` | ويندوز سيرفر 2025 | 7.6 GB |
| `2022` | ويندوز سيرفر 2022 | 6.0 GB |
| `2019` | ويندوز سيرفر 2019 | 5.3 GB |
| `2016` | ويندوز سيرفر 2016 | 6.5 GB |
| `2012` | ويندوز سيرفر 2012 | 4.3 GB |
| `2008` | ويندوز سيرفر 2008 | 3.0 GB |
| `2003` | ويندوز سيرفر 2003 | 0.6 GB |
> [!TIP]
> لتثبيت إصدارات ARM64 من ويندوز استخدم [dockur/windows-arm](https://github.com/dockur/windows-arm/).
### كيف أغير موقع التخزين؟
لتغيير موقع التخزين، قم بتضمين الربط التالي في ملف compose الخاص بك:
```yaml
volumes:
- ./windows:/storage
```
استبدل المسار المثال `./windows` بمجلد التخزين المطلوب أو وحدة التخزين المسماة.
### كيف أغير حجم القرص؟
لتوسيع الحجم الافتراضي البالغ 64 جيجابايت، أضف إعداد `DISK_SIZE` إلى ملف compose الخاص بك واضبطه على السعة المفضلة لديك:
```yaml
environment:
DISK_SIZE: "256G"
```
> [!TIP]
> يمكن أيضًا استخدام هذا لتغيير حجم قرص موجود إلى سعة أكبر دون فقدان أي بيانات. ومع ذلك، ستحتاج إلى [تمديد قسم القرص يدويًا](https://learn.microsoft.com/en-us/windows-server/storage/disk-management/extend-a-basic-volume?tabs=disk-management) بعد ذلك، حيث ستظهر مساحة القرص المضافة كمساحة غير مخصصة.
### كيف أشارك الملفات مع المضيف؟
بعد التثبيت، سيكون هناك مجلد يسمى `Shared` على سطح المكتب الخاص بك، والذي يمكن استخدامه لتبادل الملفات مع جهاز المضيف.
لتحديد مجلد على المضيف لهذا الغرض، قم بتضمين الربط التالي في ملف compose الخاص بك:
```yaml
volumes:
- ./example:/shared
```
استبدل المسار المثال `./example` بمجلد المشاركة المطلوب، والذي سيصبح بعد ذلك مرئيًا كـ `Shared`.
### كيف أغير كمية وحدة المعالجة المركزية أو الذاكرة؟
بشكل افتراضي، سيسمح لويندوز باستخدام 2 نواة وحدة معالجة مركزية و 4 جيجابايت من ذاكرة الوصول العشوائي.
إذا كنت ترغب في تعديل ذلك، يمكنك تحديد الكمية المطلوبة باستخدام متغيرات البيئة التالية:
```yaml
environment:
RAM_SIZE: "8G"
CPU_CORES: "4"
```
### كيف أقوم بتكوين اسم المستخدم وكلمة المرور؟
بشكل افتراضي، يتم إنشاء مستخدم باسم `Docker` وكلمة المرور الخاصة به هي `admin`.
إذا كنت ترغب في إعداد بيانات اعتماد مختلفة أثناء التثبيت، يمكنك تكوينها في ملف compose الخاص بك:
```yaml
environment:
USERNAME: "bill"
PASSWORD: "gates"
```
### كيف أختار لغة ويندوز؟
بشكل افتراضي، سيتم تنزيل النسخة الإنجليزية من ويندوز.
ولكن يمكنك إضافة متغير البيئة `LANGUAGE` إلى ملف compose الخاص بك لتحديد لغة بديلة ليتم تنزيلها:
```yaml
environment:
LANGUAGE: "French"
```
يمكنك الاختيار بين: 🇦🇪 العربية, 🇧🇬 البلغارية, 🇨🇳 الصينية, 🇭🇷 الكرواتية, 🇨🇿 التشيكية, 🇩🇪 الألمانية, 🇩🇰 الدنماركية, 🇬🇧 الإنجليزية, 🇪🇪 الإستونية, 🇫🇮 الفنلندية, 🇫🇷 الفرنسية, 🇮🇱 العبرية, 🇭🇺 المجرية, 🇮🇹 الإيطالية, 🇯🇵 اليابانية, 🇰🇷 الكورية, 🇱🇻 اللاتفية, 🇱🇹 الليتوانية, 🇳🇱 الهولندية, 🇳🇴 النرويجية, 🇵🇱 البولندية, 🇵🇹 البرتغالية, 🇷🇴 الرومانية, 🇷🇺 الروسية, 🇷🇸 الصربية, 🇸🇰 السلوفاكية, 🇸🇮 السلوفينية, 🇪🇸 الإسبانية, 🇸🇪 السويدية, 🇹🇭 التايلاندية, 🇹🇷 التركية و 🇺🇦 الأوكرانية.
### كيف أختار تخطيط لوحة المفاتيح؟
إذا كنت ترغب في إعداد تخطيط لوحة مفاتيح أو إعدادات محلية ليست الافتراضية للغة المحددة، يمكنك إضافة متغيرات `KEYBOARD` و`REGION` مثل هذا:
```yaml
environment:
REGION: "en-US"
KEYBOARD: "en-US"
```
### كيف أقوم بتثبيت صورة مخصصة؟
لتنزيل صورة ISO غير مدعومة، حدد عنوان URL الخاص بها في متغير البيئة `VERSION`:
```yaml
environment:
VERSION: "https://example.com/win.iso"
```
بدلاً من ذلك، يمكنك أيضًا تخطي التنزيل واستخدام ملف محلي بدلاً من ذلك، عن طريق ربطه في ملف compose الخاص بك بهذه الطريقة:
```yaml
volumes:
- ./example.iso:/custom.iso
```
استبدل المسار المثال `./example.iso` باسم ملف ISO المطلوب. سيتم تجاهل قيمة `VERSION` في هذه الحالة.
### كيف أشغل سكريبت بعد التثبيت؟
لتشغيل السكريبت الخاص بك بعد التثبيت، يمكنك إنشاء ملف باسم `install.bat` ووضعه في مجلد مع أي ملفات إضافية يحتاجها (على سبيل المثال، برامج للتثبيت).
ثم اربط هذا المجلد في ملف compose الخاص بك مثل هذا:
```yaml
volumes:
- ./example:/oem
```
سيتم نسخ المجلد المثال `./example` إلى `C:\OEM` وسيتم تنفيذ ملف `install.bat` داخل ذلك المجلد خلال الخطوة الأخيرة من التثبيت التلقائي.
### كيف أقوم بتثبيت يدوي؟
يُوصى بالالتزام بالتثبيت التلقائي، حيث يقوم بضبط إعدادات متنوعة لمنع المشكلات الشائعة عند تشغيل ويندوز داخل بيئة افتراضية.
ومع ذلك، إذا أصررت على إجراء التثبيت يدويًا (على مسؤوليتك الخاصة)، أضف متغير البيئة التالي إلى ملف compose الخاص بك:
```yaml
environment:
MANUAL: "Y"
```
### كيف أتصل باستخدام RDP؟
العارض عبر الويب مخصص بشكل أساسي للاستخدام أثناء التثبيت، نظرًا لأنه أقل استجابة من RDP ولا يدعم ميزات مثل مشاركة الحافظة.
لذا لتجربة أفضل، يمكنك الاتصال باستخدام أي عميل سطح مكتب بعيد من مايكروسوفت بعنوان IP الخاص بالحاوية، باستخدام اسم المستخدم `Docker` وكلمة المرور `admin`.
يتوفر عميل RDP لنظام [أندرويد](https://play.google.com/store/apps/details?id=com.microsoft.rdc.androidx) من متجر Play وواحد لنظام [iOS](https://apps.apple.com/nl/app/microsoft-remote-desktop/id714464092?l=en-GB) في متجر آبل. بالنسبة للينكس يمكنك استخدام [FreeRDP](https://www.freerdp.com/) وعلى ويندوز فقط اكتب `mstsc` في مربع البحث.
### كيف أقوم بتمكين الصوت؟
الصوت معطل افتراضيًا إلا إذا كنت تستخدم RDP. لدفقه إلى المتصفح، أضف متغير البيئة التالي:
```yaml
environment:
AUDIO: "Y"
```
ثم قم بتمكين **الصوت** ضمن **الإعدادات → خيارات متقدمة** في العارض عبر الويب. يكون الدفق نشطًا فقط أثناء تمكين هذا الخيار، لذلك لا يستخدم نطاقًا تردديًا إضافيًا بخلاف ذلك.
### كيف أعين عنوان IP فردي للحاوية؟
افتراضيًا، تستخدم الحاوية شبكة الجسر، والتي تشارك عنوان IP مع المضيف.
إذا كنت ترغب في تعيين عنوان IP فردي للحاوية، يمكنك إنشاء شبكة macvlan كما يلي:
```bash
docker network create -d macvlan \
--subnet=192.168.0.0/24 \
--gateway=192.168.0.1 \
--ip-range=192.168.0.100/28 \
-o parent=eth0 vlan
```
تأكد من تعديل هذه القيم لتتناسب مع شبكتك المحلية.
بمجرد إنشاء الشبكة، قم بتعديل ملف compose الخاص بك ليبدو كما يلي:
```yaml
services:
windows:
container_name: windows
..<snip>..
networks:
vlan:
ipv4_address: 192.168.0.100
networks:
vlan:
external: true
```
من الفوائد الإضافية لهذا النهج أنك لن تضطر إلى إجراء أي تعيين منفذ بعد الآن، حيث سيتم كشف جميع المنافذ افتراضيًا.
> [!IMPORTANT]
> لن يكون عنوان IP هذا متاحًا من مضيف دوكر بسبب تصميم macvlan، الذي لا يسمح بالاتصال بينهما. إذا كان هذا مصدر قلق، فأنت بحاجة إلى إنشاء [macvlan ثاني](https://blog.oddbit.com/post/2018-03-12-using-docker-macvlan-networks/#host-access) كحل بديل.
### كيف يمكن لويندوز الحصول على عنوان IP من جهاز التوجيه الخاص بي؟
بعد تكوين الحاوية لـ [macvlan](#كيف-أعين-عنوان-ip-فردي-للحاوية)، من الممكن أن يصبح ويندوز جزءًا من شبكة منزلك عن طريق طلب عنوان IP من جهاز التوجيه الخاص بك، تمامًا مثل جهاز كمبيوتر حقيقي.
لتمكين هذا الوضع، حيث سيكون للحاوية وويندوز عناوين IP منفصلة، أضف الأسطر التالية إلى ملف compose الخاص بك:
```yaml
environment:
DHCP: "Y"
devices:
- /dev/vhost-net
device_cgroup_rules:
- 'c *:* rwm'
```
### كيف أضيف أقراصًا متعددة؟
لإنشاء أقراص إضافية، قم بتعديل ملف compose الخاص بك مثل هذا:
```yaml
environment:
DISK2_SIZE: "32G"
DISK3_SIZE: "64G"
volumes:
- ./example2:/storage2
- ./example3:/storage3
```
### كيف أمرر قرصًا؟
يمكنك تمرير أجهزة القرص أو الأقسام مباشرة عن طريق إضافتها إلى ملف compose الخاص بك بهذه الطريقة:
```yaml
devices:
- /dev/sdb:/disk1
- /dev/sdc1:/disk2
```
استخدم `/disk1` إذا كنت تريد أن يصبح محرك الأقراص الرئيسي لديك (والذي سيتم تنسيقه أثناء التثبيت)، واستخدم `/disk2` وما فوق لإضافتها كمحركات أقراص ثانوية (والتي ستبقى دون تغيير).
### كيف أمرر جهاز USB؟
لتمرير جهاز USB، ابحث أولاً عن معرفات البائع والمنتج الخاصة به عبر الأمر `lsusb`، ثم أضفها إلى ملف compose الخاص بك مثل هذا:
```yaml
environment:
ARGUMENTS: "-device usb-host,vendorid=0x1234,productid=0x1234"
devices:
- /dev/bus/usb
```
> [!WARNING]
> قد تؤدي إضافة جهاز تخزين USB قبل انتهاء إعداد ويندوز إلى فشله. أو الأسوأ: قد يتم تنسيق القرص كقرص النظام، وسيتم فقدان جميع بياناتك! لذا، احتفظ بها دائمًا مفصولة عند تشغيل الحاوية لأول مرة.
### هل هذه جميع الخيارات المتاحة؟
لا. للحصول على نظرة عامة كاملة عن جميع الإعدادات المدعومة، راجع صفحة [متغيرات البيئة](https://github.com/dockur/windows/blob/master/docs/environment.md).
### كيف أتحقق من توفر KVM؟
أولاً، تأكد من أن منصتك وبيئة تشغيل الحاوية تفي بالمتطلبات المذكورة أعلاه.
على مضيف لينكس، قم بتثبيت `cpu-checker` وقم بتشغيل:
```bash
sudo apt install cpu-checker
sudo kvm-ok
```
يجب أن يبلغ التكوين العامل:
```text
KVM acceleration can be used
```
يمكنك أيضًا التحقق من وجود جهاز KVM:
```bash
ls -l /dev/kvm
```
إذا كان KVM غير متوفر، تحقق مما يلي:
- تم تمكين المحاكاة الافتراضية للأجهزة (`Intel VT-x` أو `AMD-V`) في BIOS أو UEFI الخاص بك.
- تم تمكين المحاكاة الافتراضية المتداخلة عندما يكون المضيف نفسه جهازًا افتراضيًا.
- يدعم موفر VPS أو السحابة الخاصة بك المحاكاة الافتراضية المتداخلة.
إذا نجح `kvm-ok` ولكن الحاوية لا تزال تبلغ أن KVM غير متوفر، يمكنك إضافة `privileged: true` مؤقتًا إلى ملف Compose الخاص بك لاستبعاد مشكلة الإذن أو الوصول إلى الجهاز.
### كيف أشغل macOS في حاوية؟
يمكنك استخدام [dockur/macos](https://github.com/dockur/macos) لذلك. يشارك العديد من الميزات نفسها، باستثناء التثبيت التلقائي.
### كيف أشغل سطح مكتب لينكس في حاوية؟
يمكنك استخدام [qemus/qemu](https://github.com/qemus/qemu) في هذه الحالة.
### هل هذا المشروع قانوني؟
نعم، يحتوي هذا المشروع فقط على كود مفتوح المصدر ولا يقوم بتوزيع ويندوز نفسه. أي مفاتيح منتج موجودة في الكود هي مفاتيح تثبيت عامة نشرتها مايكروسوفت لأغراض تجريبية وليست تراخيص تنشيط صالحة.
أنت مسؤول عن ضمان حصولك على ترخيص ويندوز صالح وأن استخدامك يتوافق مع شروط ترخيص مايكروسوفت.
## النجوم 🌟
[](https://github.com/dockur/windows/stargazers)
## إخلاء المسؤولية ⚖️
*إن أسماء المنتجات والشعارات والعلامات التجارية والعلامات التجارية الأخرى المشار إليها ضمن هذا المشروع هي ملك لأصحاب العلامات التجارية المعنيين. هذا المشروع ليس تابعًا أو برعاية أو مؤيدًا من قبل شركة مايكروسوفت.*
[build_url]: https://github.com/dockur/windows/
[hub_url]: https://hub.docker.com/r/dockurr/windows/
[tag_url]: https://hub.docker.com/r/dockurr/windows/tags
[pkg_url]: https://github.com/dockur/windows/pkgs/container/windows
[بناء]: https://github.com/dockur/windows/actions/workflows/build.yml/badge.svg
[حجم]: https://img.shields.io/docker/image-size/dockurr/windows/latest?color=066da5&label=size
[سحوبات]: https://img.shields.io/docker/pulls/dockurr/windows.svg?style=flat&label=pulls&logo=docker
[إصدار]: https://img.shields.io/docker/v/dockurr/windows/latest?arch=amd64&sort=semver&color=066da5
[حزمة]: https://img.shields.io/badge/dynamic/json?url=https://ipitio.github.io/backage/dockur/windows/windows.json&query=$.downloads&logo=github&style=flat&color=066da5&label=pulls