Добици:
- Способност разумевања концепата контејнера и Доцкерфиле-а, основних упутстава и логике слојева и вештачке интелигенције за производњу Доцкерфиле-а који је спреман за производњу
- Способност смањења величине слике и повећања брзине примене и безбедности помоћу вишестепене израде и мале основне слике
- Способност примене безбедносних принципа неуграђивања тајне у слику, покретања са неовлашћеним корисником уместо роот-а и скенирања слике
Реченица „Радило се на мом рачунару“ је најскупља реченица у историји софтвера. Исти код експлодира на другом серверу због различите верзије библиотеке. Технологија контејнера решава управо овај проблем: ставља вашу апликацију са свиме што јој је потребно за покретање — библиотекама, рунтиме-ом, подешавањима — у један преносиви пакет. Овај пакет функционише потпуно исто свуда. Најчешћи алат за контејнере је Доцкер.
Опис контејнера се зове Доцкерфиле: то је текстуална датотека која објашњава редоследом са које основне слике ће ваша апликација почети, које датотеке ће бити копиране и које команде ће се покренути. Слика се производи из овог рецепта; Када се слика покрене, она постаје контејнер. АИ је веома вешт у писању Доцкерфиле-а и — што је још важније — у смањивању и обезбеђивању истог. Али ваш је посао да разумете шта генерисани рецепт ради и где може да ода тајне.
Основна упутства за Доцкерфиле
Да бисте извршили ревизију Доцкерфиле-а, требало би да знате основна упутства:
- `ФРОМ`: Бира основну слику (на пример питхон:3.12-слим). Одатле у великој мери долази величина и сигурност слике.
- `ВОРКДИР`: Одређује радни директоријум.
- `ЦОПИ` / `АДД`: Копира датотеке на слику.
- `РУН`: Покреће команду током изградње (нпр. инсталира зависност). Сваки РУН ствара нови слој.
- `ЕНВ`: Дефинише променљиву окружења.
- `ЕКСПОСЕ`: Документи на ком порт слуша контејнер.
- `ЦМД` / `ЕНТРИПОИНТ`: Одређује команду која ће се покренути када се контејнер покрене.
Критичан концепт је слој: Доцкер кешира сваку инструкцију као слој. Ако кораке који се често мењају ставите на крај, непроменљиви слојеви ће доћи из кеша и изградња ће се убрзати.
Савет: Две највеће полуге за смањење величине слике су: (1) одабир мале основне слике као што је слим или алпине; (2) коришћење вишестепене градње — напуштање алата за прављење у једној фази и само преношење коначног производа на танку слику. АИ може стручно имплементирати ово двоје кад год жели.
Зашто је мала слика толико важна? Јер величина слике није само проблем диска. Великој слици је потребно више времена да се повуче са сваким постављањем, заузима више простора у регистратору, успорава покретање нових подова док се скалира, а пошто садржи више пакета, пружа већу површину напада—то јест, отворен простор за нападач који може да искористи. Коришћење слике од 100 МБ уместо слике од 1 ГБ; Скраћује време примене, смањује трошкове и повећава безбедност. Оптимизација Доцкерфиле-а истовремено убире ове три предности. Експлицитно наведите циљ „најмање коначне слике“ када тражите од АИ оптимизован Доцкерфиле; стога даје приоритет раздвајању фазе компилације и одбацивању непотребних пакета.
Корак по корак: Генерисање и оптимизација Доцкерфиле-а помоћу вештачке интелигенције
- Опишите апликацију. Језик, верзија, команда за унос, слушани порт.
- Направите први нацрт. Затражите једноставан радни Доцкерфиле.
- Оптимизујте га. Затражите од исте вештачке интелигенције вишестепену изградњу, мању основну слику и оптимизацију редоследа слојева.
- Проверите безбедност. Да ли је тајна уграђена, да ли ради као роот, има ли непотребних алата?
- Изградите и измерите величину. Погледајте величину са доцкер сликама након израде доцкер-а.
- Скенирај. Проверите познате рањивости помоћу скенера за експлоатацију као што је доцкер сцоут или триви.
Сигурност: ризици специфични за контејнер
Сигурност контејнера се лако превиди. три правила:
- Немојте уграђивати Тајну у слику. Линије попут ЕНВ АПИ_КЕИ=... или ЦОПИ .енв трајно уписују тајну у слојеве слике; Свако ко добије слику може да је прочита. Дајте тајну у време извођења као променљиву окружења или из трезора.
- Покреће се као роот. Подразумевано, контејнери се покрећу као роот; Отвор се може претворити у бекство из контејнера. Пребаците неовлашћеном кориснику са упутством УСЕР.
- Мала и ажурна основна слика. Надувене слике су спорије и имају више рањивости. Изаберите слим/алпине, поправите верзију (не користите :латест).
Опрез: Чак и ако користите тајну у РУН-у, а затим је избришете, она остаје у међуверу и може се прочитати назад преко историје докера. Ако је потребна тајна током изградње, користите Доцкер-ов --сецрет механизам, а не ЕНВ/ЦОПИ.
Табела утицаја оптимизације
техничких
Шта ради
Типичан ефекат
витка/алпска основна слика
Одбацује непотребне пакете
900МБ → 120МБ
Вишестепена изградња
Искључује алате за прављење
700МБ → 90МБ
.доцкеригноре
Не укључује непотребне датотеке у буилд
Бржа израда, мали контекст
Разврставање по слојевима
Повећава погодак у кеш меморији
Израда 5 мин → 40 сек
Поправљање верзије (:15)
Поновљивост + сигурност
Спречава нагло погоршање
три мини кофера
Случај 1 — слика од 1,1 ГБ смањена на 95 МБ. Слика Ноде.јс једног тима била је 1,1 ГБ; Свако распоређивање трајало је неколико минута. Рекли су АИ да "оптимизује ово са вишестепеном градњом и алпином". АИ је одвојио фазу компилације и преместио само генерисане датотеке на танку слику; Резултат је био 95 МБ, време имплементације је смањено за једну трећину.
Случај 2 — закопана тајна ухваћена. Инжењер је приметио линију ЕНВ ДБ_ПАССВОРД=прод_сецрет у Доцкерфиле-у који је направио ИЗ. АИ је уградио лозинку у слику да би "функционисала". Инжењер је ово уклонио и променио у читање лозинке из променљиве окружења у току рада. У супротном, свако ко је снимио слику могао би да прочита лозинку.
Случај 3 — ризик од избијања корена. Алат за скенирање је известио да слика коју је произвела АИ ради као роот и да садржи критичну рањивост. Тим је додао УСЕР аппусер и гурнуо основну слику у тренутну верзију; скенирање је обрисано. Лекција: скенирајте сваку слику пре објављивања и изложите је неовлашћеним корисницима.
Четири шаблона за копирање
1) Генерисање оптимизованог Доцкер фајла:
Напишите Доцкерфиле спреман за производњу за апликацију [ЛАНГУАГЕ/ФРАМЕВОРК]. Смернице: - Користите вишестепену израду; учините коначну слику најмањом могућом.- Основна слика је слим/алпине и верзија је фиксна (не користите ":латест").- Покрените контејнер са неовлашћеним КОРИСНИКОМ, НЕ роот.- НИКАДА не уграђујете тајну у слику; Сачекајте променљиву окружења у току рада. - Додајте предлог .доцкеригноре. Улазна команда: [Кс], порт за слушање: [И].
2) Оптимизујте постојећи Доцкерфиле:
Погледајте овај Доцкерфиле да бисте га минимизирали и убрзали. Препоручити конкретне промене у погледу редоследа слојева, вишефазне изградње, основне слике и редундантних пакета; Запишите процењени утицај сваке промене на величину/брзину. Доцкерфиле: [ЦОНТЕНТ]
3) Ревизија безбедности:
Проверите овај Доцкерфиле ради безбедности: да ли постоје уграђене тајне, роот корисници, непоправљене верзије, непотребни алати, застареле основне слике? Наведите налазе по важности и евентуалне исправке. Доцкерфиле: [ЦОНТЕНТ]
4) Решавање грешака у изградњи:
Шта узрокује ову грешку у изградњи доцкер-а и како је решити? Дајте ми основни узрок и решење са минималним изменама. Немојте производити стварну вредност тамо где видите Тајну, користите чувар места. Грешка: [ЛОГ] Доцкерфиле: [ЦОНТЕНТ]
Слаби промпт / Јаки промпт
Слабо: „Напишите Доцкерфиле за моју апликацију Ноде.“
Резултат: огромна основна слика, роот корисник, једностепени, вероватно рањив на тајну; Излаз без обзира на величину и сигурност.
Снажно: „Напишите Доцкерфиле спреман за производњу за моју апликацију Ноде 20: вишестепена израда, ноде:20-алпине базна слика (верзија фиксна), покретање са неовлашћеним КОРИСНИКОМ, тајно уграђивање, слушање на порту 3000, чвор за пријаву дист/сервер.јс. Такође предложите .доцкеригноре.“
Разлика: друга верзија промпта даје технику оптимизације, безбедносно правило и команду за пријаву; Излаз постаје мали, сигуран и директно употребљив.
Уобичајене грешке
- Уграђивање тајне у слику помоћу `ЕНВ`/`ЦОПИ`. Остаје у слојевима и чита се назад.
- Покреће се као роот. Прескакање УСЕР инструкције је озбиљан безбедносни ризик.
- Коришћење `:најновије`. То ствара непоновљиве градње и неочекиване поремећаје.
- Прескакање вишестепене градње. Алати за компилацију непотребно надимају коначну слику.
- Немојте писати `.доцкеригноре`. Огромни директоријуми као што су .гит и ноде_модулес су укључени у буилд.
- Објављивање слике без скенирања. Стварање познатих рањивости без њиховог схватања.
Укратко
Контејнери стављају апликацију у преносиве пакете који свуда раде исто; рецепт је Доцкерфиле. АИ је моћан у производњи спремних за производњу и оптимизованих Доцкер фајлова — али морате експлицитно да захтевате вишестепене градње, мале основне слике, без неовлашћених корисника и без тајни. Смањење величине слике убрзава примену; Неуграђивање тајне, избегавање роот-а и скенирање слике осигуравају сигурност. Ваша је одговорност да проверите шта сваки рецепт ради и где цури.
Задатак апликације
Изаберите једноставну апликацију. Нека АИ генерише Доцкерфиле са шаблоном „Оптимизовано генерисање Доцкерфиле-а“. Затим: (1) Нека се уграђени тајни и роот корисник провере помоћу шаблона „Безбедносна провера“; (2) ако је могуће, направите доцкер и измерите величину помоћу доцкер слика; (3) забележите која техника ће бити најефикаснија у смањењу слике као следећи корак.
контролна листа
- [ ] Додао сам верзију језика/фрамеворка, команду за унос и порт у свој упит.
- [ ] У Доцкерфиле-у нема уграђених тајни; очекује се у тајном времену рада.
- [ ] Контејнер ради са неовлашћеним КОРИСНИКОМ, а не са роот-ом.
- [ ] Основна слика је мала (слим/алпине) и њена верзија је фиксна (но:латест).
- [ ] Користио сам вишестепену градњу и .доцкеригноре.
- [ ] Скенирао сам слику скенером рањивости.