Добро размислите пре него што користите Доцкер-ин-Доцкер за ЦИ или тестно окружење

Добро размислите пре него што користите Доцкер-ин-Доцкер за ЦИ или тестно окружење

Доцкер-ин-Доцкер је виртуелизовано Доцкер демонско окружење које ради унутар самог контејнера за прављење слика контејнера. Главна сврха стварања Доцкер-ин-Доцкер-а била је да се помогне у развоју самог Доцкер-а. Многи људи га користе за покретање Јенкинс ЦИ. Ово у почетку изгледа нормално, али онда се јављају проблеми који се могу избећи инсталирањем Доцкер-а у Јенкинс ЦИ контејнер. Овај чланак вам говори како то да урадите. Ако сте заинтересовани за коначно решење без детаља, само прочитајте последњи одељак чланка, „Решавање проблема“.

Добро размислите пре него што користите Доцкер-ин-Доцкер за ЦИ или тестно окружење

Доцкер-ин-Доцкер: "Добро"

Пре више од две године ставио сам у Доцкер застава – привилегован и написао прва верзија динд. Циљ је био помоћи основном тиму да брже развије Доцкер. Пре Доцкер-ин-Доцкер-а, типичан развојни циклус је изгледао овако:

  • хацкити хацк;
  • градити;
  • заустављање покретаног Доцкер демона;
  • покретање новог Доцкер демона;
  • тестирање;
  • поновите циклус.

Ако сте желели да направите леп, поновљив склоп (то јест, у контејнеру), онда је постало сложеније:

  • хацкити хацк;
  • проверите да ли је покренута радна верзија Доцкер-а;
  • изградити нови Доцкер са старим Доцкером;
  • заустави Доцкер демон;
  • покренути нови Доцкер демон;
  • тест;
  • заустави нови Доцкер демон;
  • понављање.

Са појавом Доцкер-ин-Доцкер-а, процес је постао једноставнији:

  • хацкити хацк;
  • монтажа + лансирање у једној фази;
  • поновите циклус.

Није ли овако много боље?

Добро размислите пре него што користите Доцкер-ин-Доцкер за ЦИ или тестно окружење

Доцкер-ин-Доцкер: "Лоше"

Међутим, супротно популарном веровању, Доцкер-ин-Доцкер није 100% звезде, понији и једнорози. Оно што мислим је да постоји неколико проблема којих програмер треба да буде свестан.

Један од њих се односи на ЛСМ (Линук безбедносни модули) као што су АппАрмор и СЕЛинук: када покреће контејнер, „интерни Доцкер“ може покушати да примени безбедносне профиле који ће бити у сукобу или збунити „спољни Доцкер“. Ово је најтежи проблем за решавање када се покушава спојити оригинална имплементација –привилегед заставице. Моје промене су функционисале и сви тестови би прошли на мојој Дебиан машини и Убунту тест ВМ-овима, али би се срушили и спалили на машини Мајкла Кросбија (имао је Федору колико се сећам). Не могу да се сетим тачног узрока проблема, али можда је то било зато што је Мике мудар момак који ради са СЕЛИНУКС=енфорце (користио сам АппАрмор) и моје промене нису узеле у обзир СЕЛинук профиле.

Доцкер-ин-Доцкер: "Зло"

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

Ако покренете БТРФС на врху БТРФС-а, у почетку би требало да ради, али када постоје угнежђени подволумени, брисање родитељског подволумена неће успети. Модул Девице Маппер нема простор имена, тако да ако га више Доцкер инстанци покреће на истој машини, све ће моћи да виде (и утичу) на слике једна на другој и на уређајима за резервну копију контејнера. Ово је лоше.

Постоје заобилазна решења за решавање многих од ових проблема. На пример, ако желите да користите АУФС у интерном Доцкер-у, само окрените фасциклу /вар/либ/доцкер у волумен и биће вам добро. Доцкер је додао неке основне просторе имена именима циљева Девице Маппер тако да ако се више Доцкер позива покреће на истој машини, они неће нагазити један на другог.

Међутим, таква поставка није нимало једноставна, као што се види из ових чланци у спремишту динд на ГитХуб-у.

Доцкер-ин-Доцкер: Постаје горе

Шта је са кеш меморијом за изградњу? Ово такође може бити прилично тешко. Људи ме често питају „ако користим Доцкер-ин-Доцкер, како могу да користим слике хостоване на мом хосту уместо да повлачим све назад у свој интерни Доцкер“?

Неки предузимљиви људи су покушали да повежу /вар/либ/доцкер са хоста на Доцкер-ин-Доцкер контејнер. Понекад деле /вар/либ/доцкер са више контејнера.

Добро размислите пре него што користите Доцкер-ин-Доцкер за ЦИ или тестно окружење
Да ли желите да оштетите своје податке? Јер је управо то оно што ће оштетити ваше податке!

Доцкер даемон је јасно дизајниран да има ексклузивни приступ /вар/либ/доцкер. Ништа друго не би требало да „додирне, боцка или продира“ било коју Доцкер датотеку која се налази у овој фасцикли.

Зашто је то тако? Зато што је ово резултат једне од најтежих лекција научених током развоја дотЦлоуд-а. ДотЦлоуд контејнерски механизам је радио тако што је више процеса истовремено приступало /вар/либ/дотцлоуд. Лукави трикови као што су атомска замена датотека (уместо уређивања на месту), додавање кода саветодавним и обавезним бравама и други експерименти са сигурним системима као што су СКЛите и БДБ нису увек функционисали. Када смо редизајнирали наш мотор контејнера, који је на крају постао Доцкер, једна од великих дизајнерских одлука била је да се све операције контејнера обједине под једним демоном како би се уклониле све глупости о истовремености.

Немојте ме погрешно схватити: сасвим је могуће направити нешто добро, поуздано и брзо што укључује више процеса и модерну паралелну контролу. Али мислимо да је једноставније и лакше писати и одржавати код користећи Доцкер као једини играч.

То значи да ћете имати проблема ако делите /вар/либ/доцкер директоријум између више инстанци Доцкер-а. Наравно, ово може да функционише, посебно у раним фазама тестирања. „Слушај, мама, могу да покренем Убунту као доцкер!“ Али покушајте нешто сложеније, као што је извлачење исте слике из две различите инстанце, и видећете да свет гори.

То значи да ако ваш ЦИ систем изводи градње и реконструкције, сваки пут када поново покренете Доцкер-ин-Доцкер контејнер, ризикујете да испустите нуке у његову кеш меморију. Ово уопште није кул!

Решење

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

Кладим се да већина људи жели другу опцију, што значи да желе да ЦИ систем попут Џенкинса може да покреће контејнере. А најлакши начин да то урадите је да једноставно уметнете Доцкер утичницу у свој ЦИ контејнер и повежете га са -в заставицом.

Једноставно речено, када покренете свој ЦИ контејнер (Јенкинс или други), уместо да хакујете нешто заједно са Доцкер-ин-Доцкер-ом, почните га са линијом:

docker run -v /var/run/docker.sock:/var/run/docker.sock ...

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

Пробајте ово користећи званичну доцкер слику (која садржи бинарни Доцкер):

docker run -v /var/run/docker.sock:/var/run/docker.sock 
           -ti docker

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

Напомена: Претходне верзије овог чланка саветовале су повезивање Доцкер бинарног фајла са хоста на контејнер. Ово је сада постало непоуздано јер Доцкер мотор више не покрива статичке или скоро статичне библиотеке.

Дакле, ако желите да користите Доцкер из Јенкинс ЦИ, имате 2 опције:
инсталирање Доцкер ЦЛИ користећи основни систем за паковање слика (тј. ако је ваша слика заснована на Дебиан-у, користите .деб пакете), користећи Доцкер АПИ.

Неки огласи 🙂

Хвала вам што сте остали са нама. Да ли вам се свиђају наши чланци? Желите да видите још занимљивијег садржаја? Подржите нас тако што ћете наручити или препоручити пријатељима, ВПС у облаку за програмере од 4.99 УСД, јединствени аналог сервера почетног нивоа, који смо ми измислили за вас: Цела истина о ВПС (КВМ) Е5-2697 в3 (6 језгара) 10ГБ ДДР4 480ГБ ССД 1Гбпс од 19 долара или како делити сервер? (доступно са РАИД1 и РАИД10, до 24 језгра и до 40 ГБ ДДР4).

Делл Р730кд 2 пута јефтинији у Екуиник Тиер ИВ дата центру у Амстердаму? Само овде 2 к Интел ТетраДеца-Цоре Ксеон 2к Е5-2697в3 2.6ГХз 14Ц 64ГБ ДДР4 4к960ГБ ССД 1Гбпс 100 ТВ од 199 УСД у Холандији! Делл Р420 - 2к Е5-2430 2.2Гхз 6Ц 128ГБ ДДР3 2к960ГБ ССД 1Гбпс 100ТБ - од 99 долара! Читали о Како изградити инфраструктурну корпорацију. класе уз коришћење Делл Р730кд Е5-2650 в4 сервера у вредности од 9000 евра за пени?

Извор: ввв.хабр.цом

Додај коментар