Εγκατάσταση Docker Desktop και ενεργοποίηση Kubernetes

12 λεπτά
Κοινό
αρχάριος, Windows 10/11, macOS ή Linux
Διάρκεια
30 έως 45 λεπτά (πλέον το κατέβασμα των εικόνων, 5 έως 15 λεπτά ανάλογα με τη σύνδεση)
Ενότητα
1/8
Στοχευόμενη δεξιότητα
να εγκαταστήσεις το Docker Desktop, να του δώσεις αρκετή μνήμη, να ενεργοποιήσεις το ενσωματωμένο cluster 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 μια VM Apple Virtualization, σε Linux μια VM QEMU. Η μηχανή Docker ζει μέσα της, και το Kubernetes επίσης: όταν το ενεργοποιείς, το Docker Desktop κατεβάζει τις εικόνες του control plane από το Docker Hub (docker/desktop-kubernetes, desktop-kubernetes-etcd, desktop-kubernetes-apiserver…), τις εκκινεί ως προνομιακά containers σε αυτή τη VM, παράγει τα πιστοποιητικά, έπειτα προσθέτει στο ~/.kube/config σου ένα context docker-desktop που δείχνει στο https://kubernetes.docker.internal:6443. Εγκαθιστά επίσης το kubectl (στο C:\Program Files\Docker\Docker\resources\bin σε Windows, /usr/local/bin/kubectl σε macOS): δεν έχεις τίποτα άλλο να κατεβάσεις.

Δύο τρόποι παροχής του cluster υπάρχουν από το Docker Desktop 4.38. Το Kubeadm δημιουργεί έναν μόνο κόμβο, με την έκδοση Kubernetes που επιλέγει το Docker Desktop (v1.34.1 στην 4.68)· είναι η προεπιλεγμένη λειτουργία και αυτή του μαθήματος. Το kind (Kubernetes in Docker) δημιουργεί πολλούς κόμβους, καθένας από τους οποίους είναι ένα container, και σε αφήνει να επιλέξεις την έκδοση· ξεκινά πιο γρήγορα αλλά δεν μοιράζεται το κλασικό αποθετήριο εικόνων 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 του chip σου)Settings → Resources → Memory, «Apply & restart»ναι
Linux (Ubuntu, Debian, Fedora…)Docker Desktop για Linux (.deb / .rpm) ή Docker Engine μόνοSettings → Resources (Desktop)· όλη η RAM (Engine)ναι με Docker Desktop· όχι με Docker Engine μόνο (χρησιμοποίησε τότε minikube ή kind)
Ρύθμιση Kubernetes (Settings → Kubernetes)Τι κάνειΗ επιλογή μας
Enable KubernetesΕγκαθιστά και εκκινεί το cluster· το ξετσεκάρισμα σταματά και διαγράφει τα containers του cluster και αφαιρεί το kubectlτσεκαρισμένο
Cluster provisioning methodKubeadm (1 κόμβος, επιβαλλόμενη έκδοση) ή kind (πολλοί κόμβοι, έκδοση κατ' επιλογή)Kubeadm
Show system containers (advanced)Δείχνει τα containers k8s_… του cluster στο docker psτσεκαρισμένο (χρήσιμο για κατανόηση, μάθημα 01 βήμα 7)
Reset Kubernetes clusterΔιαγράφει ολόκληρο το cluster (namespaces, Deployments, τόμους) και το ξαναδημιουργεί καθαρό· μόνος τρόπος για αλλαγή έκδοσης Kubernetesμόνο για αποσφαλμάτωση

Η ρύθμιση αποθηκεύεται σε ένα αρχείο JSON: σε Windows %APPDATA%\Docker\settings-store.json, κλειδί KubernetesEnabled (true/false) και KubernetesMode (kubeadm/kind). Το να το γνωρίζεις χρησιμεύει όταν η διεπαφή αρνείται να ανοίξει.

Βήμα προς βήμα

  1. Windows: εγκατάσταση WSL 2, έπειτα Docker Desktop. Άνοιξε το PowerShell ως διαχειριστής και εγκατάστησε το WSL αν δεν έχει ήδη γίνει (η εντολή δεν κάνει τίποτα αν το WSL υπάρχει):

    powershell
    wsl --install
    wsl --status

    Επανεκκίνησε αν σου ζητηθεί. Κατέβασε έπειτα το «Docker Desktop for Windows» από το docs.docker.com/desktop, εκκίνησε τον installer, άφησε τσεκαρισμένο το Use WSL 2 instead of Hyper-V, έπειτα ξεκίνα το Docker Desktop και περίμενε να σταματήσει να αναβοσβήνει το εικονίδιο της φάλαινας στη γραμμή εργασιών. Τι πρέπει να δεις:

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

    Η διανομή docker-desktop είναι η VM μέσα στην οποία θα τρέχουν το Docker και το Kubernetes. Αν το VERSION δείχνει 1, μετάτρεψέ την: wsl --set-version docker-desktop 2.

  2. Windows: δώσε μνήμη στο WSL 2. Από προεπιλογή το WSL παίρνει τη μισή RAM σου· συχνά αρκεί, αλλά για να μην εξαρτάσαι από την τύχη, όρισέ την. Δημιούργησε το αρχείο %UserProfile%\.wslconfig:

    powershell
    notepad $env:UserProfile\.wslconfig

    Επικόλλησε, αποθήκευσε, έπειτα επανεκκίνησε τη VM WSL (το Docker Desktop επανεκκινεί μόνο του από πίσω):

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

    Τι πρέπει να δεις, μόλις επιστρέψει το Docker Desktop: το docker info --format '{{.MemTotal}}' επιστρέφει έναν αριθμό κοντά στο 8 000 000 000 (στο μηχάνημα του μαθήματος, χωρίς όριο, επιστρέφει 33480151040, δηλαδή 31 GB). Το μάθημα λειτουργεί από 4 GB και πάνω· τα 8 GB σε βάζουν σε άνεση έως την ενότητα 8.

  3. macOS: εγκατάσταση και ρύθμιση της μνήμης. Κατέβασε το .dmg που αντιστοιχεί στο chip σου (Apple Silicon ή Intel), σύρε το Docker στο Applications, εκκίνησέ το. Έπειτα Settings (γρανάζι) → ResourcesAdvanced: σπρώξε το Memory στα 8 GB (4 GB ελάχιστο) και τα 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 πρέπει να λιστάρει το module) και μια γραφική συνεδρία. Το Docker Engine μόνο (docker-ce μέσω apt/dnf) δεν περιλαμβάνει Kubernetes: αν είσαι σε server ή προτιμάς το 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, όλες με tag 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 (αυτή της VM, όχι του μηχανήματός σου), ο πυρήνας WSL 2 (σε macOS θα διαβάσεις έναν πυρήνα linuxkit), και το runtime docker://29.3.1: το Kubernetes εκκινεί τα containers του με το ίδιο Docker όπως εσύ. Σε σένα το AGE μετριέται σε δευτερόλεπτα ή λεπτά.

  8. Δες το context που έγραψε το Docker Desktop. Όλα όσα ξέρει το kubectl για το cluster σου χωρούν στο ~/.kube/config (C:\Users\<εσύ>\.kube\config σε Windows).

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

    Πραγματική έξοδος (το μηχάνημα του μαθήματος κρατά ένα παλιό context 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, ο server https://kubernetes.docker.internal:6443, και μια αυθεντικοποίηση με πιστοποιητικό πελάτη (client-certificate-data) που παράχθηκε κατά την ενεργοποίηση. Το μάθημα 03 επανέρχεται στα contexts.

  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· πέρνα από τη διεπαφή. Τίποτα να καθαρίσεις σε αυτό το μάθημα: δεν δημιούργησες τίποτα στο cluster.

Αν κολλήσει

  • Το εικονίδιο 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 αποτυγχάνει, ή απαντά για άλλο cluster → το kubectl σου κοιτάζει αλλού (context minikube, kind-…, ένα εταιρικό cluster). Το 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 ή τα containers k8s_… επανεκκινούν σε βρόχο → δεν υπάρχει αρκετή μνήμη για τη VM. Επιστροφή στο βήμα 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 τρέχει στην ίδια VM 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 GB ελάχιστο, 8 GB συνιστώνται· σε 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, το τηλεχειριστήριο — εκδόσεις, contexts, ανατομία μιας εντολής, και το πρώτο σου namespace premiers-pas.

Για να πας παραπέρα

Το Docker Desktop δεν ενημερώνει το cluster Kubernetes όταν ενημερώνεται η εφαρμογή: ο κόμβος σου θα μείνει σε v1.34.1 μέχρι να κάνεις Reset Kubernetes cluster, που ξαναδημιουργεί ένα καθαρό cluster με την έκδοση που ενσωματώνει το νέο Docker Desktop. Είναι μια ουσιαστική διαφορά από ένα managed cluster (EKS, GKE, AKS), όπου μεταναστεύεις το control plane και έπειτα τους κόμβους χωρίς να χάσεις τα αντικείμενα. Η επίσημη σελίδα Deploy on Kubernetes with Docker Desktop περιγράφει τους δύο provisioners, την προβολή Kubernetes του πίνακα ελέγχου και τη ρύθμιση KubernetesImagesRepository για δίκτυα χωρίς πρόσβαση στο Docker Hub· από την πλευρά του Kubernetes, το Install Tools εξηγεί πώς να εγκαταστήσεις το kubectl ξεχωριστά αν το χρειάζεσαι σε άλλο μηχάνημα.