تثبيت Docker Desktop وتفعيل Kubernetes

11 دقيقة
الجمهور المستهدف
مبتدئ، على Windows 10/11 أو macOS أو Linux
المدة
30 إلى 45 دقيقة (زائد تحميل الصور، 5 إلى 15 دقيقة حسب الاتصال)
الوحدة
1/8
الكفاءة المستهدفة
تثبيت Docker Desktop، منحه ذاكرة كافية، تفعيل كتلة Kubernetes المدمجة، وإثبات أنها تعمل باستخدام docker desktop kubernetes status وkubectl get nodes

في صورة واحدة

تفعيل Kubernetes في Docker Desktop أشبه بإضافة ملحق إلى شقة تسكنها بالفعل: الأسس (الآلة الافتراضية Linux، ومحرّك Docker، والشبكة نحو localhost) موضوعة سلفاً، ولا يبقى سوى تحديد خانة اختيار وترك التطبيق يُحمّل عشر صور تقريباً، ويُنشئ control plane، ويكتب سطراً في ملفك ~/.kube/config. بعد خمس دقائق، يُجيب kubectl get nodes بـdocker-desktop Ready. في هذا الدرس، تُنجز التثبيت خطوة بخطوة حسب نظامك، وتتحقق من كل خطوة بأمر تعرف مخرجاته المتوقعة، وتخرج بقائمة الأعطال الخمسة التي تُعيق تسعة من كل عشرة طلاب في اليوم الأول، مع الرسالة الدقيقة وعلاجها.

كيف يعمل الأمر

يُشغّل Docker Desktop آلة افتراضية خفيفة تعمل بنظام Linux: على Windows هي توزيعة WSL 2 باسم docker-desktop، وعلى macOS آلة افتراضية Apple Virtualization، وعلى Linux آلة افتراضية QEMU. يعيش محرّك Docker داخلها، وكذلك Kubernetes: عندما تُفعّله، يُحمّل Docker Desktop صور control plane من Docker Hub (docker/desktop-kubernetes، desktop-kubernetes-etcd، desktop-kubernetes-apiserver…)، ويُشغّلها كحاويات ذات صلاحيات موسّعة داخل هذه الآلة الافتراضية، ويُولّد الشهادات، ثم يضيف إلى ~/.kube/config الخاص بك سياقاً (context) باسم docker-desktop يُشير إلى https://kubernetes.docker.internal:6443. كما يُثبّت kubectl (في C:\Program Files\Docker\Docker\resources\bin على Windows، و/usr/local/bin/kubectl على macOS): لا شيء آخر عليك تحميله.

توجد طريقتان لتزويد الكتلة (provisioning) منذ Docker Desktop 4.38. تُنشئ Kubeadm عقدة واحدة فقط، بإصدار Kubernetes الذي يحدّده Docker Desktop (v1.34.1 في النسخة 4.68)؛ وهو الوضع الافتراضي وهو المستخدم في هذه الدورة. أما kind (Kubernetes in Docker) فتُنشئ عدة عقد، كل واحدة عبارة عن حاوية، وتترك لك اختيار الإصدار؛ ويبدأ بشكل أسرع لكنه لا يشارك مخزن صور Docker الكلاسيكي (يجب استخدام وضع «containerd image store»). طالما أنك تتعلّم، تكفي عقدة واحدة: كل ما تفعله الدورة يعمل على docker-desktop.

النظامما تُثبّتهأين تُضبط الذاكرةKubernetes مدمج؟
Windows 10 (21H2+) / 11Docker Desktop، محرّك WSL 2ملف %UserProfile%\.wslconfig، ثم wsl --shutdownنعم
macOS 13+ (Intel أو Apple Silicon)Docker Desktop (ملف .dmg حسب معالجك)Settings → Resources → Memory، ثم «Apply & restart»نعم
Linux (Ubuntu، Debian، Fedora…)Docker Desktop لنظام Linux (.deb / .rpm) أو Docker Engine وحدهSettings → Resources (Desktop)؛ كل الذاكرة العشوائية (Engine)نعم مع Docker Desktop؛ لا مع Docker Engine وحده (استخدم عندئذ minikube أو kind)
إعداد Kubernetes (Settings → Kubernetes)ما يفعلهاختيارنا
Enable Kubernetesيُثبّت ويُشغّل الكتلة؛ إلغاء تحديده يوقف ويحذف حاويات الكتلة ويزيل kubectlمُفعّل
Cluster provisioning methodKubeadm (عقدة واحدة، إصدار مفروض) أو kind (عدة عقد، إصدار حسب الاختيار)Kubeadm
Show system containers (advanced)يُظهر حاويات k8s_… الخاصة بالكتلة في docker psمُفعّل (مفيد للفهم، الدرس 01 الخطوة 7)
Reset Kubernetes clusterيحذف كل الكتلة (namespaces، Deployments، الأحجام) ويُعيد إنشاءها فارغة؛ الطريقة الوحيدة لتغيير إصدار Kubernetesفقط عند استكشاف الأعطال

يُخزَّن الإعداد في ملف JSON: على Windows في %APPDATA%\Docker\settings-store.json، بمفتاح KubernetesEnabled (true/false) وKubernetesMode (kubeadm/kind). معرفة ذلك مفيد يوم ترفض الواجهة الرسومية الفتح.

خطوة بخطوة

  1. Windows: تثبيت WSL 2، ثم Docker Desktop. افتح PowerShell كمسؤول (administrateur) وثبّت WSL إذا لم يكن موجوداً بعد (لا يفعل الأمر شيئاً إذا كان WSL موجوداً بالفعل):

    powershell
    wsl --install
    wsl --status

    أعد التشغيل إذا طُلب منك ذلك. ثم حمّل «Docker Desktop for Windows» من docs.docker.com/desktop، شغّل المُثبِّت، اترك خيار Use WSL 2 instead of Hyper-V محدَّداً، ثم شغّل Docker Desktop وانتظر توقّف أيقونة الحوت في شريط المهام عن الوميض. ما يجب ملاحظته:

    powershell
    wsl --list --verbose
    text
      NAME              STATE           VERSION
    * docker-desktop    Running         2
    

    التوزيعة docker-desktop هي الآلة الافتراضية التي سيعمل بداخلها Docker وKubernetes. إذا أظهر VERSION القيمة 1، حوّلها: wsl --set-version docker-desktop 2.

  2. Windows: منح ذاكرة لـ WSL 2. يأخذ WSL افتراضياً نصف ذاكرتك العشوائية؛ غالباً ما يكفي هذا، لكن كي لا تعتمد على الصدفة، ثبّت القيمة. أنشئ الملف %UserProfile%\.wslconfig:

    powershell
    notepad $env:UserProfile\.wslconfig

    الصق، احفظ، ثم أعد تشغيل الآلة الافتراضية WSL (يُعيد Docker Desktop نفسه التشغيل تلقائياً خلف الكواليس):

    ini
    [wsl2]
    memory=8GB
    processors=4
    powershell
    wsl --shutdown

    ما يجب ملاحظته، بمجرد عودة Docker Desktop: يُعيد docker info --format '{{.MemTotal}}' رقماً قريباً من 8 000 000 000 (على آلة الدورة، بدون حدّ، يُعيد 33480151040، أي 31 جيجابايت). تعمل الدورة ابتداءً من 4 جيجابايت؛ و8 جيجابايت تمنحك راحة حتى الوحدة 8.

  3. macOS: التثبيت وضبط الذاكرة. حمّل ملف .dmg المطابق لمعالجك (Apple Silicon أو Intel)، اسحب Docker إلى Applications، شغّله. ثم Settings (أيقونة الترس) → ResourcesAdvanced: ارفع Memory إلى 8 جيجابايت (4 جيجابايت كحد أدنى) وCPUs إلى 4، ثم Apply & restart. ما يجب ملاحظته: يعكس docker info --format '{{.MemTotal}}' قيمتك. سيُثبَّت kubectl في /usr/local/bin/kubectl عند تفعيل Kubernetes؛ إذا كان لديك واحد عبر Homebrew وتنازعا، احذف واحداً من Docker أو من Homebrew، وليس كليهما (الدرس 03).

  4. Linux: Docker Desktop، أو لا. مساران. يمنحك Docker Desktop لنظام Linux (حزمة .deb أو .rpm من docs.docker.com/desktop/setup/install/linux) نفس Kubernetes المدمج تماماً كما على Windows وmacOS؛ ويتطلّب KVM (يجب أن يُدرج lsmod | grep kvm الوحدة) وجلسة رسومية. أما Docker Engine وحده (docker-ce عبر apt/dnf) فلا يتضمّن Kubernetes: إذا كنت على خادم أو تفضّل Engine، ثبّت kind أو minikube؛ ستبقى كل أوامر kubectl في الدورة متطابقة، فقط طريقة الوصول إلى الـ Services ستتغيّر (الدرس 04). على Docker Desktop لنظام Linux، لا يُرفَق kubectl: ثبّته من kubernetes.io/docs/tasks/tools في /usr/local/bin/kubectl.

  5. تفعيل Kubernetes. افتح Docker Desktop → Settings → Kubernetes → حدّد Enable Kubernetes. اترك Cluster provisioning method على Kubeadm (عقدة واحدة)، حدّد Show system containers (advanced)، ثم Apply & restart. في الإصدارات 4.51 وما بعدها، يمكنك أيضاً المرور عبر واجهة Kubernetes من لوحة التحكم (أيقونة في الشريط الجانبي) → Create cluster → نفس الاختيار Kubeadm / kind → Create. عندئذ يُحمّل Docker Desktop صور control plane؛ يمكنك سردها أثناء عمله:

    bash
    docker desktop kubernetes images list

    المخرجات الحقيقية (Docker Desktop 4.68.0):

    text
    Mode                Repo                Name                                    Tag
    kind                docker              desktop-containerd-registry-mirror      v0.0.3
    kind                docker              desktop-cloud-provider-kind             v0.5.0
    kind                envoyproxy          envoy                                   v1.36.4
    kind                kindest             node
    kubeadm             docker              desktop-kubernetes                      kubernetes-v1.34.1-cni-v1.7.1-critools-v1.33.0-cri-dockerd-v0.3.20-1-debian
    kubeadm             docker              desktop-storage-provisioner             v3.0
    kubeadm             docker              desktop-vpnkit-controller               v4.0
    kubeadm             docker              desktop-kubernetes-etcd                 3.6.4-0
    kubeadm             docker              desktop-kubernetes-coredns              v1.12.1
    kubeadm             docker              desktop-kubernetes-pause                3.10
    kubeadm             docker              desktop-kubernetes-apiserver            v1.34.1
    kubeadm             docker              desktop-kubernetes-controller-manager   v1.34.1
    kubeadm             docker              desktop-kubernetes-scheduler            v1.34.1
    kubeadm             docker              desktop-kubernetes-proxy                v1.34.1

    ما يجب ملاحظته: عشر صور لوضع kubeadm، جميعها موسومة بـv1.34.1 بالنسبة لمكوّنات control plane. تتعرّف على etcd وapiserver وcontroller-manager وscheduler وproxy وcoredns من الدرس 01. يستغرق التحميل من دقيقتين إلى خمس عشرة دقيقة؛ وتتحوّل أيقونة Kubernetes أسفل يسار النافذة من برتقالية (starting) إلى خضراء.

  6. انتبه جيداً لما سيحدث: استجواب Docker Desktop نفسه. يتحدّث الأمر docker desktop (أوامر فرعية kubernetes متاحة منذ الإصدار 4.44) إلى التطبيق، وليس إلى العفريت (daemon). إنه التحقق الأكثر موثوقية، حتى قبل kubectl.

    bash
    docker desktop status
    docker desktop kubernetes status

    المخرجات الحقيقية:

    text
    Name                Value
    Status              running
    SessionID           5bc01282-499f-4434-b135-f8ecf0a79886
    Field               Value
    ID:                 1758e244
    State:              running
    Mode:               kubeadm
    Node Count:         1
    Version:            v1.34.1
    Started At:         2026-09-10 21:27:23.469 -0400 EDT
    Progress Message:   Kubernetes is up and running
    Error:              None

    ما يجب ملاحظته: Status running بالنسبة للتطبيق، ثم State: running، وMode: kubeadm، وNode Count: 1، وVersion: v1.34.1، وProgress Message: Kubernetes is up and running، وError: None. أثناء بدء التشغيل، تكون قيمة State هي starting ويصف Progress Message الخطوة الجارية (Pulling images…، Starting control plane…). إذا كان إصدار Docker Desktop لديك أقدم من 4.44، فإن الأمر غير موجود: انتقل مباشرة إلى الخطوة التالية.

  7. التحقق من العقدة باستخدام kubectl. أغلق طرفيتك وأعد فتحها (تغيّر PATH)، ثم:

    bash
    kubectl get nodes -o wide

    المخرجات الحقيقية:

    text
    NAME             STATUS   ROLES           AGE   VERSION   INTERNAL-IP    EXTERNAL-IP   OS-IMAGE         KERNEL-VERSION                     CONTAINER-RUNTIME
    docker-desktop   Ready    control-plane   18d   v1.34.1   192.168.65.3   <none>        Docker Desktop   6.6.87.2-microsoft-standard-WSL2   docker://29.3.1

    ما يجب ملاحظته: Ready، وv1.34.1، وعنوان IP الداخلي 192.168.65.3 (عنوان الآلة الافتراضية، وليس عنوان جهازك)، ونواة WSL 2 (على macOS ستقرأ نواة linuxkit)، وruntime docker://29.3.1: يُشغّل Kubernetes حاوياته بنفس Docker الذي لديك. عندك سيُحسَب AGE بالثواني أو الدقائق.

  8. اطّلع على السياق الذي كتبه Docker Desktop. كل ما يعرفه kubectl عن كتلتك موجود في ~/.kube/config (C:\Users\<أنت>\.kube\config على Windows).

    bash
    kubectl config get-contexts
    kubectl config view --minify

    المخرجات الحقيقية (تحتفظ آلة الدورة بسياق قديم باسم minikube، مطفأ؛ عندك لن يكون هناك سوى docker-desktop):

    text
    CURRENT   NAME             CLUSTER          AUTHINFO         NAMESPACE
    *         docker-desktop   docker-desktop   docker-desktop
              minikube         minikube         minikube         default
    apiVersion: v1
    clusters:
    - cluster:
        certificate-authority-data: DATA+OMITTED
        server: https://kubernetes.docker.internal:6443
      name: docker-desktop
    contexts:
    - context:
        cluster: docker-desktop
        user: docker-desktop
      name: docker-desktop
    current-context: docker-desktop
    kind: Config
    users:
    - name: docker-desktop
      user:
        client-certificate-data: DATA+OMITTED
        client-key-data: DATA+OMITTED

    ما يجب ملاحظته: النجمة على docker-desktop، والخادم https://kubernetes.docker.internal:6443، ومصادقة بشهادة عميل (client-certificate-data) وُلّدت عند التفعيل. يعود الدرس 03 إلى موضوع السياقات.

  9. Windows: قراءة الإعداد من ملفه. مفيد يوم ترفض الواجهة الرسومية الفتح، أو للتحقق مما فعله زميل.

    powershell
    (Get-Content "$env:APPDATA\Docker\settings-store.json" -Raw | ConvertFrom-Json) | Select-Object KubernetesEnabled, KubernetesMode, ShowKubernetesSystemContainers | Format-List

    المخرجات الحقيقية:

    text
    KubernetesEnabled              : True
    KubernetesMode                 : kubeadm
    ShowKubernetesSystemContainers : True

    ما يجب ملاحظته: القيم الثلاث المُحدَّدة في الخطوة 5. لا تُعدّل هذا الملف يدوياً بينما يعمل Docker Desktop؛ مرّ عبر الواجهة. لا شيء لتنظيفه في هذا الدرس: لم تُنشئ شيئاً في الكتلة.

إذا واجهت مشكلة

  • تبقى أيقونة Kubernetes برتقالية، ويعرض docker desktop kubernetes status القيمة State: starting منذ أكثر من خمس عشرة دقيقة ← لا تُحمَّل صور الخطوة 5. ثلاثة أسباب بالترتيب: لا وصول إلى Docker Hub (شبكة شركة بوكيل proxy: Settings → Resources → Proxies، أو اسأل مسؤول شبكتك عن إعداد KubernetesImagesRepository)، أو القرص ممتلئ (docker system df)، أو حالة فاسدة بعد تحديث. في الحالة الأخيرة: Settings → Kubernetes → Reset Kubernetes cluster، ثم Apply & restart.
  • Unable to connect to the server: dial tcp 127.0.0.1:6443: connectex: No connection could be made because the target machine actively refused it. (على macOS/Linux: connect: connection refused) ← لا أحد يستمع على المنفذ 6443: Docker Desktop متوقف، أو Kubernetes غير مفعّل (أو لم يعد كذلك). شغّل Docker Desktop، تحقّق من docker desktop kubernetes statusState: running، أعد المحاولة. إذا ظهرت Error: … بدلاً من None، اقرأ الرسالة: غالباً ما تكون متعلّقة بالذاكرة.
  • يُجيب docker desktop kubernetes status بـState: running لكن kubectl get nodes يفشل، أو يُجيب عن كتلة أخرى ← ينظر kubectl لديك إلى مكان آخر (سياق minikube، kind-…، كتلة شركة). يجب أن يقول kubectl config current-context بـdocker-desktop؛ وإلا فـkubectl config use-context docker-desktop. التفاصيل في الدرس 03.
  • Windows: WSL 2 installation is incomplete أو فشل wsl --status ← نظام Windows الفرعي لـ Linux غير مثبَّت أو نواة WSL 2 مفقودة. wsl --install في PowerShell كمسؤول، إعادة تشغيل، ثم إعادة تشغيل Docker Desktop. إذا تحدّثت النافذة عن Virtual Machine Platform أو المحاكاة الافتراضية، فعّل Virtualization Technology (VT-x / AMD-V) في BIOS/UEFI: بدونها لن يُقلع لا WSL 2 ولا Docker Desktop.
  • يبدأ Kubernetes ثم يسقط، وتذكر Error: كلمة OOM أو تُعيد حاويات k8s_… التشغيل بشكل متكرر ← ذاكرة غير كافية للآلة الافتراضية. عُد إلى الخطوة 2 (Windows: .wslconfig، wsl --shutdown) أو 3 (macOS: Resources → Memory)، ثم Reset Kubernetes cluster إذا بقيت الحالة غير متّسقة.
  • لا يُعثَر على kubectl الخاص بـ Docker Desktop رغم أن Kubernetes يعمل ← على Windows، يضعه التثبيت «لكل مستخدم» في %LOCALAPPDATA%\Programs\DockerDesktop\resources\bin\kubectl.exe بدلاً من C:\Program Files\Docker\Docker\resources\bin؛ أضف المجلد الصحيح إلى PATH (الدرس 03) وأعد فتح الطرفية.

ما يجب تذكّره

  • يعمل Kubernetes الخاص بـ Docker Desktop داخل نفس الآلة الافتراضية Linux التي يعمل فيها Docker (docker-desktop تحت WSL 2)؛ تفعيله = Settings → Kubernetes → Enable Kubernetes → Apply & restart، أو واجهة Kubernetes → Create cluster (4.51+).
  • Kubeadm = عقدة واحدة، إصدار مفروض (v1.34.1 في 4.68): وضع الدورة؛ وkind = عدة عقد، إصدار حسب الاختيار، بدون مخزن صور Docker الكلاسيكي.
  • الذاكرة: 4 جيجابايت كحد أدنى، ويُوصى بـ 8 جيجابايت؛ على Windows %UserProfile%\.wslconfig (memory=8GB، processors=4) ثم wsl --shutdown.
  • يجب أن يعرض docker desktop kubernetes status القيم State: running، وNode Count: 1، وVersion: v1.34.1، وProgress Message: Kubernetes is up and running؛ ويجب أن يعرض kubectl get nodes -o wide القيم docker-desktop Ready control-plane.
  • تعني dial tcp 127.0.0.1:6443 … refused أن Docker Desktop متوقف أو Kubernetes معطّل، وليست أبداً مشكلة في ملف YAML الخاص بك.
  • الدرس القادم: kubectl، جهاز التحكم عن بُعد — الإصدارات، السياقات، تشريح أمر، وأول namespace باسم premiers-pas.

لمزيد من التعمّق

لا يُحدّث Docker Desktop كتلة Kubernetes عند تحديث التطبيق نفسه: ستبقى عقدتك على الإصدار v1.34.1 حتى تُنفّذ Reset Kubernetes cluster، الذي يُعيد إنشاء كتلة فارغة بالإصدار المُضمَّن في نسخة Docker Desktop الجديدة. هذا فرق جوهري عن كتلة مُدارة (EKS، GKE، AKS)، حيث يُهاجَر control plane ثم العقد دون فقدان الكائنات. تصف الصفحة الرسمية Deploy on Kubernetes with Docker Desktop طريقتي التزويد، وواجهة Kubernetes من لوحة التحكم، وإعداد KubernetesImagesRepository للشبكات التي لا تصل إلى Docker Hub؛ وفي جانب Kubernetes، تشرح صفحة Install Tools كيفية تثبيت kubectl بشكل منفصل إذا احتجته على آلة أخرى.