პროექტის შესავალი
თქვენი გზა კონტეინერების დაუფლებისკენ
ყოვლისმომცველი, პრაქტიკული სახელმძღვანელო Docker-ისა და Kubernetes-ის დასაუფლებლად. საბაზისო კონტეინერებიდან მოწინავე ორკესტრაციამდე.
რატომ უნდა ვისწავლოთ კონტეინერიზაცია და ორკესტრაცია?
From Docker to Kubernetes არის ღია კოდის სასწავლო რესურსი, რომელიც შექმნილია კონტეინერიზაციისა და ორკესტრაციის ტექნოლოგიების დაუფლებაში დასახმარებლად. ეს პრაქტიკული სახელმძღვანელო პროგრესულ გზას გაგატარებთ — დაწყებული Docker-ის საფუძვლებიდან და გაგრძელებული რეალურ სამყაროში Kubernetes-ის დანერგვამდე.კონტეინერული რევოლუცია
კონტეინერებმა რევოლუცია მოახდინეს აპლიკაციების შექმნის, მიწოდებისა და გაშვების პროცესში, შემდეგი უპირატესობების შეთავაზებით:
- თანმიმდევრულობა: იდენტური გარემოები დეველოპმენტიდან პროდაქშენამდე
- პორტაბელურობა: გაშვება ყველგან - ლეპტოპზე, ლოკალურ სერვერზე ან ნებისმიერ ღრუბელში
- ეფექტურობა: მსუბუქი ალტერნატივები ტრადიციული ვირტუალური მანქანებისთვის
- მასშტაბირებადობა: კონკრეტული სერვისების მარტივი მასშტაბირება საჭიროებისამებრ
- იზოლაცია: გაძლიერებული უსაფრთხოება და რესურსების მართვა
სასწავლო გზის მიმოხილვა
Docker-ის საფუძვლები
დაეუფლეთ კონტეინერიზაციის სამშენებლო ბლოკებს, სანამ მრავალკონტეინერიან ორკესტრაციაზე გადახვალთ
Kubernetes-ის ორკესტრაცია
გააფართოვეთ თქვენი ცოდნა კონტეინერების შესახებ, რათა მართოთ განაწილებული აპლიკაციები კლასტერებში
რეალური დანერგვები
გამოიყენეთ კონტეინერული ტექნოლოგია რეალური პროდაქშენის გამოწვევების გადასაჭრელად
უსაფრთხოება და საუკეთესო პრაქტიკები
დანერგეთ ინდუსტრიული სტანდარტები უსაფრთხო, ეფექტური კონტეინერიზებული აპლიკაციებისთვის
Docker-ის საფუძვლები
Docker-ი არის კარიბჭე კონტეინერიზაციის სამყაროში. ჩვენი ყოვლისმომცველი მასალა მოიცავს:კონტეინერის ძირითადი კონცეფციები
კონტეინერის საფუძვლები
- კონტეინერის არქიტექტურა: როგორ მუშაობს კონტეინერები ტექნიკურ დონეზე
- Linux-ის პრიმიტივები: Namespaces, cgroups და union filesystems
- OCI სპეციფიკაციები: ინდუსტრიული სტანდარტები კონტეინერის ფორმატებისა და გაშვების გარემოებისთვის
- კონტეინერის იზოლაცია: პროცესის, ქსელისა და ფაილური სისტემის საზღვრები
- კონტეინერის სიცოცხლის ციკლი: შექმნა, გაშვება, დაპაუზება, შეჩერება და წაშლა
კონტეინერებთან მუშაობა
- კონტეინერის ბრძანებები: Docker CLI-ის დაუფლება
- ინტერაქტიული გარსები: გაშვებულ კონტეინერებთან დაკავშირება
- კონტეინერის ინსპექტირება: მეტამონაცემებისა და გაშვების ინფორმაციის ნახვა
- რესურსების შეზღუდვები: CPU-ს, მეხსიერებისა და სხვა ლიმიტების დაწესება
- პრივილეგირებული კონტეინერები: გამოყენების შემთხვევები და უსაფრთხოების შედეგები
- კონტეინერის ქსელის საფუძვლები: პორტების გამოქვეყნება და საბაზისო კავშირი
Dockerfile-ის დაუფლება
- Dockerfile-ის სინტაქსი: ბრძანებები, არგუმენტები და საუკეთესო პრაქტიკები
- საბაზისო იმიჯები: მინიმალური საბაზისო იმიჯების შერჩევა და შექმნა
- ფენების ოპტიმიზაცია: იმიჯის ზომისა და შექმნის დროის მინიმიზაცია
- Build context: იმის გაგება, თუ რა იგზავნება Docker დემონთან
- მრავალეტაპიანი build-ები: build-ისა და გაშვების გარემოების გამოყოფა
- BuildKit-ის ფუნქციები: გაუმჯობესებული build-ის შესაძლებლობები
იმიჯების მართვა
- იმიჯის თეგირება: ვერსიონირების სტრატეგიები და კონვენციები
- იმიჯის ინსპექტირება: იმიჯის შიგთავსისა და მეტამონაცემების ანალიზი
- იმიჯის საცავი: ლოკალური და დისტანციური რეგისტრები
- იმიჯის ხელმოწერა: მიწოდების ჯაჭვის მთლიანობის უზრუნველყოფა
- ქეშირების სტრატეგიები: build-ების ოპტიმიზაცია ფენების ქეშირების გამოყენებით
- იმიჯის გასუფთავება: დისკის სივრცის მართვა და გამოუყენებელი იმიჯების წაშლა
Docker-ის მოწინავე ფუნქციები
ქსელი
- ქსელის დრაივერები: Bridge, host, overlay, macvlan და none
- მომხმარებლის მიერ განსაზღვრული ქსელები: იზოლირებული ქსელური გარემოების შექმნა
- კონტეინერის DNS: სერვისების აღმოჩენა Docker-ის ქსელებში
- ქსელის ტოპოლოგიები: გავრცელებული პატერნები და მათი გამოყენების შემთხვევები
- კონტეინერებს შორის კომუნიკაცია: პირდაპირი კავშირები და ქსელები
- სერვისების გამოქვეყნება: პორტების გამოქვეყნება და მარშრუტიზაციის mesh
- ქსელის უსაფრთხოება: იზოლაცია და წვდომის კონტროლი
საცავი და ვოლუმები
- ვოლუმის ტიპები: დასახელებული ვოლუმები, bind mounts და tmpfs mounts
- ვოლუმის დრაივერები: ლოკალური და დისტანციური საცავის ოპციები
- მონაცემთა მდგრადობა: მდგომარეობიანი აპლიკაციების სტრატეგიები
- სარეზერვო ასლის შექმნა და აღდგენა: ვოლუმის მონაცემების დაცვა
- გაზიარებული საცავი: ერთსა და იმავე მონაცემებზე წვდომა სხვადასხვა კონტეინერიდან
- საცავის წარმადობა: I/O-ს ოპტიმიზაცია კონტეინერიზებული აპლიკაციებისთვის
Docker Compose
- Compose ფაილის სტრუქტურა: YAML კონფიგურაცია მრავალკონტეინერიანი აპლიკაციებისთვის
- სერვისის დეფინიციები: კონტეინერის ოპციების დეკლარაციული კონფიგურაცია
- დამოკიდებულებები: გაშვების რიგისა და სერვისებს შორის ურთიერთობების მართვა
- გარემოს ცვლადები: კონფიგურაციისა და საიდუმლოებების მართვა
- ქსელები და ვოლუმები: მდგრადი რესურსების განსაზღვრა
- სერვისების მასშტაბირება: კონტეინერების მრავალი ინსტანსის გაშვება
- Compose გაფართოებები: კონფიგურაციის ხელახალი გამოყენება გაფართოებებით
მოწინავე თემები
- Docker contexts: მრავალი Docker გარემოს მართვა
- Docker content trust: ხელმოწერილი იმიჯის ვერიფიკაცია
- რესურსების მონიტორინგი: კონტეინერის წარმადობის თვალყურის დევნება
- ლოგირების დრაივერები: კონტეინერის ლოგების მართვის კონფიგურაცია
- Health checks: კონტეინერის ჯანმრთელობის მონიტორინგის დანერგვა
- Docker-ის უსაფრთხოების სკანირება: იმიჯებში მოწყვლადობების პოვნა
- Docker Swarm: ჩაშენებული ორკესტრაციის შესაძლებლობები
Kubernetes-ის ორკესტრაცია
Kubernetes-ს კონტეინერების მართვა შემდეგ დონეზე გადაჰყავს, რაც მასშტაბირებადი, მდგრადი აპლიკაციების შექმნის საშუალებას იძლევა:Kubernetes-ის ძირითადი კონცეფციები
არქიტექტურა და კომპონენტები
- Control plane: API Server, etcd, Scheduler, Controller Manager
- Worker nodes: kubelet, container runtime, kube-proxy
- კლასტერის მოდელები: ერთ-კვანძიანი, მრავალ-კვანძიანი, მაღალი ხელმისაწვდომობა
- კომუნიკაციის პატერნები: როგორ ურთიერთქმედებენ კომპონენტები
- API ვერსიონირება: Kubernetes API-ის ევოლუციის გაგება
- Kubernetes-ის დისტრიბუციები: განსხვავებები იმპლემენტაციებს შორის
Pod-ები და Workload-ები
- Pod-ები: დანერგვის ფუნდამენტური ერთეული
- მრავალკონტეინერიანი Pod-ები: Sidecar, adapter და ambassador პატერნები
- Pod-ის სიცოცხლის ციკლი: შექმნა, დაგეგმვა, შეწყვეტა
- Deployments: Replica set-ების და rollout-ების მართვა
- StatefulSets: მდგომარეობიანი აპლიკაციების გაშვება
- DaemonSets: კვანძის დონის სერვისები და აგენტები
- Jobs & CronJobs: სერიული დამუშავება და დაგეგმილი ამოცანები
- ReplicaSets: Pod-ების რეპლიკაციის დაბალი დონის კონტროლერები
კონფიგურაცია
- ConfigMaps: კონფიგურაციის მონაცემების მართვა
- Secrets: სენსიტიური ინფორმაციის შენახვა
- გარემოს ცვლადები: Pod-ის კონფიგურაციის ინექცია
- რესურსების მოთხოვნები და ლიმიტები: CPU-სა და მეხსიერების სპეციფიკაციები
- Pod disruption budgets: ხელმისაწვდომობის უზრუნველყოფა განახლებების დროს
- Namespaces: რესურსების ლოგიკური იზოლაცია
- Labels & annotations: მეტამონაცემები ორგანიზაციისა და ინსტრუმენტებისთვის
ქსელის საფუძვლები
- Kubernetes-ის ქსელის მოდელი: ძირითადი პრინციპები და მოთხოვნები
- Pod-ების ქსელი: როგორ ურთიერთობენ Pod-ები
- Services: სტაბილური წვდომის წერტილები Pod-ებისთვის
- Service-ის ტიპები: ClusterIP, NodePort, LoadBalancer, ExternalName
- Network policies: Pod-ის დონის firewall-ები
- DNS რეზოლუცია: სერვისების აღმოჩენის მექანიზმები
- CNI plugins: კლასტერის ქსელის კონფიგურაცია
Kubernetes-ის მოწინავე ფუნქციები
მოწინავე დანერგვა
- Rolling updates: აპლიკაციის პროგრესული გამოშვება
- Blue/green deployments: გარემოს შეცვლა შეფერხების გარეშე
- Canary releases: ტესტირება ნაწილობრივი ტრაფიკით
- Feature flags: დანერგვის გამოყოფა გამოშვებისგან
- Helm charts: Kubernetes აპლიკაციების შეფუთვა
- Kustomize: კონფიგურაციის მორგება შაბლონების გარეშე
- GitOps workflows: Git-ზე ორიენტირებული დანერგვის პატერნები
საცავი და მდგრადობა
- Persistent Volumes (PV): კლასტერის დონის საცავის რესურსები
- Persistent Volume Claims (PVC): საცავის მოთხოვნები
- Storage Classes: დინამიური პროვიჟენინგი
- Volume snapshot & restore: მონაცემთა დაცვის სტრატეგიები
- StatefulSet-ის საცავი: სტაბილური საცავი მდგომარეობიანი აპლიკაციებისთვის
- CSI drivers: ჩასართავი საცავის ინტეგრაცია
- საცავის წარმადობა: ოპტიმიზაცია სხვადასხვა დატვირთვისთვის
მოწინავე ქსელი
- Ingress controllers: HTTP/HTTPS მარშრუტიზაცია სერვისებისკენ
- Ingress resources: მარშრუტის კონფიგურაცია
- Service mesh: Istio, Linkerd და მსგავსი ტექნოლოგიები
- Mutual TLS: სერვისებს შორის დაშიფვრა
- East-west traffic: შიდა სერვისების კომუნიკაცია
- North-south traffic: გარე კლიენტების კომუნიკაცია
- Load balancing algorithms: ტრაფიკის განაწილების ალგორითმები
დაკვირვებადობა და ოპერაციები
- ლოგირების არქიტექტურა: კლასტერისა და აპლიკაციის ლოგები
- მეტრიკების შეგროვება: Prometheus-თან ინტეგრაცია
- ვიზუალიზაცია: Grafana-ს დაფები
- განაწილებული ტრეისინგი: მოთხოვნების ნაკადების გაგება
- გაფრთხილებები: პროაქტიული შეტყობინებების სისტემები
- გამართვის ტექნიკები: Pod-ებისა და სერვისების პრობლემების მოგვარება
- რესურსების მონიტორინგი: ტევადობისა და გამოყენების თვალყურის დევნება
უსაფრთხოება და შესაბამისობა
Docker-ის უსაფრთხოება
- კონტეინერის იზოლაცია: უსაფრთხოების საზღვრები და შეზღუდვები
- Rootless კონტეინერები: root პრივილეგიების გარეშე გაშვება
- უსაფრთხოების სკანირება: იმიჯებში მოწყვლადობების პოვნა
- Runtime უსაფრთხოება: საეჭვო ქცევის მონიტორინგი
- საიდუმლოებების მართვა: სენსიტიური მონაცემების დაცვა
- Docker Bench for Security: საუკეთესო პრაქტიკების გამოყენება
- Content trust: იმიჯების ხელმოწერა და ვერიფიკაცია
Kubernetes-ის უსაფრთხოება
- ავთენტიფიკაციის მექანიზმები: სერტიფიკატები, ტოკენები, OIDC
- ავტორიზაცია: RBAC, ABAC, Node, Webhook
- Admission controllers: მოთხოვნების ვალიდაცია და მუტაცია
- Pod-ის უსაფრთხოების სტანდარტები: საბაზისო, შეზღუდული, პრივილეგირებული
- Pod-ის უსაფრთხოების კონტექსტი: მომხმარებლის ID-ები, ჯგუფის ID-ები, შესაძლებლობები
- Network policies: მიკროსეგმენტაცია
- საიდუმლოებების დაშიფვრა: სენსიტიური მონაცემების დაცვა შენახვისას
- უსაფრთხოების სკანირება: მოწყვლადობების მართვა
მოწინავე თემები
Kubernetes-ის გაფართოება
- Custom Resource Definitions (CRDs): API-ის გაფართოება
- Operators: აპლიკაციის ოპერაციების ავტომატიზაცია
- Custom controllers: ბიზნეს ლოგიკის იმპლემენტაცია
- Webhooks: API მოთხოვნების მოდიფიკაცია და ვალიდაცია
- API aggregation: მორგებული API სერვერების დამატება
- Operator SDK: ოპერატორების ეფექტურად შექმნა
- Kubernetes Gateway API: შემდეგი თაობის ქსელი
პროდაქშენისთვის მზადყოფნა
- მაღალი ხელმისაწვდომობის კონფიგურაციები: მდგრადი control plane-ები
- მრავალ-კლასტერული მართვა: ფედერაცია და ფლოტის მართვა
- კატასტროფისგან აღდგენა: სარეზერვო ასლის შექმნისა და აღდგენის სტრატეგიები
- განახლების სტრატეგიები: შეფერხების მინიმიზაცია განახლებების დროს
- რესურსების ოპტიმიზაცია: დატვირთვების სწორი ზომის შერჩევა
- ხარჯების მართვა: ღრუბლოვანი ხარჯების კონტროლი
- შესაბამისობა: მარეგულირებელი მოთხოვნების დაკმაყოფილება
მოწინავე ავტომასშტაბირება
- Horizontal Pod Autoscaler: მასშტაბირება მეტრიკების მიხედვით
- Vertical Pod Autoscaler: რესურსების ავტომატური კორექტირება
- Cluster Autoscaler: კვანძების დინამიური პროვიჟენინგი
- Custom metrics: მასშტაბირება ბიზნეს მეტრიკებზე
- პროგნოზირებადი მასშტაბირება: დატვირთვის ცვლილებების წინასწარ განსაზღვრა
- მრავალგანზომილებიანი ავტომასშტაბირება: მიდგომების კომბინირება
- Scale to zero: Serverless პატერნები Kubernetes-ში
DevOps და CI/CD ინტეგრაცია
კონტეინერიზაცია და ორკესტრაცია ყველაზე კარგად მუშაობს, როდესაც ინტეგრირებულია თანამედროვე DevOps სამუშაო პროცესებში:უწყვეტი ინტეგრაცია და მიწოდება
CI/CD Pipeline-ები
- კონტეინერზე დაფუძნებული CI/CD: ეფექტური pipeline-ების შექმნა
- მრავალეტაპიანი ტესტირება: ერთეულის, ინტეგრაციული და end-to-end ტესტები
- იმიჯის შექმნის ავტომატიზაცია: იმიჯების აგება და ვერსიონირება
- არტეფაქტების მართვა: იმიჯების შენახვა და გავრცელება
- დანერგვის ავტომატიზაცია: GitOps და push-ზე დაფუძნებული მიდგომები
- Rollback სტრატეგიები: წარუმატებელი დანერგვებიდან აღდგენა
- Pipeline-ის ოპტიმიზაცია: სიჩქარისა და საიმედოობის გაუმჯობესება
GitOps და ინფრასტრუქტურა როგორც კოდი
- GitOps-ის პრინციპები: Git-ი, როგორც ჭეშმარიტების ერთადერთი წყარო
- Pull-ზე დაფუძნებული დანერგვები: კლასტერის რეკონსილაცია
- GitOps ინსტრუმენტები: Flux, ArgoCD და ალტერნატივები
- ინფრასტრუქტურა როგორც კოდი: Terraform, Pulumi კონტეინერებთან
- პოლიტიკა როგორც კოდი: OPA, Kyverno და შესაბამისობის ავტომატიზაცია
- საიდუმლოებების მართვა: Vault, Sealed Secrets ინტეგრაცია
- პროგრესული მიწოდება: Feature flags და canary releases
::
ღრუბლოვან პლატფორმებთან ინტეგრაცია
კონტეინერები მუშაობს სხვადასხვა გარემოში, სპეციალიზებული ფუნქციებით სხვადასხვა ღრუბელში:
AWS კონტეინერული სერვისები
- Amazon Elastic Container Service (ECS)
- Amazon Elastic Kubernetes Service (EKS)
- AWS Fargate (serverless კონტეინერები)
- ECR (Elastic Container Registry)
- AWS App Mesh (service mesh)
- AWS Proton (დანერგვის პლატფორმა)
Google Cloud Platform
- Google Kubernetes Engine (GKE)
- Cloud Run (serverless კონტეინერები)
- Artifact Registry
- GKE Autopilot
- Cloud Build
- Anthos (ჰიბრიდული/მრავალ-ღრუბლოვანი)
Microsoft Azure
- Azure Kubernetes Service (AKS)
- Azure Container Instances
- Azure Container Registry
- Azure App Service
- Azure Container Apps
- Azure Service Fabric
სამიზნე აუდიტორია
ეს ყოვლისმომცველი სახელმძღვანელო განკუთვნილია სხვადასხვა როლისა და გამოცდილების დონის მქონე ადამიანებისთვის:
დეველოპერები
ისწავლეთ აპლიკაციების კონტეინერიზაცია, ეფექტური იმიჯების შექმნა და გაიგეთ, როგორ მუშაობს კონტეინერები პროდაქშენ გარემოში
DevOps ინჟინრები
დაეუფლეთ კონტეინერების ორკესტრაციას, დანერგეთ CI/CD pipeline-ები და მართეთ ინფრასტრუქტურა ეფექტურად კონტეინერების გამოყენებით
პლატფორმის ინჟინრები
დააპროექტეთ და დანერგეთ კონტეინერული პლატფორმები, რომლებიც დეველოპერულ გუნდებს თვითმომსახურების შესაძლებლობებს აძლევს
სტუდენტები და თვითნასწავლები
შეიძინეთ პრაქტიკული უნარები თანამედროვე cloud-native ტექნოლოგიებში, რომლებიც სულ უფრო მოთხოვნადია სამუშაო ბაზარზე
სასწავლო გზა
ჩვენი სტრუქტურირებული სასწავლო მიდგომა უზრუნველყოფს ცოდნის პროგრესულად დაგროვებას:
დაიწყეთ კონტეინერის ძირითადი კონცეფციებით, Dockerfile-ებით და საბაზისო ბრძანებებით ერთი კონტეინერის გასაშვებად.
ისწავლეთ კონტეინერების დაკავშირება Docker Compose-ისა და კონტეინერული ქსელის გამოყენებით.
გაიგეთ Kubernetes-ის არქიტექტურა და დანერგეთ საბაზისო აპლიკაციები კლასტერში.
დაეუფლეთ მდგომარეობიან აპლიკაციებს, დანერგვის მოწინავე სტრატეგიებსა და custom რესურსებს.
ისწავლეთ უსაფრთხოება, მასშტაბირება, მონიტორინგი და პროდაქშენში დანერგვის სხვა ასპექტები.
დანერგეთ ავტომატიზირებული pipeline-ები კონტეინერიზებული აპლიკაციების შესაქმნელად, ტესტირებისა და დანერგვისთვის.
წინაპირობები
- ტექნიკური ფონი: ბრძანებათა ხაზთან მუშაობის საბაზისო ცოდნა და ვებ აპლიკაციების გაგება
- სისტემური მოთხოვნები: კომპიუტერი მინიმუმ 8GB RAM-ით და 20GB თავისუფალი დისკის სივრცით
- პროგრამული უზრუნველყოფა: დაინსტალირებული Docker (ინსტრუქციები შემდეგ სექციაში)
- სურვილისამებრ: ღრუბლოვანი პროვაიდერის ანგარიში ზოგიერთი მოწინავე სავარჯიშოსთვის (AWS/GCP/Azure)
პრაქტიკული მიდგომა
ეს სახელმძღვანელო ხაზს უსვამს კეთებით სწავლას. თითოეული თემა მოიცავს:
- კონცეპტუალური ახსნები: ტექნოლოგიების მიღმა არსებული "რატომ"-ის გაგება
- ნაბიჯ-ნაბიჯ გაკვეთილები: მკაფიო ინსტრუქციები პრაქტიკული იმპლემენტაციისთვის
- რეალური სამყაროს მაგალითები: აპლიკაციები, რომლებიც საუკეთესო პრაქტიკების დემონსტრირებას ახდენს
- სავარჯიშოები და გამოწვევები: თქვენი ცოდნის შემოწმებისა და გაფართოების შესაძლებლობები
- პრობლემების მოგვარების სახელმძღვანელოები: გავრცელებული პრობლემების გადაწყვეტა, რომლებსაც შეიძლება წააწყდეთ
დაწყება
მზად ხართ დაიწყოთ თქვენი მოგზაურობა კონტეინერების სამყაროში? მიჰყევით ამ ნაბიჯებს:
თქვენი შემდეგი ნაბიჯები
- დააინსტალირეთ Docker-ისა და Kubernetes-ის ინსტრუმენტები ჩვენი ინსტალაციის სახელმძღვანელოს გამოყენებით
- ისწავლეთ Docker-ის საფუძვლები, რათა გაიგოთ კონტეინერების საფუძვლები
- შექმენით თქვენი პირველი კონტეინერი ჩვენი პრაქტიკული გაკვეთილით
- შექმენით მრავალკონტეინერიანი აპლიკაციები Docker Compose-ის გამოყენებით
- დანერგეთ Kubernetes-ში, რათა გამოსცადოთ კონტეინერების ორკესტრაცია