Ҳамин тариқ, чанд вақт ҳарду версияи барнома (кӯҳна ва нав) дар як вақт кор мекунанд. ки ба таври худкор ба он оварда мерасонад ихтилофи захираҳои муштарак: шабака, системаи файлӣ, IPC ва ғайра. Бо Docker, ин мушкилот тавассути иҷро кардани версияҳои гуногуни барнома дар контейнерҳои алоҳида, ки барои онҳо ҷудокунии захираҳо дар як ҳост (сервер/мошини виртуалӣ) кафолат дода мешавад, ба осонӣ ҳал карда мешавад. Албатта, шумо метавонед бо баъзе ҳилаҳо бидуни изолятсия тамоман даст кашед, аммо агар асбоби тайёр ва қулай мавҷуд бошад, пас сабаби баръакс вуҷуд дорад - беэътиноӣ накунед.
Контейнеризатсия ҳангоми ҷойгиркунӣ бисёр манфиатҳои дигар медиҳад. Ҳар як барнома вобаста аст версияи мушаххас (ё диапазони версия) тарчумон, мавҷудияти модулҳо / васеъшавӣ ва ғайра, инчунин версияҳои онҳо. Ва ин на танҳо ба муҳити фаврии иҷрошаванда, балки ба тамоми муҳити зист, аз ҷумла нармафзори системавӣ ва версияи он (то паҳнкунии Linux истифода мешавад). Аз сабаби он, ки контейнерҳо на танҳо рамзи барнома, балки инчунин система ва нармафзори барномавии версияҳои заруриро дар бар мегиранд, шумо метавонед мушкилотро бо вобастагӣ фаромӯш кунед.
Моҳияти умумии онҳо аз он иборат аст, ки мувофиқати пурраи муҳити истифодашаванда (инчунин набудани омили инсонӣ) зарур аст. Чӣ тавр мо метавонем такроршавандаро кафолат диҳем? Тасвирҳои Docker эҷод кунед дар асоси коди Git, ва сипас онҳоро барои ҳама гуна вазифа истифода баред: дар сайтҳои санҷишӣ, дар истеҳсолот, дар мошинҳои маҳаллии барномасозон... Дар баробари ин муҳим аст, ки амалҳое, ки иҷро мешаванд, ҳадди ақалл кам карда шаванд. после васл кардани тасвир: хар кадар соддатар бошад, хатогихо хамон кадар кам мешаванд.
Инфрасохтор рамз аст
Агар талабот ба инфрасохтор (мавҷудияти нармафзори сервер, версияи он ва ғ.) ба расмият дароварда нашуда бошад ва "барнома" карда нашавад, пас ҷорӣ кардани ҳама гуна навсозии барнома метавонад ба оқибатҳои фалокатовар оварда расонад. Масалан, ҳангоми саҳнасозӣ шумо аллакай ба PHP 7.0 гузаштаед ва кодро мувофиқи он аз нав навиштаед - пас пайдоиши он дар истеҳсолот бо ягон PHP кӯҳна (5.5) албатта касеро ба ҳайрат меорад. Шумо шояд тағироти ҷиддиро дар версияи тарҷумон фаромӯш накунед, аммо "шайтон дар тафсилот аст": ногаҳонӣ метавонад дар навсозии ночизи ҳама гуна вобастагӣ бошад.
Усули ҳалли ин мушкилот маълум аст IaC (Инфраструктураи ҳамчун Кодекс, "инфраструктураи ҳамчун код") ва нигоҳдории талаботҳои инфрасохторро дар якҷоягӣ бо рамзи барнома дар бар мегирад. Бо истифода аз он, таҳиягарон ва мутахассисони DevOps метавонанд бо ҳамон як анбори замимаҳои Git кор кунанд, аммо дар қисматҳои гуногуни он. Аз ин код, дар Git тасвири Docker сохта мешавад, ки дар он барнома бо назардошти тамоми хусусиятҳои инфрасохтор ҷойгир карда мешавад. Оддӣ карда гӯем, скриптҳо (қоидаҳо) барои ҷамъ кардани тасвирҳо бояд дар як репозиторий бо коди манбаъ бошанд ва якҷоя карда шаванд.
Дар мавриди меъмории бисёрқабатаи замимаҳо - масалан, nginx мавҷуд аст, ки дар назди замимае, ки аллакай дар дохили контейнери Docker кор мекунад - тасвирҳои Docker бояд аз код дар Git барои ҳар як қабат сохта шаванд. Пас аз он тасвири аввал дорои замима бо тарҷумон ва дигар вобастагии "наздик" ва тасвири дуюм nginx боло иборат хоҳад буд.
Тасвирҳои Docker, иртибот бо Git
Мо ҳама тасвирҳои Docker-ро, ки аз Git ҷамъоварӣ шудаанд, ба ду категория тақсим мекунем: муваққатӣ ва озод. Тасвирҳои муваққатӣ ки бо номи филиал дар Git нишон дода шудаанд, метавонанд аз ҷониби супориши навбатӣ аз нав навишта шаванд ва танҳо барои пешнамоиш (на барои истеҳсол) паҳн карда мешаванд. Ин фарқи калидии онҳо аз барориши онҳост: шумо ҳеҷ гоҳ намедонед, ки кадом ӯҳдадории мушаххас дар онҳост.
Ҷамъоварӣ ба тасвирҳои муваққатӣ маъно дорад: филиали усто (шумо метавонед онро ба таври худкор ба сайти алоҳида гузоред, то версияи ҷории устодро доимо бубинед), филиалҳо бо релизҳо, шохаҳои навовариҳои мушаххас.
Пас аз он ки пешнамоиши тасвирҳои муваққатӣ ба зарурати тарҷума ба истеҳсолот меояд, таҳиягарон тегҳои муайянро гузоштанд. Ба таври худкор аз рӯи тег ҷамъоварӣ карда мешавад озод кардани тасвир (теги он ба теги аз Git мувофиқат мекунад) ва ба саҳна гузошта мешавад. Агар он аз тарафи шуъбаи сифат бомуваффакият санчида шавад, он ба истехсолот меравад.
dapper
Ҳама чизҳои тавсифшуда (баробаркунӣ, васлкунии тасвирҳо, нигоҳдории минбаъда) метавонанд мустақилона бо истифода аз скриптҳои Bash ва дигар асбобҳои "импровизатсияшуда" амалӣ карда шаванд. Аммо агар шумо ин корро кунед, пас дар як лаҳза татбиқи он ба мураккабии бузург ва назорати суст оварда мерасонад. Бо фаҳмидани ин, мо омадем, ки як утилитаи махсуси ҷараёни кори худро барои сохтани CI/CD эҷод кунем - dapper.
Рамзи сарчашмаи он дар Ruby навишта шудааст, манбаи кушода ва дар он нашр мешавад GitHub. Мутаассифона, ҳуҷҷатгузорӣ айни замон заифтарин нуқтаи асбоб аст, аммо мо дар болои он кор карда истодаем. Ва мо дар бораи дап як бору ду бор менависем ва сухбат мекунем, зеро... Мо самимона наметавонем интизор шавем, ки қобилиятҳои онро бо тамоми ҷомеаи манфиатдор мубодила кунем, аммо дар ҳамин ҳол, масъалаҳои худро ирсол кунед ва дархостҳоро кашед ва/ё таҳияи лоиҳаро дар GitHub пайгирӣ кунед.
Навсозии 13 августи соли 2019: айни замон лоиҳа dapper номгузорӣ шудааст верф, рамзи он дар Go комилан аз нав навишта шудааст ва ҳуҷҷатгузории он ба таври назаррас такмил дода шудааст.
Кубернитель
Боз як воситаи омодаи кушодаасос, ки аллакай дар муҳити касбӣ эътирофи назаррас гирифтааст Кубернитель, кластери идоракунии Docker. Мавзӯи истифодаи он дар амалисозии лоиҳаҳои дар Docker сохташуда аз доираи гузориш берун аст, бинобар ин муаррифӣ бо шарҳи баъзе хусусиятҳои ҷолиб маҳдуд аст.
Видео аз намоиш (тақрибан як соат) дар YouTube нашр шудааст(худи гузориш аз дақиқаи 5 оғоз мешавад - истинодро пайгирӣ кунед, то аз ин лаҳза бозӣ кунед).