Registry და დისტრიბუცია
ისწავლეთ Docker-ის registry-ების, image-ების დისტრიბუციისა და რეპოზიტორიების მართვის შესახებ
Docker Registry
Docker registry არის Docker image-ების შენახვისა და დისტრიბუციის სპეციალიზებული სისტემა. ის ფუნქციონირებს როგორც ცენტრალიზებული რეპოზიტორი, სადაც კონტეინერის image-ები შეიძლება შეინახოს, ვერსიონირდეს და გაზიარდეს სხვადასხვა სისტემებსა და მომხმარებლებს შორის. მყარი registry გადაწყვეტა საშუალებას გაძლევთ:
- შეინახოთ Docker image-ები უსაფრთხოდ ვერსიების კონტროლით
- ეფექტურად გაავრცელოთ image-ები development, testing და production გარემოებში
- მართოთ image-ების ვერსიები თეგირებითა და მეტამონაცემებით
- აკონტროლოთ წვდომა image-ებზე ავთენტიფიკაციისა და ავტორიზაციის მექანიზმებით
- თვალყური ადევნოთ image-ების მოწყვლადობებს და აღასრულოთ უსაფრთხოების პოლიტიკები
- მოახდინოთ საცავის ოპტიმიზაცია image-ის ფენების დედუპლიკაციით
Registry-ების ტიპები
Docker Hub
- საჯარო registry სერვისი, რომელსაც მართავს Docker, Inc.
- უფასო პაკეტი საჯარო რეპოზიტორიებისთვის შეზღუდული ლიმიტებით (100/200 pull-ი 6 საათში ანონიმური/ავთენტიფიცირებული მომხმარებლებისთვის)
- სააბონენტო გეგმები კერძო რეპოზიტორიებისა და უფრო მაღალი ლიმიტებისთვის
- ოფიციალური image-ები, რომლებსაც ინახავს Docker-ი და დამოწმებული გამომცემლები სანდო კონტენტისთვის
- ავტომატიზებული build-ები, რომლებიც გამოწვეულია დაკავშირებულ რეპოზიტორიებში საწყისი კოდის ცვლილებებით
- Webhook-ები CI/CD მილსადენებთან და სხვა სისტემებთან ინტეგრაციისთვის
- მოწყვლადობის სკანირება image-ებში უსაფრთხოების პრობლემების გამოსავლენად
- გუნდის მართვა ერთობლივი development-ისთვის
კერძო Registry
- თვით-ჰოსტირებული გადაწყვეტა თქვენს საკუთარ ინფრასტრუქტურაში
- სრული კონტროლი მონაცემთა მდებარეობაზე, შენახვისა და უსაფრთხოების პოლიტიკებზე
- ქსელის იზოლაციის შესაძლებლობები air-gapped ან მაღალი უსაფრთხოების გარემოებისთვის
- ინტეგრაცია შიდა სისტემებთან, როგორიცაა LDAP/Active Directory
- მორგებადი საცავის backend-ები (filesystem, S3, Azure Blob და ა.შ.)
- დეტალური წვდომის კონტროლის პოლიტიკები
- გარე ლიმიტებისა და სააბონენტო გადასახადების გარეშე
- აუდიტის ლოგირება შესაბამისობისა და უსაფრთხოების თვალყურის დევნებისთვის
- მორგებული ვალიდაციისა და უსაფრთხოების პოლიტიკების დანერგვის შესაძლებლობა
ღრუბლოვანი პროვაიდერების Registry-ები
- AWS Elastic Container Registry (ECR)
- მშობლიური ინტეგრაცია AWS IAM-თან წვდომის კონტროლისთვის
- სასიცოცხლო ციკლის პოლიტიკები ავტომატური გასუფთავებისთვის
- რეგიონებს შორის რეპლიკაცია გაუმჯობესებული ხელმისაწვდომობისთვის
- Image-ების სკანირება Amazon ECR-ით და ინტეგრაცია Amazon Inspector-თან
- Google Container Registry (GCR) / Artifact Registry
- ინტეგრაცია Google Cloud IAM-თან
- ჩაშენებული მოწყვლადობის სკანირება
- გლობალური ხელმისაწვდომობა რეგიონალური საცავით
- ინტეგრაცია Google Cloud Build-თან
- Azure Container Registry (ACR)
- გეო-რეპლიკაცია Azure რეგიონებში
- ინტეგრაცია Azure Active Directory-სთან
- WebHook-ები build-ისა და deployment-ის ავტომატიზაციისთვის
- Premium პაკეტი გთავაზობთ გაძლიერებულ გამტარუნარიანობასა და მასშტაბირებადობას
- Digital Ocean Container Registry
- ინტეგრაცია Digital Ocean Kubernetes-თან
- რეგიონალური საცავის ოფციები
- მარტივი ფასების მოდელი
- GitHub Container Registry (GHCR)
- მჭიდრო ინტეგრაცია GitHub Actions-თან
- დეტალური უფლებები, რომლებიც შეესაბამება GitHub-ის მოდელს
- ანონიმური წვდომა საჯარო image-ებისთვის
- OCI არტეფაქტების მხარდაჭერა კონტეინერის image-ების მიღმა
Docker Hub-თან მუშაობა
Docker Hub არის Docker-ის ნაგულისხმევი registry, რომელიც გთავაზობთ მარტივ სამუშაო პროცესს image-ების შესანახად და გასაზიარებლად:
Docker Hub-თან მუშაობისას გაითვალისწინეთ:
- pull-ების ლიმიტები (განსაკუთრებით CI/CD გარემოში)
- image-ზე წვდომის კონტროლი (საჯარო vs. კერძო)
- ორგანიზაციის ანგარიშები გუნდური თანამშრომლობისთვის
- ავტომატიზებული build-ები განახლებული image-ების შესანარჩუნებლად
კერძო Registry-ს დაყენება
შეგიძლიათ გაუშვათ საკუთარი registry ოფიციალური Docker registry image-ის გამოყენებით. კერძო registry გაძლევთ სრულ კონტროლს თქვენი image-ების შენახვასა და დისტრიბუციაზე:
არა-localhost registry-ებისთვის, შეიძლება დაგჭირდეთ Docker daemon-ის კონფიგურაცია, რომ ენდოს არასაიმედო registry-ს, მისი /etc/docker/daemon.json-ში დამატებით:
Production-ში გამოყენებისთვის, ყოველთვის დააკონფიგურირეთ TLS სერტიფიკატები უსაფრთხო კომუნიკაციისთვის.
Image-ების დისტრიბუციის სტრატეგიები
განიხილეთ ეს სტრატეგიები image-ების ეფექტური დისტრიბუციისთვის:
- გამოიყენეთ მრავალეტაპიანი build-ები მცირე image-ებისთვის
- შეამცირეთ image-ის ზომა build-დროისა და runtime დამოკიდებულებების გამოყოფით
- საბოლოო image-ში ჩართეთ მხოლოდ production-ისთვის აუცილებელი კომპონენტები
- მცირე image-ები ამცირებს ქსელის გადაცემის დროსა და შენახვის ხარჯებს
- მაგალითი: ააგეთ ერთ ეტაპზე, დააკოპირეთ მხოლოდ კომპილირებული არტეფაქტები runtime ეტაპზე
- დანერგეთ ფენების ქეშირება
- დაალაგეთ Dockerfile-ის ინსტრუქციები ნაკლებად ხშირად ცვლადიდან ყველაზე ხშირად ცვლადამდე
- დააჯგუფეთ დაკავშირებული ბრძანებები ფენების შექმნის ოპტიმიზაციისთვის
- გამოიყენეთ BuildKit-ის გაუმჯობესებული ქეშირების შესაძლებლობები
- დააქეშეთ დამოკიდებულებები აპლიკაციის კოდისგან ცალკე
- განიხილეთ content-addressable საცავის გამოყენება
- მოახდინეთ იდენტური ფენების დედუპლიკაცია სხვადასხვა image-ებში
- შეამცირეთ შენახვის საერთო მოთხოვნები
- გააუმჯობესეთ pull-ის ეფექტურობა საერთო ფენების მქონე image-ებისთვის
- უზრუნველყავით image-ების უფრო ეფექტური დისტრიბუცია
- დანერგეთ image-ების თეგირების სათანადო სტრატეგიები
- გამოიყენეთ სემანტიკური ვერსიონირება (major.minor.patch)
- ჩართეთ build-ის მეტამონაცემები (git commit, build-ის ნომერი)
- გამოიყენეთ უცვლელი თეგები production deployment-ებისთვის
- განიხილეთ სპეციალიზებული თეგები სხვადასხვა გარემოსთვის (dev, staging, prod)
- დაადოკუმენტირეთ თქვენი თეგირების კონვენცია გუნდის თანმიმდევრულობისთვის
- დააყენეთ registry-ს სარკეები განაწილებული გუნდებისთვის
- შეამცირეთ გარე გამტარუნარიანობის გამოყენება და გააუმჯობესეთ pull-ის სიჩქარე
- უზრუნველყავით სიჭარბე registry-ს შეფერხების შემთხვევაში
- განათავსეთ სარკეები გეოგრაფიულად მომხმარებლებთან ახლოს
- დააკონფიგურირეთ pull-through ქეშირება ხშირად გამოყენებული image-ებისთვის
- დანერგეთ ავტომატური სინქრონიზაცია registry-ებს შორის
თქვენი Registry-ს დაცვა
სათანადო უსაფრთხოება აუცილებელია ნებისმიერი Docker registry-სთვის, განსაკუთრებით production გარემოში.
ძირითადი ავთენტიფიკაცია
ძირითადი ავთენტიფიკაცია უზრუნველყოფს მარტივ მომხმარებლის სახელისა და პაროლის დაცვას თქვენი registry-სთვის:
ავთენტიფიკაცია ასევე შეიძლება ინტეგრირდეს LDAP, OAuth, ან სხვა გარე პროვაიდერებთან საწარმოო გარემოსთვის.
TLS კონფიგურაცია
TLS დაშიფვრა კრიტიკულია registry-ს კომუნიკაციების დასაცავად:
საცავის კონფიგურაცია
დააკონფიგურეთ backend საცავის ოფციები production-დონის registry deployment-ისთვის:
წვდომის კონტროლი
უფრო გაფართოებული წვდომის კონტროლისთვის:
Registry API
Docker Registry HTTP API უზრუნველყოფს პროგრამულ წვდომას registry-ს ოპერაციებზე. ეს RESTful API საშუალებას გაძლევთ მოითხოვოთ, მართოთ და იმოქმედოთ registry-ს მონაცემებთან Docker CLI-ს გამოყენების გარეშე.
Registry API იძლევა ავტომატიზაციის საშუალებას:
- CI/CD მილსადენებისთვის, რომლებსაც სჭირდებათ image-ის არსებობის შემოწმება
- მორგებული ინტერფეისებისა და მართვის ინსტრუმენტებისთვის
- Registry-ს მიგრაციის სკრიპტებისთვის
- ავტომატიზებული გასუფთავებისა და მოვლისთვის
- სხვა სისტემებთან ინტეგრაციისთვის
მესამე მხარის Registry ოფციები
ძირითადი Docker Registry-ს გარდა, ხელმისაწვდომია მრავალი სპეციალიზებული registry გადაწყვეტა:
ღრუბლოვანი პროვაიდერების Registry-ები
- Amazon Elastic Container Registry (ECR)
- ღრმად ინტეგრირებულია AWS სერვისებთან (ECS, EKS, Lambda)
- კერძო რეპოზიტორიები IAM ავთენტიფიკაციით
- სასიცოცხლო ციკლის პოლიტიკები ავტომატიზებული image-ების გასუფთავებისთვის
- მოწყვლადობის სკანირება Amazon Inspector-ით
- რეგიონებსა და ანგარიშებს შორის რეპლიკაცია
- გადაიხადე-გამოყენებისამებრ ფასების მოდელი
- Google Container Registry (GCR) / Artifact Registry
- მშობლიური ინტეგრაცია Google Cloud Build-თან და GKE-სთან
- ავტომატური მოწყვლადობის სკანირება
- IAM წვდომის კონტროლი და აუდიტის ლოგირება
- რეგიონალური საცავი გლობალური წვდომით
- Docker, OCI და ენაზე-სპეციფიური პაკეტების მხარდაჭერა
- შენახვის ფასი + მონაცემთა გადაცემის ხარჯები
- Azure Container Registry (ACR)
- ინტეგრირებულია Azure DevOps-თან და AKS-თან
- Premium პაკეტი გეო-რეპლიკაციით
- ავტომატიზებული build-ები Tasks-ით
- Content trust image-ების ხელმოწერისთვის
- იარუსიანი ფასები (Basic, Standard, Premium)
- Webhook-ების მხარდაჭერა build-ისა და deployment-ის ავტომატიზაციისთვის
- DigitalOcean Container Registry
- მარტივი ინტეგრაცია DO Kubernetes-თან
- პირდაპირი ფასები შენახვის იარუსების მიხედვით
- გლობალური ხელმისაწვდომობა
- ინტეგრირებული მოწყვლადობის სკანირება
თვით-ჰოსტირებული გადაწყვეტილებები
- Harbor
- ღია კოდის, საწარმოზე-ორიენტირებული registry
- როლზე დაფუძნებული წვდომის კონტროლი
- პოლიტიკაზე დაფუძნებული image-ების რეპლიკაცია
- მოწყვლადობის სკანირების ინტეგრაცია
- Image-ების ხელმოწერა და ვერიფიკაცია
- მრავალი registry-სა და Helm chart-ების მხარდაჭერა
- WebHook-ები მოვლენების შეტყობინებისთვის
- აუდიტის ლოგირება შესაბამისობისთვის
- Nexus Repository
- მრავალ-ფორმატიანი არტეფაქტების მართვა (არა მხოლოდ Docker)
- მხარდაჭერა npm, Maven, NuGet, PyPI და ა.შ.
- როლზე დაფუძნებული წვდომის კონტროლი
- კომპონენტების სასიცოცხლო ციკლის მართვა
- რეპოზიტორიის ჯანმრთელობის შემოწმება
- ხელმისაწვდომია უფასო OSS და კომერციულ გამოცემებში
- დისტანციური რეპოზიტორიების პროქსირება და ქეშირება
- JFrog Artifactory
- უნივერსალური არტეფაქტების მართვის პლატფორმა
- მაღალი ხელმისაწვდომობის კონფიგურაცია
- გაფართოებული უსაფრთხოების ფუნქციები
- მეტამონაცემებზე დაფუძნებული ძებნა
- Build-ის ინტეგრაცია
- ვრცელი REST API
- კომერციული შეთავაზება საწარმოო მხარდაჭერით
- რეპლიკაციისა და ფედერაციის შესაძლებლობები
- GitLab Container Registry
- ინტეგრირებულია GitLab CI/CD-სთან
- ჩაშენებულია GitLab-ის ინსტალაციებში
- პროექტზე დაფუძნებული უფლებები
- მოწყვლადობის სკანირება
- Image-ების გასუფთავების პოლიტიკები
- არ საჭიროებს დამატებით კონფიგურაციას GitLab-თან
Image-ების ხელმოწერა და სანდოობა
Image-ების ხელმოწერა უზრუნველყოფს კონტეინერის image-ების ავთენტურობასა და მთლიანობას. Docker Content Trust (DCT) იძლევა როგორც გამომცემლის, ასევე image-ების შინაარსის ვერიფიკაციის საშუალებას.
საწარმოო გარემოსთვის:
- დანერგეთ Notary გაფართოებული ხელმოწერის სამუშაო პროცესებისთვის
- დააყენეთ უსაფრთხო ოფლაინ root გასაღები
- დაადგინეთ გასაღებების როტაციის პოლიტიკა
- დააკონფიგურეთ CI/CD სისტემები image-ების ავტომატურად ხელმოსაწერად
- ინტეგრაცია მოახდინეთ მოწყვლადობის სკანირებასთან, რათა ხელი მოეწეროს მხოლოდ უსაფრთხო image-ებს
- გამოიყენეთ admission controller-ები Kubernetes-ში ხელმოწერების ვერიფიკაციისთვის
DCT ქმნის ორი ტიპის გასაღებს:
- Root გასაღები: მთავარი გასაღები, რომელიც უსაფრთხოდ უნდა ინახებოდეს ოფლაინ
- რეპოზიტორიის გასაღებები: გამოიყენება კონკრეტული რეპოზიტორიების ხელმოსაწერად
ჩართვისას, Docker-ი ჩამოტვირთავს მხოლოდ ხელმოწერილ image-ებს დამოწმებული ხელმოწერებით.
Registry-ს ნაგვის შეგროვება
Registry-ები დროთა განმავლობაში აგროვებენ გამოუყენებელ ფენებს, როდესაც image-ები განახლდება ან იშლება. ნაგვის შეგროვება ათავისუფლებს ამ საცავის ადგილს "dangling" blob-ების წაშლით.
მნიშვნელოვანი მოსაზრებები ნაგვის შეგროვებისთვის:
- Registry უნდა იყოს მხოლოდ წაკითხვის რეჟიმში ნაგვის შეგროვების დროს კორუფციის თავიდან ასაცილებლად
- წაშლილი მანიფესტები შეიძლება კვლავ გამოჩნდეს API-ს შედეგებში, სანამ registry არ გადაიტვირთება
- განიხილეთ დაგეგმილი ნაგვის შეგროვების დაყენება production registry-ებისთვის
- გამოიყენეთ registry-ს საცავის კვოტები მოულოდნელი ზრდის თავიდან ასაცილებლად
- დააკვირდეთ საცავის გამოყენებას ნაგვის შეგროვებამდე და შემდეგ
- ზოგიერთ საცავის დრაივერს აქვს ნაგვის შეგროვების სპეციფიური მოსაზრებები
ყოველკვირეული ნაგვის შეგროვების cron სამუშაოს მაგალითი:
Registry-ს კონფიგურაცია
Docker Registry ძალიან კონფიგურირებადია მისი config.yml ფაილის საშუალებით. ქვემოთ მოცემულია ანოტირებული მაგალითი გავრცელებული კონფიგურაციის ოფციებით:
გავრცელებული კონფიგურაციის გამოყენების შემთხვევები:
- მაღალი ხელმისაწვდომობის დაყენება: დააკონფიგურირეთ registry-ს მრავალი ინსტანცია გაზიარებული საცავით
- წარმადობის ოპტიმიზაცია: დაარეგულირეთ ქეშის პარამეტრები და დანერგეთ Redis
- უსაფრთხოების გამკაცრება: დააკონფიგურირეთ TLS, ავთენტიფიკაცია და ავტორიზაცია
- საცავის მართვა: დააყენეთ კვოტები, ნაგვის შეგროვება და საცავის დრაივერები
- ინტეგრაცია: დააკონფიგურირეთ webhook-ები მოვლენების შეტყობინებისთვის
- შესაბამისობა: ჩართეთ აუდიტის ლოგირება და წვდომის კონტროლი
საუკეთესო პრაქტიკები
ამ საუკეთესო პრაქტიკების დანერგვა დაგეხმარებათ თქვენი კონტეინერის registry-ს ეფექტურად და უსაფრთხოდ მართვაში:
თეგირების სტრატეგია
- გამოიყენეთ სემანტიკური ვერსიონირება (SemVer)
- ფორმატი: MAJOR.MINOR.PATCH (მაგ., 1.2.3)
- MAJOR: მსხვრევადი ცვლილებები
- MINOR: ახალი ფუნქციები, უკუთავსებადი
- PATCH: შეცდომების გასწორება, უკუთავსებადი
- ჩართეთ build-ის ინფორმაცია
- დაამატეთ build-ის ნომრები ან დროის ნიშნულები
- ფორმატის მაგალითები:
1.2.3-build.4561.2.3-20230415.11.2.3-alpha.1,1.2.3-beta.2,1.2.3-rc.1
- არასდროს გამოიყენოთ "latest" production-ში
- "latest" ცვალებადია და არაპროგნოზირებადი
- ართულებს ან შეუძლებელს ხდის rollback-ებს
- ართულებს აუდიტსა და ვერსიონირებას
- ბუნდოვანს ხდის, რომელი ვერსია მუშაობს რეალურად
- დაათეგეთ git commit ჰეშებით
- უზრუნველყოფს პირდაპირ მიკვლევადობას საწყის კოდამდე
- ფორმატის მაგალითი:
1.2.3-a7ff23e - სასარგებლოა კონკრეტული ვერსიების დებაგინგისთვის
- შეიძლება ავტომატიზირდეს CI/CD მილსადენებში
- განიხილეთ დაიჯესტის მითითებების გამოყენება
- უცვლელი და ხელყოფისგან დაცული
- ფორმატი:
image@sha256:digest - გარანტიას იძლევა image-ის ზუსტ შინაარსზე
- შეიძლება გამოყენებულ იქნას მოწყვლადობის სკანერებთან
- საუკეთესოა უსაფრთხოება-კრიტიკული deployment-ებისთვის
- დანერგეთ თეგების სასიცოცხლო ციკლის პოლიტიკები
- მოახდინეთ ძველი თეგების გასუფთავების ავტომატიზაცია
- შეინარჩუნეთ მნიშვნელოვანი ისტორიული ვერსიები
- დაადოკუმენტირეთ შენახვის პოლიტიკები
უსაფრთხოება
- რეგულარული მოწყვლადობის სკანირება
- ინტეგრაცია მოახდინეთ სკანერებთან, როგორიცაა Trivy, Clair, ან Anchore
- დაბლოკეთ მოწყვლადი image-ების deployment-ი
- დააკონფიგურირეთ არსებული image-ების დაგეგმილი ხელახალი სკანირება
- თვალყური ადევნეთ CVE-ებს და დააპატჩეთ დაზარალებული image-ები
- Image-ების ხელმოწერა
- დანერგეთ Docker Content Trust
- გამოიყენეთ Notary გაფართოებული ხელმოწერის სამუშაო პროცესებისთვის
- აღასრულეთ ხელმოწერის ვერიფიკაცია pull-ისას
- შეინახეთ root გასაღებები უსაფრთხოდ ოფლაინ
- პერიოდულად მოახდინეთ ხელმოწერის გასაღებების როტაცია
- წვდომის კონტროლი
- დანერგეთ მინიმალური პრივილეგიების პრინციპი
- გამოიყენეთ namespace-ები პროექტების იზოლაციისთვის
- დააკონფიგურირეთ როლზე დაფუძნებული წვდომის კონტროლი
- რეგულარულად ჩაატარეთ მომხმარებლის წვდომის აუდიტი
- დანერგეთ დამტკიცების სამუშაო პროცესები მგრძნობიარე რეპოზიტორიებისთვის
- აუდიტის ლოგირება
- დალოგეთ registry-ს ყველა ოპერაცია
- დააფიქსირეთ ვინ, რა, როდის ინფორმაცია
- შეინახეთ ლოგები უსაფრთხოდ და უცვლელად
- დააყენეთ შეტყობინებები საეჭვო აქტივობებზე
- შეინახეთ ლოგები შესაბამისობის მოთხოვნებისთვის
- გადააგზავნეთ ლოგები SIEM სისტემებში
- რეგულარული ნაგვის შეგროვება
- დაგეგმეთ რუტინული ნაგვის შეგროვება
- დააკვირდეთ საცავის გამოყენებას
- დააკონფიგურირეთ შენახვის პოლიტიკები
- დანერგეთ image-ების სასიცოცხლო ციკლის მართვა
- წაშალეთ უთეგო და მოძველებული image-ები
- ქსელის უსაფრთხოება
- გამოიყენეთ TLS 1.2+ registry-ს ყველა ტრაფიკისთვის
- დანერგეთ სათანადო სერტიფიკატების მართვა
- განიხილეთ ქსელის სეგმენტაცია
- გამოიყენეთ VPN-ები ან კერძო ენდფოინთები წვდომისთვის
ეფექტურობა
- ფენების ქეშირება
- მოახდინეთ Dockerfile-ების ოპტიმიზაცია ქეშის გამოყენებისთვის
- გამოიყენეთ BuildKit-ის გაუმჯობესებული ქეშირება
- დანერგეთ გაზიარებული build-ის ქეშები CI/CD-ში
- დააკონფიგურირეთ შესაბამისი ქეშის სიცოცხლის ხანგრძლივობა
- განიხილეთ დისტანციური ქეშირება განაწილებული გუნდებისთვის
- ოპტიმიზირებული საცავის backend-ები
- შეარჩიეთ შესაბამისი backend მასშტაბისთვის (S3, Azure Blob და ა.შ.)
- დააკონფიგურირეთ შეკუმშვის პარამეტრები
- დანერგეთ მონაცემთა დედუპლიკაცია, სადაც ხელმისაწვდომია
- დააკვირდეთ საცავის წარმადობის მეტრიკებს
- დანერგეთ სასიცოცხლო ციკლის პოლიტიკები ავტომატიზებული მართვისთვის
- Pull-through ქეშირება
- დააყენეთ პროქსი registry-ები ხშირად გამოყენებული image-ებისთვის
- დააქეშეთ გარე image-ები ლოკალურად გამტარუნარიანობის შესამცირებლად
- დააკონფიგურირეთ შესაბამისი ქეშის TTL მნიშვნელობები
- დაგეგმეთ ქეშის გახურება კრიტიკული image-ებისთვის
- დანერგეთ health check-ები upstream registry-ებისთვის
- დატვირთვის ბალანსირება
- გაანაწილეთ registry-ს დატვირთვა მრავალ ინსტანციაზე
- დანერგეთ round-robin ან სხვა დატვირთვის ბალანსირების სტრატეგიები
- დააკონფიგურირეთ კავშირების დაცლა მოვლისთვის
- დააკვირდეთ თითოეული ინსტანციის წარმადობის მეტრიკებს
- დააყენეთ მაღალი ხელმისაწვდომობის კლასტერები
- გეოგრაფიული განაწილება
- განათავსეთ registry-ები მომხმარებლებთან/კლასტერებთან ახლოს
- დანერგეთ registry-ს რეპლიკაცია რეგიონებში
- გამოიყენეთ კონტენტის მიწოდების ქსელები, სადაც მიზანშეწონილია
- დააკონფიგურირეთ ჭკვიანი მარშრუტიზაცია კლიენტის მდებარეობის მიხედვით
- მოახდინეთ მეტამონაცემების სინქრონიზაცია განაწილებულ ინსტანციებს შორის
დისტრიბუციის სტრატეგიები
Best practices for image distribution:
- გამოიყენეთ სემანტიკური ვერსიონირება თეგებისთვის
- დაიცავით MAJOR.MINOR.PATCH კონვენცია
- ჩართეთ მეტამონაცემები, როგორიცაა build-ის ნომერი, git ჰეში
- დაადოკუმენტირეთ თეგირების პოლიტიკები ყველა მომხმარებლისთვის
- დანერგეთ CI/CD მილსადენები ავტომატური push-ებისთვის
- ააგეთ და ატვირთეთ ყოველ commit-ზე ან PR merge-ზე
- დააკონფიგურირეთ მილსადენ-სპეციფიური რწმუნებათა სიგელები
- დანერგეთ ხარისხის კარიბჭეები ატვირთვამდე
- დაათეგეთ როგორც ვერსიით, ასევე git ჰეშით მიკვლევადობისთვის
- დაასკანირეთ image-ები მოწყვლადობებზე დისტრიბუციამდე
- ინტეგრაცია მოახდინეთ სკანირების ინსტრუმენტებთან CI/CD მილსადენში
- დაბლოკეთ დისტრიბუცია კრიტიკული მოწყვლადობების მქონე image-ებისთვის
- შექმენით მასალების სია შესაბამისობისთვის
- დანერგეთ არსებული image-ების უწყვეტი ხელახალი სკანირება
- დანერგეთ image-ების დაწინაურების სამუშაო პროცესები გარემოებში
- გამოიყენეთ ცალკეული რეპოზიტორიები ან თეგები dev/staging/prod-ისთვის
- დანერგეთ ცხადი დაწინაურების პროცესი
- არასდროს ააგოთ ხელახლა დაწინაურებისთვის - გამოიყენეთ იგივე image-ი
- შეინარჩუნეთ დაწინაურების აუდიტის კვალი
- დანერგეთ დამტკიცების კარიბჭეები production-ში დაწინაურებისთვის
- მოახდინეთ ძველი image-ების გასუფთავების ავტომატიზაცია
- დანერგეთ შენახვის პოლიტიკები ასაკის ან რაოდენობის მიხედვით
- შეინარჩუნეთ production-ში განთავსებული image-ები
- რეგულარულად გაუშვით ნაგვის შეგროვება
- შეინარჩუნეთ წაშლილი image-ების აუდიტის კვალი
- გაითვალისწინეთ იურიდიული/შესაბამისობის მოთხოვნები შენახვისთვის
- დაადოკუმენტირეთ image-ების გამოყენება და მოთხოვნები
- ჩართეთ README image-ების რეპოზიტორიებში
- დაადოკუმენტირეთ გარემოს ცვლადები და volume-ები
- მიუთითეთ რესურსების მოთხოვნები
- ჩართეთ health check-ის ინფორმაცია
- დაადოკუმენტირეთ განახლების პროცედურები
- ჩამოთვალეთ დამოკიდებულებების თავსებადი ვერსიები
Image-ის ფენებთან მუშაობა
ფენების გაგება
- Dockerfile-ის თითოეული ინსტრუქცია ქმნის ფენას
- ყოველი RUN, COPY, ADD ბრძანება ქმნის ახალ ფენას
- სხვა ინსტრუქციები ქმნის მხოლოდ მეტამონაცემების ცვლილებებს
- ფენები წარმოადგენს ფაილური სისტემის განსხვავებებს
- მაქსიმუმ 127 ფენა თითო image-ზე (პრაქტიკული ლიმიტი)
- ძველმა image-ებმა შეიძლება გამოიყენონ სხვადასხვა ფენების ტექნოლოგია
- ფენები ქეშირდება და ხელახლა გამოიყენება
- უცვლელი ფენები იყენებენ ქეშს build-ების დროს
- ქეშის ინვალიდაცია ხდება პირველი ცვლილებისას
- ყველა შემდგომი ფენა ხელახლა უნდა აიგოს
- დაალაგეთ ინსტრუქციები ნაკლებად ხშირად ცვლადიდან ყველაზე ხშირად ცვლადამდე
- გამოიყენეთ .dockerignore ქეშის ინვალიდაციის თავიდან ასაცილებლად
- ეფექტური დისტრიბუცია ეყრდნობა ფენების გაზიარებას
- საერთო ფენები ინახება ერთხელ დისკზე
- ერთი და იგივე ბაზის მქონე image-ები იზიარებენ საძირკვლის ფენებს
- Registry გადასცემს მხოლოდ დაკარგულ ფენებს
- აუმჯობესებს pull-ის წარმადობას და ამცირებს შენახვის ადგილს
- იძლევა ეფექტური ფართომასშტაბიანი deployments-ების საშუალებას
- საბაზისო image-ები ქმნიან საერთო საძირკვლის ფენებს
- შეარჩიეთ შესაბამისი საბაზისო image-ები გაზიარებისთვის
- განიხილეთ ორგანიზაცია-სპეციფიური საბაზისო image-ების გამოყენება
- საბაზისო image-ებზე სტანდარტიზაცია ზრდის გაზიარებას
- რეგულარულად განაახლეთ საბაზისო image-ები უსაფრთხოების პატჩებისთვის
- თვალყური ადევნეთ საბაზისო image-ების გამოყენებას ორგანიზაციაში
- pull-ის დროს გადაიცემა მხოლოდ შეცვლილი ფენები
- Docker კლიენტი ამოწმებს, რომელი ფენები აქვს უკვე
- Registry ემსახურება მხოლოდ დაკარგულ ფენებს
- ფენები მოწმდება content-addressable ჰეშებით
- ქსელის გადაცემა მინიმიზირებულია
- განიხილეთ squashing production-ისთვის, თუ გაზიარება არ არის სასარგებლო
ფენების მართვა
ფენების ოპტიმიზაცია
- დააჯგუფეთ დაკავშირებული ბრძანებები ფენების რაოდენობის შესამცირებლად
- გამოიყენეთ მრავალეტაპიანი build-ები build-მხოლოდ ფენების აღმოსაფხვრელად
- წაშალეთ დროებითი ფაილები იმავე ფენაში, სადაც ისინი იქმნება
- განიხილეთ ფენების squashing production image-ებისთვის
- გამოიყენეთ შესაბამისი საბაზისო image-ები ფენების გაზიარების მაქსიმიზაციისთვის
მრავალ-Registry ოპერაციები
მრავალ registry-სთან მუშაობა გავრცელებულია საწარმოო გარემოში, სადაც შეიძლება გქონდეთ შიდა registry-ები development-ისთვის და გარე registry-ები დისტრიბუციისთვის.
მრავალ registry-სთან მუშაობისას გაითვალისწინეთ:
- registry-ების registry-ს დანერგვა (ფედერაცია)
- სინქრონიზაციის დაყენება registry-ებს შორის
- რწმუნებათა სიგელების უსაფრთხოდ მართვა
- თანმიმდევრული დასახელების კონვენციების დანერგვა registry-ებში
- image-ების წარმომავლობის თვალყურის დევნება, როდესაც ისინი registry-ებს შორის გადაადგილდებიან
Image-ების სარკირება და ქეშირება
Registry-ს სარკეებს შეუძლიათ გააუმჯობესონ pull-ის წარმადობა, შეამცირონ გარე გამტარუნარიანობის გამოყენება და უზრუნველყონ სიჭარბე. ისინი მუშაობენ caching images from upstream registries locally.
საკუთარი registry-ს სარკის დაყენება pull-through ქეშირებით:
Registry-ს სარკეების უპირატესობები:
- შემცირებული გარე გამტარუნარიანობის მოხმარება
- უფრო სწრაფი image-ების pull-ები ხშირად გამოყენებული image-ებისთვის
- დაცვა upstream registry-ს შეფერხებებისგან
- ლიმიტების თავიდან აცილება (განსაკუთრებით Docker Hub-ისთვის)
- image-ების გამოყენების აუდიტისა და კონტროლის შესაძლებლობა
დიდი ორგანიზაციებისთვის განიხილეთ:
- იერარქიული სარკირების არქიტექტურა
- სარკეების გეოგრაფიული განაწილება
- ავტომატური health check-ები და failover
- ქეშის დარტყმის/გაცდენის კოეფიციენტების მონიტორინგი
- გამოუყენებელი ქეშირებული image-ების პერიოდული გასუფთავება
გაფართოებული თემები
Content Trust
- image-ების ხელმოწერა და ვერიფიკაცია
- დანერგეთ Notary ხელმოწერების მართვისთვის
- დააკონფიგურირეთ ცალკეული გასაღებები სხვადასხვა გარემოსთვის
- დაადოკუმენტირეთ გასაღებების მართვის პროცედურები
- დანერგეთ აპარატურული უსაფრთხოების მოდულები გასაღებების შესანახად
- დააყენეთ ავტომატური ხელმოწერა CI/CD მილსადენებში
- image-ის ავთენტურობის უზრუნველყოფა
- დაადასტურეთ გამომცემლის იდენტობა
- დაადასტურეთ, რომ შინაარსი არ შეცვლილა
- შეამოწმეთ ხელმოწერის სიახლე და ვადის გასვლა
- დანერგეთ სანდოობის ჯაჭვის ვალიდაცია
- ინტეგრაცია უსაფრთხო პროგრამული უზრუნველყოფის მიწოდების ჯაჭვთან
- ხელყოფის თავიდან აცილება
- შეინახეთ ხელმოწერები image-ებისგან ცალკე
- გამოიყენეთ ზღურბლური ხელმოწერა კრიტიკული image-ებისთვის
- დანერგეთ გასაღებების როტაციის პროცედურები
- დააკვირდეთ არაავტორიზებული ხელმოწერის მცდელობებს
- დალოგეთ ყველა ვერიფიკაციის აქტივობა
- ჩართვა daemon.json-ში
- ვერიფიკაცია deployment-მდე
- დაამატეთ ვერიფიკაციის ნაბიჯები deployment მილსადენებში
- დაბლოკეთ deployment ხელმოუწერელი image-ების
- დანერგეთ პოლიტიკის კონტროლერები Kubernetes-ში
- დაადოკუმენტირეთ ვერიფიკაციის მოთხოვნები
- დაამატეთ ხელმოწერის მეტამონაცემები deployment არტეფაქტებს
Registry API
- RESTful API
- კარგად დოკუმენტირებული ენდფოინთები
- სტანდარტული HTTP სტატუს კოდები
- JSON პასუხის ფორმატი
- ავთენტიფიკაცია Bearer ტოკენებით
- სიჩქარის შეზღუდვისა და throttling-ის კონტროლი
- Image-ების მანიპულაცია
- Push და pull ოპერაციები
- ფენების ატვირთვა და ჩამოტვირთვა
- რეპოზიტორიებს შორის blob-ების მიმაგრება
- Image-ების მანიფესტების მართვა
- Content addressable blob-ების საცავი
- რეპოზიტორიის მართვა
- რეპოზიტორიების სია და ძებნა
- თეგების მართვის ოპერაციები
- წვდომის კონტროლის კონფიგურაცია
- რეპოზიტორიის მეტამონაცემების დამუშავება
- Namespace-ების ორგანიზაცია
- კატალოგის ოპერაციები
- პაგინირებული რეპოზიტორიების სია
- ძებნისა და ფილტრაციის შესაძლებლობები
- მეტამონაცემების აგრეგაცია
- თეგების ჩამოთვლა
- რეპოზიტორიებს შორის ოპერაციები
- Webhook-ების ინტეგრაცია
- მოვლენებზე დაფუძნებული შეტყობინებები
- მორგებული მოვლენების ფილტრაცია
- მიწოდების ხელახალი ცდის მექანიზმები
- ავთენტიფიკაცია webhook-ების ენდფოინთებისთვის
- Webhook-ების მიწოდების ლოგირება და აუდიტი
ნაგვის შეგროვება
გაფართოებული საცავის მართვა
- დანერგეთ საცავის კვოტები თითოეულ რეპოზიტორიაზე/namespace-ზე
- დააკონფიგურირეთ ავტომატური გასუფთავების პოლიტიკები
- დააყენეთ საცავის ანალიტიკა და მონიტორინგი
- დანერგეთ მონაცემთა შეკუმშვა საცავის ეფექტურობისთვის
- დააკონფიგურირეთ რეგიონებს შორის რეპლიკაცია კატასტროფისგან აღდგენისთვის
პრობლემების მოგვარება
გავრცელებული registry-ს პრობლემები და გადაწყვეტილებები:
- ავთენტიფიკაციის წარუმატებლობა
- შეამოწმეთ რწმუნებათა სიგელები ~/.docker/config.json-ში
- დაადასტურეთ ტოკენის ვადის გასვლა და განაახლეთ საჭიროების შემთხვევაში
- დაადასტურეთ, რომ მომხმარებელს აქვს შესაბამისი უფლებები
- შეამოწმეთ registry-ს ლოგები auth შეცდომებისთვის
- შეამოწმეთ ავთენტიფიკაცია პირდაპირ curl-ით:
- ქსელური კავშირი
- დაადასტურეთ firewall-ისა და პროქსის პარამეტრები
- შეამოწმეთ DNS რეზოლუცია registry-ს ჰოსტის სახელისთვის
- შეამოწმეთ ძირითადი კავშირი ping/telnet-ით
- შეამოწმეთ registry-ს ლოგები კავშირის შეცდომებისთვის
- შეამოწმეთ Docker daemon-ის ქსელის კონფიგურაცია
- დაადასტურეთ, რომ ქსელის პოლიტიკები უშვებს registry-ს ტრაფიკს
- შეამოწმეთ curl-ით პროქსის გვერდის ავლით:
- სერტიფიკატის პრობლემები
- უზრუნველყავით სათანადო TLS კონფიგურაცია
- დაადასტურეთ სერტიფიკატის მოქმედების ვადა
- შეამოწმეთ, რომ სერტიფიკატის ჯაჭვი სრულია
- დაადასტურეთ, რომ ჰოსტის სახელი ემთხვევა სერტიფიკატის CN/SAN-ს
- დაამატეთ CA სერტიფიკატები სანდო საცავში
- თვით-ხელმოწერილი სერტიფიკატებისთვის, დააკონფიგურეთ Docker კლიენტი:
- საცავის პრობლემები
- შეამოწმეთ დისკის სივრცე და კვოტები
- დაადასტურეთ ფაილური სისტემის უფლებები
- შეამოწმეთ საცავის დრაივერის ლოგები
- გაუშვით ფაილური სისტემის შემოწმებები საცავის volume-ებზე
- დააკვირდეთ I/O წარმადობის მეტრიკებს
- განიხილეთ საცავის backend-ის მასშტაბირებადობა
- გაუშვით დიაგნოსტიკური ბრძანებები:
- სიჩქარის შეზღუდვა
- გაითვალისწინეთ registry-ს pull-ის ლიმიტები (განსაკუთრებით Docker Hub)
- დანერგეთ ავთენტიფიცირებული pull-ები ლიმიტების გასაზრდელად
- დააკონფიგურირეთ registry-ს სარკეები image-ების ქეშირებისთვის
- გამოიყენეთ pull-through ქეში ხშირად გამოყენებული image-ებისთვის
- გაანაწილეთ pull-ები მრავალ ანგარიშზე საჭიროების შემთხვევაში
- დააკვირდეთ სიჩქარის შეზღუდვის ჰედერებს:
- ფენების ხელმისაწვდომობა
- დარწმუნდით, რომ ყველა ფენა ხელმისაწვდომია
- შეამოწმეთ არასრული ატვირთვები ან გადაცემები
- დაადასტურეთ საცავის backend-ის მთლიანობა
- გაუშვით registry-ს ნაგვის შეგროვება მშრალი გაშვებით
- ხელახლა ატვირთეთ image-ები, თუ ფენები დაზიანებულია
- აღადგინეთ სარეზერვო ასლებიდან საჭიროების შემთხვევაში
- შეამოწმეთ ფენის ჩამოტვირთვა პირდაპირ:
- წარმადობის პრობლემები
- დააკვირდით registry-ს რესურსების გამოყენებას
- დააკონფიგურირეთ შესაბამისი ქეშის პარამეტრები
- დანერგეთ ეფექტური საცავის backend-ები
- საჭიროების შემთხვევაში, მოახდინეთ registry-ს ჰორიზონტალური მასშტაბირება
- გამოიყენეთ CDN ფართომასშტაბიანი დისტრიბუციისთვის
- გააანალიზეთ registry-ს მეტრიკები:
- Registry-ს კორუფცია
- შექმენით registry-ს მონაცემების სარეზერვო ასლი შეკეთებამდე
- დაადასტურეთ ფაილური სისტემის მთლიანობა
- ხელახლა დააინდექსირეთ დაზიანებული რეპოზიტორიები
- განიხილეთ registry-ს ნულიდან აგება
- დანერგეთ რეგულარული მთლიანობის შემოწმებები