Контејнери су већ годинама популарна реч... али шта су они тачно?
Контејнери су метод покретања виртуелизованих апликација на вашем рачунару, слично виртуелним машинама, али користећи другачији скуп основних технологија. Они могу бити сложени за разумевање, али су неопходни за покретање свега Минецрафт сервере на Гоогле. А ми ћемо вам показати како да их поставите.
Користићемо Линук, оперативни систем направљен са фокусом на преносивост, модуларност и стабилност. Линук је у свему, од сервера преко микроталасних пећница до конзола за видео игре. Контејнери нису ограничени на покретање на Линук-у, али технологије које стоје иза њих су најприкладније и најбоље раде на Линук-у. Ако сте нови у Линук-у, препоручујемо вам да погледате наш водич за почетнике пре роњења.
Да ли су контејнери виртуелне машине?
Контејнери могу бити сложена тема, али најбоље је почети са једном кључном тачком: контејнер јесте не виртуелна машина. Виртуелна машина је симулирана верзија одређеног хардвера и његовог софтвера који ради у ономе што је познато као хипервизор. Ако сте икада користили софтвер као што је ВиртуалБок или
Хипервизор обично ради или као сопствени оперативни систем (познат као хипервизор типа 1) или унутар граница другог оперативног система као што је Виндовс или Убунту (хипервизор типа 2). Одговорност хипервизора је да представи гостујући оперативни систем са симулираним хардвером који је потребан за покретање. Потпуни оперативни систем тада може да ради на врху. Ово укључује све, од симулираног ЦПУ-а и РАМ-а до магистрала података, диск јединица или мрежних адаптера. Ова симулација је рачунски скупа, тако да виртуелне машине обично имају значајне трошкове.
Дакле, шта је контејнер?
Контејнер је сличан виртуелној машини по томе што садржи и покреће софтвер у изолованом окружењу на систему домаћина. Међутим, контејнери замењују традиционалну виртуелизацију хардвера тако што се директно ослањају на оперативни систем домаћина. Контејнери деле библиотеке и бинарне датотеке главног оперативног система и имају само ресурсе и зависности потребне за покретање одређене апликације коју садрже. То значи да нема потребе за пуним оперативним системом по контејнеру, јер сви контејнери раде на а систем може да дели оперативни систем са једним хостом уз задржавање сегрегације коју добијате са виртуелним машине.
Контејнери приступају оперативном систему домаћина преко ацонтаинер енгине-а, који управља радним контејнерима и контролише њихов приступ основном оперативном систему. Ово може укључивати спровођење безбедности између контејнера и одобравање или одбијање приступа датотекама оперативног система или мрежним везама.
Који су неки компромиси за коришћење контејнера?
Док су виртуелне машине и контејнери слични, коришћење контејнера има своје недостатке. Као прво, виртуелне машине се сматрају безбеднијим, пошто је површина напада да „побегне“ виртуелној машини знатно мања и теже ју је продрети. Контејнер можда није погодан за тестирање малвера, на пример.
Главна предност коришћења контејнера је та што су лагани, избегавање потребе за виртуелизацијом целог оперативног система значи минимално време покретања и смањена оптерећења система. То значи да много више контејнера може да ради на једном хосту, што не би било могуће са виртуелним машинама.
Пошто контејнерима није потребан комплетан оперативни систем, они се лако могу упаковати у мање слике и дистрибуирати. Док пуна слика виртуелне машине може лако да буде десетине гигабајта, контејнери могу да се испоручују у сликама величине чак 15Кб. Ово чини изузетно лаким дистрибуцију и коришћење контејнера. Ово ћемо демонстрирати покретањем неколико једноставних примера контејнера у Доцкер-у.
Инсталирање Доцкер-а
То је много теорије, па хајде да будемо практични. Да бисмо вам показали како да подесите контејнер, инсталираћемо Доцкер у Убунту 23.10 и користити га за покретање једноставног Хелло Ворлд контејнера. Наши кораци су тестирани на виртуелној машини, али такође можете да покренете систем са Виндовс рачунара или користите а одличан лаптоп за Линук.
Доцкер је брзо постао де-факто алат за контејнеризацију. Док други алати постоје, Доцкер је широко прихваћен и савршен је за све осим најзахтевнијих апликација. постоји документацију о различитим начинима инсталирања Доцкер-а, али ћемо користити скрипту за практичну инсталацију. Ова команда ће преузети скрипту са гет.доцкер.цом на вашу локалну машину:
$ curl -fsSL https://get.docker.com -o get-docker.sh
Затим можете покренути ову скрипту да бисте инсталирали Доцкер. Можете да проверите да ли је Доцкер исправно инсталиран тако што ћете проверити верзију помоћу:
$ sudo sh ./get-docker.sh
Следи провера верзије са:
$ sudo docker version
Такође можете да проверите да ли доцкер услуга ради у позадини помоћу:
$ sudo systemctl status docker
Требало би да означава „активан (покреће)“ зеленим текстом, као што је истакнуто на снимку екрана испод. Верзију Доцкер мотора такође треба одштампати без грешке.
Покретање једноставног примера
Сада када је Доцкер инсталиран, можете га користити за преузимање слике контејнера. Слике контејнера су веома сличне ИСО-овима за виртуелне машине, осим што су обично мање и лакше за прављење. Преузмите једноставну слику контејнера хелло-ворлд са следећом командом:
$ sudo docker pull hello-world
Када се та слика преузме, можете је потврдити навођењем слика преузетих на вашем систему користећи следеће:
$ sudo docker images
Сада би требало да видите преузет хелло-ворлд. Обратите пажњу на веома малу величину (13Кб на нашој тест машини), као и на њену ознаку. Ознака слике је заправо њена верзија. Доцкер ће подразумевано преузети најновију верзију слике. Покрените контејнер на основу ове слике користећи:
$ sudo docker run hello-world: latest
Ово ће приказати Доцкерс-ов хелло-ворлд спиел, који се покреће из веома малог Ц програма (који можете проверити на ГитХуб).
Честитам; покренули сте свој први контејнер! У овом случају, програм је објавио свој резултат и завршио своје извршавање. Контејнер је сада мртав и више не ради.
Како одржати контејнере у животу
Пошто смо покренули основни контејнер, сада можемо да направимо сложенији пример који не излази одмах након што заврши задатак. Контејнери се често граде око једног процеса, који може покренути више процеса. Када овај основни процес изађе, цео контејнер ће изаћи са њим. Ово може звучати као ограничење, али је заправо веома слично начину на који инит системи у пуној функцији језгра Линука.
Да бисмо покренули трајни пример, можемо да извучемо слику за Нгинк, који је веб сервер који се користи за хостовање значајног процента светских веб локација. Изабрали смо Нгинк за овај пример јер је једноставан, не захтева напредну конфигурацију и лаган је. Преузмите најновију Нгинк слику са следећом командом:
$ sudo docker pull nginx
Додали смо -п означите овде да бисте конфигурисали прослеђивање портова из контејнера на оперативни систем домаћина. Порт 80 се користи за нешифровани ХТТП (тј. веб) саобраћај. Ово ће вам омогућити да приступите контејнеру са ваше матичне машине:
$ sudo docker run -p 80:80 nginx
Ова команда ће се покренути у вашем терминалу у прикљученом режиму, што значи да је контејнер буквално везан за ваш терминал, тако да ће сви записи из контејнера бити тамо одштампани. Када се контејнер покрене, отворите га http://localhost у вашем веб претраживачу. Видећете Нгинк екран добродошлице сличан доле:
Нгинк контејнер сада ради унутар вашег мотора контејнера. Док Нгинк ради у прикљученом режиму, наставиће да ради све док је отворен. Можете изаћи из Нгинк контејнера притиском на Цтрл + Ц у вашем терминалу.
Како покренути контејнере у позадини
Да бисмо покренули Нгинк у позадини, додаћемо још једну заставицу, -д, за одвојени режим. Ово ће покренути контејнер одвојен од вашег терминала, што значи да је у позадини. На пример:
$ sudo docker run -d -p 80:80 nginx
Можете да наведете покренуте контејнере на систему. Обратите пажњу како ваш Нгинк контејнер сада ради у позадини и да му је додељен ИД.
$ sudo docker ps
Контејнер који ради у позадини може бити убијен коришћењем његовог ИД-а. Такође можете приметити да је контејнеру дато име. Када један није наведен, Доцкер ће сваком контејнеру дати насумично, јединствено име.
$ sudo docker kill
Међутим, ово можете тестирати са још неким занимљивијим сликама. Има доста доступних на Доцкер чвориште, који функционише као централно складиште за слике јавних контејнера.
Зароните дубље са контејнерима
Ово је био кратак увод у контејнере. Контејнери могу бити неограничено сложени, али они су темељни грађевински блок високо дистрибуираних система који покрећу већи део нашег модерног интернета. Међутим, та моћ не одузима њихову употребу у мањем обиму. Познавање основа контејнера и Доцкер-а може бити капија за покретање корисних локалних услуга као што је а Минецрафт сервер или Плек на старом рачунару.