Креирање Доцкер слике од огреботине

Creating Docker Image From Scratch



Главна предност Доцкера у односу на било коју другу технологију контејнеризације је то што је Доцкер намењен програмерима и њиховим апликацијама за надоградњу. Док одговарајуће технологије контејнеризације попут ЛКСЦ , Зонес и Затвори су циљане из оперативне перспективе или, поједностављено речено, ове платформе представљају замену за виртуелне машине које раде на облаку. Тамо где је, Доцкер је замена за пакете и извршне бинарне датотеке.

Уопштено говорећи, Доцкер све више постаје универзални менаџер пакета који ради на свим могућим Линук платформама. Потребни су контејнери и користи их за решавање потпуно другог проблема са којим се програмери суочавају. Проблем је у томе што програмери користе свој десктоп оперативни систем (попут Виндовс -а, мацОС -а или Линука са тоном десктоп пакета) за писање апликација. Апликација коју пишу често се изводи на потпуно другом оперативном систему на серверу негде са неком Линук дистрибуцијом потпуно различитом од оне на лаптопу програмера.







Са Доцкером идеја је да ваша апликација долази упакована као Доцкер слика. Посао Доцкера је да преузме ову слику и покрене је као контејнерску апликацију за вас. Бити смештен у контејнер значи да ће апликација и њене зависности радити у изолованом окружењу које се може потпуно разликовати од преносног рачунара програмера, па чак и од производног сервера. Све док обоје подржавају Доцкер, обоје могу покренути исту апликацију на потпуно исти начин.



Анатомија Доцкер слике

Као што је раније поменуто, Доцкер апликација ће радити у договореном окружењу. Сада се поставља питање како да створимо такво окружење? Већина слика апликација би увезла Доцкер основну слику и изградила своју апликацију на њој.



Апликације се праве од слојева софтвера. Слика контејнера вордпресс -а је направљена коришћењем слике хттпд контејнера, која је заузврат изграђена на врху Убунту слике. Слика на којој се гради новија слика позната је као РОДИТЕЉСКА СЛИКА у терминологији Доцкер. У Доцкерфиле -у (мало касније ћемо доћи до значења Доцкерфиле -а), ова родитељска слика се помиње на врху датотеке као што је приказано испод:





ОД Убунту: 18.04
## Остатак Доцкер датотеке

Ова Доцкер датотека када се изврши претвара вашу апликацију у Доцкер слику (врста бинарне датотеке) коју затим можете гурнути у регистар одакле се може повући за стварање нових контејнера на другом месту. Међутим, сви ће они имати Убунту: 18.04 као основну слику, а радиће као да је то Убунту систем у којем раде.

Можда сте ово приметили при покушају да извучете нову слику докера.



Креирање Доцкер слике од огреботина

Ово показује колико је слојева повучено пре него што се унесе стварна апликација (која може бити величине само неколико мегабајта).

Из тог разлога бисмо желели да направимо оно што је познато као основна слика. Који није изграђен поврх ничег другог. Кључна реч сцратцх користи се за означавање да овај слој није изграђен на било чему другом. Овако:

Од нуле
## Остатак датотеке Дцокер

Прво ћемо створити једноставну апликацију хелло-ворлд, а затим схватити шта ће бити остатак Доцкерфиле-а. Домаћин систем је Убунту: 18.04 ЛТС, а за експеримент користимо Доцкер верзију 17.12.1-це.

Креирање статичке бинарне датотеке

Доцкер контејнери су збирка процеса који се изводе изоловани од остатка оперативног система. Једина ствар са којом је тај процес у додиру је Кернел. Кернел је одговоран за заказивање ових процеса на ЦПУ -у, управљање меморијом и неколико других основних задатака чувања резервација.

Али већина апликација на високом нивоу зависи од многих системских библиотека (нпр глибц, мусл, клибц итд ) и много зависности у време извођења, попут Питхон -а или Ноде.јс -а или Јава Рунтиме -а. Бинарни програм апликације нема све библиотеке доступне у себи, али када започне извршавање, позива те библиотеке из оперативног система домаћина.

Будући да покушавамо да створимо слику од нуле, не бисмо добили такве лепоте. Дакле, наша апликација мора бити статичка датотека или самостална извршна датотека.

Почнимо стварањем фасцикле под називом МиДоцкерИмаге и креирањем датотеке хелло.цц унутар ње.

$мкдирМиДоцкерИмаге
$ЦДМиДоцкерИмаге
$додирхелло.цц

Отворите хелло.цц помоћу свог омиљеног уређивача текста и додајте следеће редове у њега.

#инцлуде
користећи именски простор стд;
интглавни(){
цена<< 'Здраво! Ова порука долази из контејнера н';
повратак 0;

}

Ово је једноставан Ц ++ програм који штампа Хелло! Ова порука …

Из разлога о којима смо раније говорили, ово ћемо саставити помоћу статичке заставице. Преводилац који се користи је г ++ (Убунту 7.3.0-16убунту3) 7.3.0.

Да бисте компајлирали програм, у истом директоријуму покрените следећу команду:

$ г++ -о здраво-статичанЗдраво.ДЦ

Ово ствара бинарну извршну датотеку хелло у истом директорију. То је наша статичка датотека. Тестирајте да ли ради како је предвиђено навођењем имена датотеке у терминалу.

$./Здраво

Сада смо спремни да спремимо овај једноставан програм.

Доцкерфиле

Доцкерфиле се састоји од скупа правила која преузима датотеке ваше апликације (попут бинарних датотека, изворних датотека итд.) Заједно са различитим конфигурацијским параметрима попут изгледа система датотека, отворених портова итд. И претвара их у датотеку слике Доцкер. Затим можете да делите датотеку слике са свима који желе да покрену ту апликацију.

Нећемо копати по свим опцијама доступним за Доцкерфиле, већ ћемо написати врло минималистички Доцкерфиле. У истом директоријуму, где се налази ваша хелло извршна датотека, направите празну датотеку под називом Доцкерфиле.

$додирДоцкерфиле

Отворите га помоћу свог омиљеног уређивача текста и напишите му следеће редове:

Од нуле
АДД хелло/
ЦМД['/Здраво']

огреботина није родитељска слика. Уместо тога, Доцкер указује да слика није изграђена на било којој другој слици. Изграђен је од нуле. Наредба АДД узела би статички бинарни назив | _+_ | из тренутног директоријума и додала га у основни директоријум датотеке слике. Када бисмо коначно покренули контејнер заснован на овој слици, извршна датотека хелло ће се видети у самом коренском директоријуму на | _+_ |

На крају, ЦМД линија има низ /Здраво овај низ ће се извршавати као наредба љуске сваки пут када се из ове слике створи контејнер, дакле бинарна датотека коју смо додали у наш контејнер и одштампала поруку коју смо написали у нашој апликацији.

Изградимо слику позивањем на доцкер буилд команда која би прошла кроз садржај Доцкерфиле -а и генерисала слику. Покрените следећу команду у истом директоријуму као Доцкерфиле и извршна бинарна датотека.

$доцкер буилд--тагЗдраво .

Тхе –Таг здраво флаг поставља назив слике на Здраво и тачка ( . ) на крају прича доцкер буилд да погледате тренутни директоријум за Доцкерфиле и сродни садржај.

Покретање Доцкер контејнера

Да бисте проверили да ли се слика коју смо управо створили приказује на листи слика, покрените:

$доцкер слике

Обратите пажњу на то колико је мала слика здрава у поређењу са другим сликама. У сваком случају, спреман је за рад као контејнер,

$доцкер рун хелло

То је то! Направили сте свој први минималистички контејнер од нуле.

Друге опције

Иако је стварање слика од нуле увек опција, људи често теже стварању слика из других лаких Линук дистрибуција. На пример, слике попут алпине и бусибок су заиста лагана окружења са мањим библиотекама попут мусл уместо глибц.

Користећи их као слику родитеља помоћу ИЗ алпског: најновије резултирало би и мањим сликама. Пошто су основне слике величине само 2-5 МБ. Јавите нам ако постоји нека тема везана за Доцкер коју бисте желели да следећу обрадимо. Можете нас контактирати на Твиттер , Фејсбук или се претплатите на нас путем е -поште.