Linux კონტეინერების სახელმძღვანელო: შესავალი კონტეინერებში

კონტეინერები უკვე წლებია, რაც მთავარია... მაგრამ რა არის ისინი?

კონტეინერები არის ვირტუალური აპლიკაციების გაშვების მეთოდი თქვენს კომპიუტერზე, ვირტუალური მანქანების მსგავსი, მაგრამ ძირითადი ტექნოლოგიების სხვადასხვა ნაკრების გამოყენებით. ისინი შეიძლება იყოს რთული გასაგები, მაგრამ ისინი აუცილებელია ყველაფრის გასაშვებად Minecraft სერვერები Google-ში. და ჩვენ ვაპირებთ გაჩვენოთ როგორ დააყენოთ ისინი.

ჩვენ გამოვიყენებთ Linux-ს, ოპერაციულ სისტემას, რომელიც აგებულია პორტაბელურობაზე, მოდულარულობასა და სტაბილურობაზე. Linux არის ყველაფერში, სერვერებიდან მიკროტალღურ ღუმელამდე და ვიდეო თამაშების კონსოლებამდე. კონტეინერები არ შემოიფარგლება მხოლოდ Linux-ზე გაშვებით, მაგრამ მათ მიღმა არსებული ტექნოლოგიები საუკეთესოდ შეეფერება და მუშაობს Linux-ზე. თუ თქვენ ახალი ხართ Linux-ში, გირჩევთ გაეცნოთ ჩვენს დამწყებთათვის სახელმძღვანელო ჩასვლამდე.

კონტეინერები ვირტუალური მანქანებია?

კონტეინერები შეიძლება იყოს რთული თემა, მაგრამ უმჯობესია დავიწყოთ ერთი ძირითადი პუნქტით: კონტეინერი არის არა ვირტუალური მანქანა. ვირტუალური მანქანა არის კონკრეტული აპარატურის და მისი პროგრამული უზრუნველყოფის სიმულირებული ვერსია, რომელიც მუშაობს ჰიპერვიზორის სახელით. თუ ოდესმე გამოგიყენებიათ პროგრამული უზრუნველყოფა, როგორიცაა VirtualBox ან

მულტიპასი, მაშინ თქვენ იყენებდით ჰიპერვიზორს.

ჰიპერვიზორი ჩვეულებრივ მუშაობს როგორც საკუთარი ოპერაციული სისტემა (ცნობილია როგორც 1 ტიპის ჰიპერვიზორი) ან სხვა ოპერაციული სისტემის საზღვრებში, როგორიცაა Windows ან Ubuntu (ტიპი 2 ჰიპერვიზორი). ჰიპერვიზორის პასუხისმგებლობაა სტუმრის ოპერაციულ სისტემას წარუდგინოს იმ სიმულირებული აპარატურა, რომელიც მას გასაშვებად სჭირდება. სრული ოპერაციული სისტემა შეიძლება შემდეგ იმუშაოს თავზე. ეს მოიცავს ყველაფერს სიმულირებული CPU-დან და RAM-დან მონაცემთა ავტობუსებამდე, დისკის დისკებამდე ან ქსელის ადაპტერებამდე. ეს სიმულაცია გამოთვლით ძვირია, ამიტომ ვირტუალურ მანქანებს, როგორც წესი, აქვთ მნიშვნელოვანი ზედნადები.

მაშ, რა არის კონტეინერი?

კონტეინერი ვირტუალური მანქანის მსგავსია, რადგან ის შეიცავს და აწარმოებს პროგრამულ უზრუნველყოფას იზოლირებულ გარემოში მასპინძელ სისტემაზე. თუმცა, კონტეინერები ცვლის ტრადიციულ ტექნიკის ვირტუალიზაციას უშუალოდ მასპინძელ ოპერაციულ სისტემაზე დაყრდნობით. კონტეინერები იზიარებენ მასპინძელი ოპერაციული სისტემის ბიბლიოთეკებსა და ბინარებს და აქვთ მხოლოდ რესურსები და დამოკიდებულებები, რომლებიც საჭიროა მათში შემავალი კონკრეტული აპლიკაციის გასაშვებად. ეს ნიშნავს, რომ არ არის საჭირო თითო კონტეინერზე სრული ოპერაციული სისტემა, რადგან ყველა კონტეინერი მუშაობს ა სისტემას შეუძლია გაიზიაროს ერთი მასპინძელი ოპერაციული სისტემა, ხოლო შეინარჩუნოს ის სეგრეგაცია, რომელსაც მიიღებთ ვირტუალურთან მანქანები.

კონტეინერები წვდებიან მასპინძელ ოპერაციულ სისტემას კონტეინერის ძრავის მეშვეობით, რომელიც მართავს გაშვებულ კონტეინერებს და აკონტროლებს მათ წვდომას ფუძემდებლურ ოპერაციულ სისტემაში. ეს შეიძლება მოიცავდეს კონტეინერებს შორის უსაფრთხოების დაცვას და ოპერაციული სისტემის ფაილებზე ან ქსელურ კავშირებზე წვდომის მინიჭებას ან უარყოფას.

რა არის გარკვეული კომბინაციები კონტეინერების გამოყენებასთან დაკავშირებით?

მიუხედავად იმისა, რომ ვირტუალური მანქანები და კონტეინერები მსგავსია, კონტეინერების გამოყენებას აქვს თავისი ნაკლი. პირველ რიგში, ვირტუალური მანქანები ითვლება უფრო უსაფრთხოდ, რადგან თავდასხმის ზედაპირი ვირტუალური აპარატისგან "გაქცევისთვის" მნიშვნელოვნად მცირეა და უფრო რთულია შეღწევა. მაგალითად, კონტეინერი შეიძლება არ იყოს შესაფერისი მავნე პროგრამის შესამოწმებლად.

კონტეინერების გამოყენების მთავარი უპირატესობა ის არის, რომ ისინი მსუბუქი წონაა, რაც თავიდან აიცილებს მთელი ოპერაციული სისტემის ვირტუალიზაციის აუცილებლობას, ნიშნავს მინიმალურ გაშვებას და სისტემის ხარჯების შემცირებას. ეს ნიშნავს, რომ კიდევ ბევრი კონტეინერი შეიძლება იმუშაოს ერთ ჰოსტზე, რაც შეუძლებელი იქნება ვირტუალური მანქანებით.

იმის გამო, რომ კონტეინერებს არ სჭირდებათ სრული ოპერაციული სისტემა, მათი ადვილად შეფუთვა და გავრცელება შესაძლებელია. მიუხედავად იმისა, რომ სრული ვირტუალური მანქანის სურათი შეიძლება ადვილად იყოს ათობით გიგაბაიტი, კონტეინერები შეიძლება გამოვიდეს 15 კბ-მდე ზომის სურათებში. ეს აადვილებს კონტეინერების განაწილებას და გამოყენებას. ჩვენ ამას ვაჩვენებთ Docker-ში რამდენიმე მარტივი მაგალითის კონტეინერების გაშვებით.

Docker-ის ინსტალაცია

ეს არის ბევრი თეორია, ასე რომ, მოდით, პრაქტიკული ვიყოთ. იმისათვის, რომ გაჩვენოთ, თუ როგორ უნდა დააყენოთ კონტეინერი, ჩვენ დავაინსტალირებთ Docker-ს Ubuntu 23.10-ში და გამოვიყენებთ მას მარტივი Hello World კონტეინერის გასაშვებად. ჩვენი ნაბიჯები შემოწმებულია ვირტუალურ მანქანაზე, მაგრამ ასევე შეგიძლიათ ორმაგი ჩატვირთვა თქვენი Windows კომპიუტერიდან ან გამოიყენოთ ა შესანიშნავი ლეპტოპი Linux-ისთვის.

Docker სწრაფად გახდა დე-ფაქტო კონტეინერიზაციის ინსტრუმენტი. მიუხედავად იმისა, რომ სხვა ინსტრუმენტები არსებობს, Docker ფართოდ არის მიღებული და შესანიშნავია ყველა, მაგრამ ყველაზე მოთხოვნადი აპლიკაციისთვის. არსებობს დოკუმენტაცია Docker-ის ინსტალაციის სხვადასხვა გზების შესახებ, მაგრამ ჩვენ გამოვიყენებთ მოსახერხებელი ინსტალაციის სკრიპტს. ეს ბრძანება ჩამოტვირთავს სკრიპტს get.docker.com-დან თქვენს ადგილობრივ აპარატში:

$ curl -fsSL https://get.docker.com -o get-docker.sh

ამის შემდეგ შეგიძლიათ ამ სკრიპტის გაშვება Docker-ის დასაყენებლად. თქვენ შეგიძლიათ დაადასტუროთ, რომ Docker სწორად არის დაინსტალირებული ვერსიის შემოწმებით:

$ sudo sh ./get-docker.sh

მოჰყვება ვერსიის შემოწმება:

$ sudo docker version

თქვენ ასევე შეგიძლიათ დაადასტუროთ, რომ დოკერის სერვისი მუშაობს ფონზე:

$ sudo systemctl status docker

ის უნდა მიუთითებდეს „აქტიური (გაშვებული)“ მწვანე ტექსტში, როგორც მონიშნულია ქვემოთ მოცემულ ეკრანის სურათზე. Docker ძრავის ვერსია ასევე უნდა დაიბეჭდოს შეცდომის გარეშე.

მარტივი მაგალითის გაშვება

ახლა, როდესაც Docker დაინსტალირებულია, შეგიძლიათ გამოიყენოთ იგი კონტეინერის სურათის ჩამოსატვირთად. კონტეინერის სურათები ძალიან ჰგავს ISO-ს ვირტუალური მანქანებისთვის, გარდა იმისა, რომ ისინი, როგორც წესი, უფრო მცირეა და ადვილად ასაშენებელია. ჩამოტვირთეთ მარტივი Hello-world კონტეინერის სურათი შემდეგი ბრძანებით:

$ sudo docker pull hello-world

ამ სურათის ჩამოტვირთვის შემდეგ, შეგიძლიათ გადაამოწმოთ თქვენს სისტემაში გადმოწერილი სურათების ჩამოთვლით შემდეგი მოქმედებების გამოყენებით:

$ sudo docker images

ახლა თქვენ უნდა ნახოთ hello-world ჩამოტვირთული. გაითვალისწინეთ ძალიან მცირე ზომა (13 Kb ჩვენს სატესტო მანქანაზე), ისევე როგორც მისი ტეგი. სურათის ტეგი ფაქტობრივად მისი ვერსიაა. ნაგულისხმევად, Docker ჩამოტვირთავს სურათის უახლეს ვერსიას. გაუშვით კონტეინერი ამ სურათზე დაყრდნობით:

$ sudo docker run hello-world: latest

ეს გამოვა Dockers' hello-world spiel, რომელიც მუშაობს ძალიან პატარა C პროგრამიდან (რომელიც შეგიძლიათ ნახოთ GitHub).

გილოცავთ; თქვენ გაატარეთ თქვენი პირველი კონტეინერი! ამ შემთხვევაში, პროგრამამ გამოუშვა თავისი შედეგი და დაასრულა შესრულება. კონტეინერი ახლა მკვდარია და აღარ მუშაობს.

როგორ შევინარჩუნოთ კონტეინერები ცოცხალი

ძირითადი კონტეინერის გაშვების შემდეგ, ჩვენ ახლა შეგვიძლია ავაშენოთ უფრო რთული მაგალითი, რომელიც დაუყოვნებლივ არ გამოდის ამოცანის შესრულების შემდეგ. კონტეინერები ხშირად აგებულია ერთი პროცესის გარშემო, რამაც შეიძლება გამოიწვიოს მეტი პროცესი. ამ საბაზისო პროცესის გასვლის შემდეგ, მთელი კონტეინერი გამოვა მასთან ერთად. ეს შეიძლება შეზღუდვად ჟღერდეს, მაგრამ სინამდვილეში ძალიან ჰგავს init სისტემების სრულ Linux-ის ბირთვის ფუნქციას.

მუდმივი მაგალითის გასაშვებად, ჩვენ შეგვიძლია გადავიღოთ სურათი Nginx-ისთვის, რომელიც არის ვებ სერვერი, რომელიც გამოიყენება მსოფლიოს ვებსაიტების მნიშვნელოვანი პროცენტისთვის. ჩვენ ავირჩიეთ Nginx ამ მაგალითისთვის, რადგან ის მარტივია, არ საჭიროებს გაფართოებულ კონფიგურაციას და არის მსუბუქი. ჩამოტვირთეთ უახლესი Nginx სურათი შემდეგი ბრძანებით:

$ sudo docker pull nginx

ჩვენ დავამატეთ -გვ მონიშნეთ აქ პორტის გადამისამართების კონფიგურაციისთვის კონტეინერიდან მასპინძელ ოპერაციულ სისტემაში. პორტი 80 გამოიყენება დაშიფრული HTTP (ანუ ვებ) ტრაფიკისთვის. ეს საშუალებას მოგცემთ შეხვიდეთ კონტეინერზე თქვენი მასპინძელი მანქანიდან:

$ sudo docker run -p 80:80 nginx

ეს ბრძანება იმუშავებს თქვენს ტერმინალში მიმაგრებულ რეჟიმში, რაც ნიშნავს, რომ კონტეინერი სიტყვასიტყვით არის მიმაგრებული თქვენს ტერმინალზე, ასე რომ, კონტეინერის ყველა ჟურნალი იქ დაიბეჭდება. როგორც კი კონტეინერი ამუშავდება, გახსენით http://localhost თქვენს ბრაუზერში. თქვენ ნახავთ Nginx მისასალმებელ ეკრანს, როგორც ქვემოთ:

Nginx კონტეინერი ახლა მუშაობს თქვენი კონტეინერის ძრავში. სანამ Nginx მუშაობს მიმაგრებულ რეჟიმში, ის განაგრძობს მუშაობას მხოლოდ მანამ, სანამ ის ღიაა. თქვენ შეგიძლიათ გახვიდეთ Nginx კონტეინერიდან დაჭერით Ctrl + C თქვენს ტერმინალში.

როგორ გავატაროთ კონტეინერები ფონზე

Nginx-ის ფონზე გასაშვებად, ჩვენ დავამატებთ სხვა დროშას, -დ, განცალკევებული რეჟიმისთვის. ეს დაიწყებს თქვენი ტერმინალიდან მოწყვეტილ კონტეინერს, რაც იმას ნიშნავს, რომ ის ფონზეა. Მაგალითად:

$ sudo docker run -d -p 80:80 nginx

თქვენ შეგიძლიათ ჩამოთვალოთ გაშვებული კონტეინერები სისტემაში. გაითვალისწინეთ, როგორ მუშაობს თქვენი Nginx კონტეინერი ახლა ფონზე და მას მინიჭებული აქვს ID.

$ sudo docker ps

გაშვებული ფონური კონტეინერი შეიძლება დაიღუპოს მისი ID-ის გამოყენებით. თქვენ ასევე შეგიძლიათ შეამჩნიოთ, რომ კონტეინერს მიენიჭა სახელი. როდესაც ერთი არ არის მითითებული, Docker მისცემს თითოეულ კონტეინერს შემთხვევით, უნიკალურ სახელს.

$ sudo docker kill 

თუმცა, თქვენ შეგიძლიათ შეამოწმოთ ეს უფრო საინტერესო სურათებით. არსებობს უამრავი ხელმისაწვდომი მეტი დოკერ კერა, რომელიც ფუნქციონირებს როგორც ცენტრალური საცავი საჯარო კონტეინერის სურათებისთვის.

უფრო ღრმად ჩაყვინთვა კონტეინერებით

ეს იყო კონტეინერების მოკლე შესავალი. კონტეინერები შეიძლება იყოს უსაზღვროდ რთული, მაგრამ ისინი წარმოადგენენ უაღრესად განაწილებული სისტემების საფუძველს, რომლებიც მართავენ ჩვენი თანამედროვე ინტერნეტის დიდ ნაწილს. თუმცა, ეს ძალა არ აშორებს მათ მცირე მასშტაბის გამოყენებას. კონტეინერებისა და Docker-ის საფუძვლების გაცნობა შეიძლება იყოს კარიბჭე სასარგებლო ადგილობრივი სერვისების გასაშვებად, როგორიცაა Minecraft სერვერი ან Plex ძველ კომპიუტერზე.