„Linux“ konteinerių vadovas: įvadas į konteinerius

Konteineriai jau daugelį metų buvo populiarus žodis... bet kas jie tiksliai?

Sudėtiniai rodiniai yra virtualizuotų programų paleidimo jūsų kompiuteryje metodas, panašus į virtualias mašinas, bet naudojant kitą pagrindinių technologijų rinkinį. Juos suprasti gali būti sudėtinga, tačiau jie yra būtini norint viską paleisti Minecraft serverius „Google“. Ir mes jums parodysime, kaip juos nustatyti.

Naudosime „Linux“ – operacinę sistemą, sukurtą daugiausia dėmesio skiriant perkeliamumui, moduliškumui ir stabilumui. „Linux“ yra viskas – nuo ​​serverių iki mikrobangų krosnelių iki vaizdo žaidimų konsolių. Sudėtiniai rodiniai veikia ne tik „Linux“, bet jų technologijos geriausiai tinka ir geriausiai veikia „Linux“. Jei nesate naujokas Linux, rekomenduojame peržiūrėti mūsų pradedančiųjų vadovas prieš pasineriant.

Ar konteineriai yra virtualios mašinos?

Konteineriai gali būti sudėtinga tema, tačiau geriausia pradėti nuo vieno pagrindinio dalyko: konteineris yra ne virtualią mašiną. Virtuali mašina yra imituota konkrečios aparatinės įrangos ir jos programinės įrangos versija, kuri veikia vadinamajame hipervizoriuje. Jei kada nors naudojote tokią programinę įrangą kaip „VirtualBox“ arba

multipass, tada naudojote hipervizorių.

Hipervizorius paprastai veikia kaip atskira operacinė sistema (žinoma kaip 1 tipo hipervizorius) arba kitos operacinės sistemos, pvz., Windows arba Ubuntu (2 tipo hipervizorius), ribose. Hipervizoriaus pareiga yra pateikti svečio operacinei sistemai imituojamą aparatinę įrangą, kurios jai reikia. Tada visa operacinė sistema gali veikti viršuje. Tai apima viską nuo imituojamo procesoriaus ir RAM iki duomenų magistralių, diskų įrenginių ar tinklo adapterių. Šis modeliavimas yra brangus skaičiavimams, todėl virtualios mašinos paprastai turi didelių papildomų išlaidų.

Taigi, kas yra konteineris?

Konteineris yra panašus į virtualią mašiną, nes jame yra ir veikia programinė įranga izoliuotoje pagrindinės sistemos aplinkoje. Tačiau konteineriai pakeičia tradicinę aparatinės įrangos virtualizaciją, tiesiogiai pasikliaudami pagrindine operacine sistema. Sudėtiniai rodiniai dalijasi pagrindinės operacinės sistemos bibliotekomis ir dvejetainiais failais ir turi tik tuos išteklius ir priklausomybes, kurių reikia konkrečiai juose esančiai programai paleisti. Tai reiškia, kad vienam konteineriui nereikia visos operacinės sistemos, nes visi konteineriai veikia a sistema gali bendrinti vieną pagrindinio kompiuterio operacinę sistemą, išlaikydama atskirtį, kurią gaunate su virtualia mašinos.

Sudėtiniai rodiniai pasiekia pagrindinę operacinę sistemą naudodami konteinerių variklį, kuris valdo veikiančius konteinerius ir kontroliuoja jų prieigą prie pagrindinės operacinės sistemos. Tai gali apimti saugos užtikrinimą tarp konteinerių ir prieigos prie operacinės sistemos failų ar tinklo ryšių suteikimą arba uždraudimą.

Kokie yra konteinerių naudojimo kompromisai?

Nors virtualios mašinos ir konteineriai yra panašūs, konteinerių naudojimas turi trūkumų. Viena vertus, virtualios mašinos laikomos saugesnėmis, nes atakos paviršius, norint „pabėgti“ nuo virtualios mašinos, yra žymiai mažesnis ir sunkiau įsiskverbia. Pavyzdžiui, konteineris gali būti netinkamas kenkėjiškoms programoms išbandyti.

Pagrindinis konteinerių naudojimo pranašumas yra tai, kad jie yra lengvi, todėl nereikia virtualizuoti visos operacinės sistemos, todėl paleisties laikas yra minimalus ir sistemos sąnaudos sumažėja. Tai reiškia, kad viename pagrindiniame kompiuteryje gali veikti daug daugiau konteinerių, o tai nebūtų įmanoma naudojant virtualias mašinas.

Kadangi konteineriams nereikia visos operacinės sistemos, juos galima lengvai supakuoti į mažesnius vaizdus ir platinti. Nors visas virtualios mašinos vaizdas gali lengvai sudaryti keliasdešimt gigabaitų, konteineriai gali būti net 15 KB vaizdų. Dėl to konteinerius paskirstyti ir naudoti itin paprasta. Tai parodysime paleisdami kelis paprastus konteinerių pavyzdžius „Docker“.

„Docker“ diegimas

Tai daug teorijos, taigi, pereikime prie praktikos. Norėdami parodyti, kaip nustatyti konteinerį, mes įdiegsime Docker Ubuntu 23.10 ir naudosime jį paprastam Hello World konteineriui paleisti. Mūsų veiksmai išbandomi virtualioje mašinoje, tačiau taip pat galite paleisti dvigubą paleidimą iš „Windows“ kompiuterio arba naudoti a puikus nešiojamas kompiuteris, skirtas Linux.

„Docker“ greitai tapo de facto konteinerių įrankiu. Nors yra ir kitų įrankių, „Docker“ yra plačiai naudojamas ir puikiai tinka visoms, išskyrus reikliausias programas. Yra dokumentaciją apie įvairius „Docker“ diegimo būdus, bet naudosime patogaus diegimo scenarijų. Ši komanda atsisiųs scenarijų iš get.docker.com į jūsų vietinį kompiuterį:

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

Tada galite paleisti šį scenarijų, kad įdiegtumėte „Docker“. Galite patikrinti, ar „Docker“ yra tinkamai įdiegtas, patikrinę versiją su:

$ sudo sh ./get-docker.sh

Po to bus patikrinta versija su:

$ sudo docker version

Taip pat galite patikrinti, ar doko paslauga veikia fone, naudodami:

$ sudo systemctl status docker

Žaliame tekste turėtų būti nurodyta „aktyvus (veikia)“, kaip paryškinta toliau esančioje ekrano kopijoje. Docker variklio versija taip pat turėtų būti išspausdinta be klaidų.

Pateikiame paprastą pavyzdį

Dabar, kai įdiegtas „Docker“, galite jį naudoti norėdami atsisiųsti konteinerio vaizdą. Sudėtinio rodinio vaizdai labai panašūs į virtualių mašinų ISO, tačiau paprastai jie yra mažesni ir lengviau sukuriami. Atsisiųskite paprastą hello-world konteinerio vaizdą naudodami šią komandą:

$ sudo docker pull hello-world

Atsisiuntę tą vaizdą, galite tai patikrinti įtraukdami į sistemą atsisiųstų vaizdų sąrašą, naudodami šiuos veiksmus:

$ sudo docker images

Dabar turėtumėte matyti atsisiųstą Hello-world. Atkreipkite dėmesį į labai mažą dydį (13 Kb mūsų bandymo aparate) ir jo žymą. Vaizdo žyma iš tikrųjų yra jo versija. Pagal numatytuosius nustatymus „Docker“ atsisiųs naujausią vaizdo versiją. Paleiskite konteinerį pagal šį vaizdą naudodami:

$ sudo docker run hello-world: latest

Bus išvesta Dockers hello-world žaidimo programa, kuri veikia iš labai mažos C programos (kurią galite patikrinti GitHub).

Sveikiname; paleidote pirmąjį konteinerį! Šiuo atveju programa išvedė rezultatą ir baigė vykdyti. Dabar konteineris nebeveikia ir nebeveikia.

Kaip išlaikyti konteinerius gyvus

Paleidę pagrindinį sudėtinį rodinį, dabar galime sukurti sudėtingesnį pavyzdį, kuris iškart neišeina, kai atliekama užduotis. Konteineriai dažnai kuriami remiantis vienu procesu, todėl gali atsirasti daugiau procesų. Pasibaigus šiam pagrindiniam procesui, kartu su juo išeis visas konteineris. Tai gali atrodyti kaip apribojimas, bet iš tikrųjų tai labai panašu į tai, kaip init sistemos veikia visame Linux branduolyje.

Norėdami paleisti nuolatinį pavyzdį, galime sukurti vaizdą, skirtą Nginx, kuris yra žiniatinklio serveris, naudojamas nemaža dalis pasaulio svetainių talpinti. Šiam pavyzdžiui pasirinkome Nginx, nes jis paprastas, nereikalauja papildomos konfigūracijos ir yra lengvas. Atsisiųskite naujausią Nginx vaizdą naudodami šią komandą:

$ sudo docker pull nginx

Pridėjome -p pažymėkite čia, kad sukonfigūruotumėte prievado persiuntimą iš konteinerio į pagrindinę operacinę sistemą. 80 prievadas naudojamas nešifruotam HTTP (t. y. žiniatinklio) srautui. Tai leis pasiekti konteinerį iš pagrindinio kompiuterio:

$ sudo docker run -p 80:80 nginx

Ši komanda bus paleista jūsų terminale prijungtu režimu, o tai reiškia, kad konteineris tiesiogine prasme yra prijungtas prie jūsų terminalo, todėl visi konteinerio žurnalai bus spausdinami ten. Kai konteineris pradės veikti, atidarykite http://localhost savo interneto naršyklėje. Pamatysite „Nginx“ pasveikinimo ekraną, panašų į toliau pateiktą:

Nginx konteineris dabar veikia jūsų konteinerio variklyje. Nors „Nginx“ veikia prijungtu režimu, jis veiks tik tol, kol bus atidarytas. Galite išeiti iš Nginx konteinerio paspausdami Ctrl + C savo terminale.

Kaip paleisti konteinerius fone

Norėdami paleisti Nginx fone, pridėsime kitą vėliavėlę, -d, atskirtam režimui. Taip bus paleistas konteineris, atskirtas nuo jūsų terminalo, o tai reiškia, kad jis yra fone. Pavyzdžiui:

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

Galite išvardyti sistemoje veikiančius konteinerius. Atkreipkite dėmesį, kaip jūsų Nginx konteineris dabar veikia fone ir jam buvo priskirtas ID.

$ sudo docker ps

Veikiantis foninis konteineris gali būti nužudytas naudojant jo ID. Taip pat galite pastebėti, kad konteineriui suteiktas pavadinimas. Kai jis nenurodytas, „Docker“ kiekvienam konteineriui suteiks atsitiktinį unikalų pavadinimą.

$ sudo docker kill 

Tačiau galite tai išbandyti naudodami keletą įdomesnių vaizdų. Joje yra daug Docker stebulė, kuri veikia kaip centrinė viešųjų konteinerių vaizdų saugykla.

Nardymas giliau su konteineriais

Tai buvo trumpas įvadas į konteinerius. Sudėtiniai konteineriai gali būti be galo sudėtingi, tačiau jie yra labai paskirstytų sistemų, kurios valdo didžiąją dalį šiuolaikinio interneto, pagrindas. Tačiau ši galia neatima jų naudojimo mažesniu mastu. Susipažinimas su konteinerių ir „Docker“ pagrindais gali būti vartai į naudingų vietinių paslaugų, pvz., Minecraft serveris arba Plex sename kompiuteryje.