Амалияи интиқоли пайваста бо Docker (баррасӣ ва видео)

Мо блоги худро бо нашрияҳо дар асоси суханрониҳои охирини директори техникии худ оғоз мекунем дистол (Дмитрий Столяров). Ҳамаи онҳо дар соли 2016 дар чорабиниҳои гуногуни касбӣ баргузор шуданд ва ба мавзӯи DevOps ва Docker бахшида шуда буданд. Як видео аз вохӯрии Докер Маскав дар идораи Badoo, мо аллакай дорем нашр шуд Онлайн. Мақолаҳои нав бо мақолаҳое ҳамроҳ мешаванд, ки моҳияти гузоришҳоро баён мекунанд. Пас…

31 май дар конференция RootConf 2016, ки дар доираи фестивали «Технологияҳои интернетии Русия» (RIT++ 2016) баргузор гардид, бахши «Ҷойгиркунии доимӣ ва густариш» бо гузориши «Таҷрибаҳои беҳтарини интиқоли пайваста бо Докер» кушода шуд. Он таҷрибаҳои беҳтаринро барои сохтани раванди Continuous Delivery (CD) бо истифода аз Docker ва дигар маҳсулоти кушодаасос ҷамъбаст ва ба низом даровардааст. Мо бо ин карорхо дар истехсолот кор мекунем, ки ин ба мо имкон медихад ба тачрибаи амалй такья кунем.

Амалияи интиқоли пайваста бо Docker (баррасӣ ва видео)

Агар шумо имконият дошта бошед, ки як соат сарф кунед видеои гузориш, тавсия медиҳем, ки онро пурра тамошо кунед. Дар акси ҳол, дар зер хулосаи асосӣ дар шакли матн оварда шудааст.

Интиқоли муттасил бо Docker

Бо Таҳвили доимӣ мо силсилаи рӯйдодҳоро дарк мекунем, ки дар натиҷа рамзи барнома аз анбори Git аввал ба истеҳсолот меояд ва сипас дар бойгонӣ ба охир мерасад. Чунин ба назар мерасад: Git → Сохта → Санҷиш → Баровард → Истифода кунед.

Амалияи интиқоли пайваста бо Docker (баррасӣ ва видео)
Аксари гузоришҳо ба марҳилаи сохтмон (маҷлиси барнома) бахшида шудаанд ва мавзӯъҳои интишор ва амалкунанда ба таври мухтасар баррасӣ мешаванд. Мо дар бораи мушкилот ва намунаҳое сӯҳбат хоҳем кард, ки ба шумо имкон медиҳанд, ки онҳоро ҳал кунед ва татбиқи мушаххаси ин намунаҳо метавонанд гуногун бошанд.

Чаро Docker дар ин ҷо умуман лозим аст? Бесабаб нест, ки мо тасмим гирифтем, ки дар бораи амалияҳои интиқоли муттасил дар заминаи ин абзори кушодаасос сӯҳбат кунем. Гарчанде ки тамоми гузориш ба истифодаи он бахшида шудааст, сабабҳои зиёде ҳангоми баррасии шакли асосии паҳнкунии рамзи барнома ошкор карда мешаванд.

Намунаи асосии паҳнкунӣ

Ҳамин тавр, вақте ки мо версияҳои нави барномаро мебарорем, мо бешубҳа бо он дучор мешавем мушкилоти бекористӣ, ҳангоми гузариш ба сервери истеҳсолӣ тавлид мешавад. Трафик аз версияи кӯҳнаи барнома ба версияи нав наметавонад фавран гузарад: аввал мо бояд боварӣ ҳосил кунем, ки версияи нав на танҳо бомуваффақият зеркашӣ карда мешавад, балки инчунин "гарм" шудааст (яъне, комилан барои хидматрасонии дархостҳо омода аст).

Амалияи интиқоли пайваста бо Docker (баррасӣ ва видео)
Ҳамин тариқ, чанд вақт ҳарду версияи барнома (кӯҳна ва нав) дар як вақт кор мекунанд. ки ба таври худкор ба он оварда мерасонад ихтилофи захираҳои муштарак: шабака, системаи файлӣ, IPC ва ғайра. Бо Docker, ин мушкилот тавассути иҷро кардани версияҳои гуногуни барнома дар контейнерҳои алоҳида, ки барои онҳо ҷудокунии захираҳо дар як ҳост (сервер/мошини виртуалӣ) кафолат дода мешавад, ба осонӣ ҳал карда мешавад. Албатта, шумо метавонед бо баъзе ҳилаҳо бидуни изолятсия тамоман даст кашед, аммо агар асбоби тайёр ва қулай мавҷуд бошад, пас сабаби баръакс вуҷуд дорад - беэътиноӣ накунед.

Контейнеризатсия ҳангоми ҷойгиркунӣ бисёр манфиатҳои дигар медиҳад. Ҳар як барнома вобаста аст версияи мушаххас (ё диапазони версия) тарчумон, мавҷудияти модулҳо / васеъшавӣ ва ғайра, инчунин версияҳои онҳо. Ва ин на танҳо ба муҳити фаврии иҷрошаванда, балки ба тамоми муҳити зист, аз ҷумла нармафзори системавӣ ва версияи он (то паҳнкунии Linux истифода мешавад). Аз сабаби он, ки контейнерҳо на танҳо рамзи барнома, балки инчунин система ва нармафзори барномавии версияҳои заруриро дар бар мегиранд, шумо метавонед мушкилотро бо вобастагӣ фаромӯш кунед.

Биёед умумӣ кунем намунаи асосии паҳнкунӣ версияҳои нав бо назардошти омилҳои зерин:

  1. Дар аввал, версияи кӯҳнаи барнома дар контейнери аввал кор мекунад.
  2. Пас аз он версияи нав печонида мешавад ва дар як контейнери дуюм "гарм мешавад". Қобили зикр аст, ки худи ин версияи нав метавонад на танҳо рамзи навшудаи барнома, балки ҳама гуна вобастагии он, инчунин ҷузъҳои системаро (масалан, версияи нави OpenSSL ё тамоми паҳнкуниро) дошта бошад.
  3. Вақте ки версияи нав пурра ба дархостҳо омода аст, трафик аз контейнери якум ба дуюм мегузарад.
  4. Варианти кӯҳна ҳоло метавонад қатъ карда шавад.

Чунин равиши ҷойгиркунии версияҳои гуногуни барнома дар контейнерҳои алоҳида як роҳати дигарро фароҳам меорад - бозгашти зуд ба версияи кӯҳна (дар ниҳоят, барои интиқоли трафик ба контейнери дилхоҳ кифоя аст).

Амалияи интиқоли пайваста бо Docker (баррасӣ ва видео)
Тавсияи ниҳоии аввал ба чизе монанд аст, ки ҳатто капитан дар он айб пайдо карда натавонист: "[ҳангоми ташкили интиқоли муттасил бо Docker] Docker-ро истифода баред [ва фаҳмед, ки он чӣ медиҳад]" Дар хотир доред, ки ин як тири нуқрае нест, ки ҳама мушкилотро ҳал мекунад, балки асбобест, ки заминаи олиҷанобро фароҳам меорад.

Таҷдидпазирӣ

Бо "таҷдиди такрорӣ" мо маҷмӯи умумии мушкилотро дар назар дорем, ки ҳангоми истифодаи барномаҳо дучор мешаванд. Мо дар бораи чунин ҳолатҳо сухан меронем:

  • Скриптҳое, ки аз ҷониби шӯъбаи сифат барои саҳнасозӣ санҷида шудаанд, бояд дар истеҳсолот дақиқ такрор карда шаванд.
  • Барномаҳо дар серверҳое нашр мешаванд, ки метавонанд бастаҳоро аз оинаҳои гуногуни репозиторий қабул кунанд (бо мурури замон онҳо нав карда мешаванд ва бо онҳо версияҳои замимаҳои насбшуда).
  • "Ҳама чиз барои ман дар маҳал кор мекунад!" (...ва таҳиягарон ба истеҳсол иҷозат дода намешаванд.)
  • Шумо бояд чизеро дар версияи кӯҳна (архившуда) тафтиш кунед.
  • ...

Моҳияти умумии онҳо аз он иборат аст, ки мувофиқати пурраи муҳити истифодашаванда (инчунин набудани омили инсонӣ) зарур аст. Чӣ тавр мо метавонем такроршавандаро кафолат диҳем? Тасвирҳои Docker эҷод кунед дар асоси коди Git, ва сипас онҳоро барои ҳама гуна вазифа истифода баред: дар сайтҳои санҷишӣ, дар истеҳсолот, дар мошинҳои маҳаллии барномасозон... Дар баробари ин муҳим аст, ки амалҳое, ки иҷро мешаванд, ҳадди ақалл кам карда шаванд. после васл кардани тасвир: хар кадар соддатар бошад, хатогихо хамон кадар кам мешаванд.

Инфрасохтор рамз аст

Агар талабот ба инфрасохтор (мавҷудияти нармафзори сервер, версияи он ва ғ.) ба расмият дароварда нашуда бошад ва "барнома" карда нашавад, пас ҷорӣ кардани ҳама гуна навсозии барнома метавонад ба оқибатҳои фалокатовар оварда расонад. Масалан, ҳангоми саҳнасозӣ шумо аллакай ба PHP 7.0 гузаштаед ва кодро мувофиқи он аз нав навиштаед - пас пайдоиши он дар истеҳсолот бо ягон PHP кӯҳна (5.5) албатта касеро ба ҳайрат меорад. Шумо шояд тағироти ҷиддиро дар версияи тарҷумон фаромӯш накунед, аммо "шайтон дар тафсилот аст": ногаҳонӣ метавонад дар навсозии ночизи ҳама гуна вобастагӣ бошад.

Усули ҳалли ин мушкилот маълум аст IaC (Инфраструктураи ҳамчун Кодекс, "инфраструктураи ҳамчун код") ва нигоҳдории талаботҳои инфрасохторро дар якҷоягӣ бо рамзи барнома дар бар мегирад. Бо истифода аз он, таҳиягарон ва мутахассисони DevOps метавонанд бо ҳамон як анбори замимаҳои Git кор кунанд, аммо дар қисматҳои гуногуни он. Аз ин код, дар Git тасвири Docker сохта мешавад, ки дар он барнома бо назардошти тамоми хусусиятҳои инфрасохтор ҷойгир карда мешавад. Оддӣ карда гӯем, скриптҳо (қоидаҳо) барои ҷамъ кардани тасвирҳо бояд дар як репозиторий бо коди манбаъ бошанд ва якҷоя карда шаванд.

Амалияи интиқоли пайваста бо Docker (баррасӣ ва видео)

Дар мавриди меъмории бисёрқабатаи замимаҳо - масалан, nginx мавҷуд аст, ки дар назди замимае, ки аллакай дар дохили контейнери Docker кор мекунад - тасвирҳои Docker бояд аз код дар Git барои ҳар як қабат сохта шаванд. Пас аз он тасвири аввал дорои замима бо тарҷумон ва дигар вобастагии "наздик" ва тасвири дуюм nginx боло иборат хоҳад буд.

Тасвирҳои Docker, иртибот бо Git

Мо ҳама тасвирҳои Docker-ро, ки аз Git ҷамъоварӣ шудаанд, ба ду категория тақсим мекунем: муваққатӣ ва озод. Тасвирҳои муваққатӣ ки бо номи филиал дар Git нишон дода шудаанд, метавонанд аз ҷониби супориши навбатӣ аз нав навишта шаванд ва танҳо барои пешнамоиш (на барои истеҳсол) паҳн карда мешаванд. Ин фарқи калидии онҳо аз барориши онҳост: шумо ҳеҷ гоҳ намедонед, ки кадом ӯҳдадории мушаххас дар онҳост.

Ҷамъоварӣ ба тасвирҳои муваққатӣ маъно дорад: филиали усто (шумо метавонед онро ба таври худкор ба сайти алоҳида гузоред, то версияи ҷории устодро доимо бубинед), филиалҳо бо релизҳо, шохаҳои навовариҳои мушаххас.

Амалияи интиқоли пайваста бо Docker (баррасӣ ва видео)
Пас аз он ки пешнамоиши тасвирҳои муваққатӣ ба зарурати тарҷума ба истеҳсолот меояд, таҳиягарон тегҳои муайянро гузоштанд. Ба таври худкор аз рӯи тег ҷамъоварӣ карда мешавад озод кардани тасвир (теги он ба теги аз Git мувофиқат мекунад) ва ба саҳна гузошта мешавад. Агар он аз тарафи шуъбаи сифат бомуваффакият санчида шавад, он ба истехсолот меравад.

dapper

Ҳама чизҳои тавсифшуда (баробаркунӣ, васлкунии тасвирҳо, нигоҳдории минбаъда) метавонанд мустақилона бо истифода аз скриптҳои Bash ва дигар асбобҳои "импровизатсияшуда" амалӣ карда шаванд. Аммо агар шумо ин корро кунед, пас дар як лаҳза татбиқи он ба мураккабии бузург ва назорати суст оварда мерасонад. Бо фаҳмидани ин, мо омадем, ки як утилитаи махсуси ҷараёни кори худро барои сохтани CI/CD эҷод кунем - dapper.

Рамзи сарчашмаи он дар Ruby навишта шудааст, манбаи кушода ва дар он нашр мешавад GitHub. Мутаассифона, ҳуҷҷатгузорӣ айни замон заифтарин нуқтаи асбоб аст, аммо мо дар болои он кор карда истодаем. Ва мо дар бораи дап як бору ду бор менависем ва сухбат мекунем, зеро... Мо самимона наметавонем интизор шавем, ки қобилиятҳои онро бо тамоми ҷомеаи манфиатдор мубодила кунем, аммо дар ҳамин ҳол, масъалаҳои худро ирсол кунед ва дархостҳоро кашед ва/ё таҳияи лоиҳаро дар GitHub пайгирӣ кунед.

Навсозии 13 августи соли 2019: айни замон лоиҳа dapper номгузорӣ шудааст верф, рамзи он дар Go комилан аз нав навишта шудааст ва ҳуҷҷатгузории он ба таври назаррас такмил дода шудааст.

Кубернитель

Боз як воситаи омодаи кушодаасос, ки аллакай дар муҳити касбӣ эътирофи назаррас гирифтааст Кубернитель, кластери идоракунии Docker. Мавзӯи истифодаи он дар амалисозии лоиҳаҳои дар Docker сохташуда аз доираи гузориш берун аст, бинобар ин муаррифӣ бо шарҳи баъзе хусусиятҳои ҷолиб маҳдуд аст.

Барои паҳнкунӣ, Kubernetes пешниҳод мекунад:

  • санҷиши омодагӣ — санҷиши омодагии версияи нави барнома (барои гузаштани трафик ба он);
  • навсозии чархиш - навсозии пайдарпайи тасвир дар кластери контейнерҳо (хомӯшкунӣ, навсозӣ, омодагӣ ба оғозёбӣ, гузариши трафик);
  • навсозии синхронӣ - навсозии тасвир дар кластер бо равиши дигар: аввал дар нисфи контейнерҳо, баъд дар боқимонда;
  • релизҳои канарей - оғоз кардани тасвири нав дар шумораи маҳдуди (хурд) контейнерҳо барои мониторинги аномалияҳо.

Азбаски таҳвили доимӣ на танҳо нашри версияи нав аст, Kubernetes як қатор имкониятҳоро барои нигоҳдории минбаъдаи инфрасохтор дорад: мониторинг ва сабти дарунсохт барои ҳама контейнерҳо, миқёси автоматӣ ва ғайра. Ҳамаи ин аллакай кор карда истодааст ва танҳо интизори дуруст аст. татбиқ дар равандҳои шумо.

Тавсияҳои ниҳоӣ

  1. Docker-ро истифода баред.
  2. Барои ҳама ниёзҳои худ тасвирҳои замимаҳои Docker эҷод кунед.
  3. Принсипи "Инфраструктура рамз аст" -ро риоя кунед.
  4. Гитро ба Docker пайваст кунед.
  5. Тартиби баровардани онро танзим кунед.
  6. Платформаи тайёрро истифода баред (Кубернетес ё дигар).

Видеоҳо ва слайдҳо

Видео аз намоиш (тақрибан як соат) дар YouTube нашр шудааст (худи гузориш аз дақиқаи 5 оғоз мешавад - истинодро пайгирӣ кунед, то аз ин лаҳза бозӣ кунед).

Муаррифии гузориш:

PS

Дигар гузоришҳо дар бораи мавзӯъ дар блоги мо:

Манбаъ: will.com

Илова Эзоҳ