Шумо ҳоло метавонед тасвирҳои Docker-ро дар werf бо истифода аз Dockerfile муқаррарӣ созед

Аз ҳаргиз дер беҳтар аст. Ё чӣ гуна мо бо надоштани дастгирии Dockerfiles муқаррарӣ барои сохтани тасвирҳои барнома қариб як хатои ҷиддӣ кардем.

Шумо ҳоло метавонед тасвирҳои Docker-ро дар werf бо истифода аз Dockerfile муқаррарӣ созед

Мо дар бораи он сӯҳбат мекунем верф — Утилитаи GitOps, ки бо ҳама гуна системаи CI/CD ҳамгиро мешавад ва идоракунии тамоми давраи ҳаёти барномаро таъмин мекунад, ки имкон медиҳад:

  • ҷамъоварӣ ва нашр кардани тасвирҳо,
  • ҷойгиркунии барномаҳо дар Kubernetes,
  • бо истифода аз сиёсати махсус тасвирҳои истифоданашударо нест кунед.


Фалсафаи лоиҳа ҷамъ овардани абзорҳои сатҳи паст дар як системаи ягона мебошад, ки ба муҳандисони DevOps аз болои барномаҳо назорат мекунад. Агар имконпазир бошад, утилитаҳои мавҷуда (ба монанди Helm ва Docker) бояд истифода шаванд. Агар ягон мушкилие ҳал нашавад, мо метавонем ҳама чизро барои ин зарур созем ва дастгирӣ кунем.

Замина: коллектори тасвирҳои шахсии шумо

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

Ҳангоми сохтани асбоб барои сохтани барномаҳо дар тасвирҳои Docker, мо зуд фаҳмидем, ки Dockerfile барои мо барои баъзе вазифаҳои хеле мушаххас мувофиқ нест:

  1. Зарурати сохтани веб-барномаҳои хурди маъмулӣ тибқи нақшаи стандартии зерин:
    • вобастагии замимавии системаро насб кунед,
    • як бастаи китобхонаҳои вобастагии барномаҳоро насб кунед,
    • ҷамъ кардани дороиҳо,
    • ва муҳимтар аз ҳама, рамзро дар тасвир зуд ва самаранок нав кунед.
  2. Вақте ки тағирот ба файлҳои лоиҳа ворид карда мешавад, созанда бояд бо истифода аз патч ба файлҳои тағирёфта зуд қабати нав эҷод кунад.
  3. Агар баъзе файлҳо тағир ёфта бошанд, пас марҳилаи вобастаи мувофиқро барқарор кардан лозим аст.

Имруз коллектори мо им-кониятхои зиёде дорад, вале инхо хохиш ва даъ-ватхои ибтидой буданд.

Умуман, мо ду бор фикр накарда, худро бо забони барномасозӣ, ки истифода мебарем, мусаллаҳ кардем (нигаред ба поён) ва рохи амалй гардонд DSL-и худ! Мутобиқи ҳадафҳо пешбинӣ шуда буд, ки раванди васлкунӣ дар марҳилаҳо тавсиф карда шавад ва вобастагии ин марҳилаҳо аз файлҳо муайян карда шавад. Ва онро пурра кард коллектори худ, ки DSL-ро ба ҳадафи ниҳоӣ табдил дод - тасвири ҷамъшуда. Дар аввал DSL дар Ruby буд, аммо ҳамчун гузариш ба Голанг — конфигуратсияи коллектори мо дар файли YAML тасвир карда шуд.

Шумо ҳоло метавонед тасвирҳои Docker-ро дар werf бо истифода аз Dockerfile муқаррарӣ созед
Танзимоти кӯҳна барои dapp дар Ruby

Шумо ҳоло метавонед тасвирҳои Docker-ро дар werf бо истифода аз Dockerfile муқаррарӣ созед
Танзимоти ҷорӣ барои werf дар YAML

Механизми коллектор низ бо мурури замон тагьир ёфт. Дар аввал, мо танҳо аз конфигуратсияи худ як файли муваққатии Dockerfile тавлид кардем ва сипас мо ба иҷро кардани дастурҳои васлкунӣ дар контейнерҳои муваққатӣ ва ӯҳдадорӣ шурӯъ кардем.

NB: Дар айни замон коллектори мо, ки бо конфигуратсияи худ (дар YAML) кор мекунад ва коллектори Stapel номида мешавад, аллакай ба як асбоби хеле пурқувват табдил ёфтааст. Тавсифи муфассали он сазовори мақолаҳои алоҳида аст ва тафсилоти асосиро метавон дар инҷо пайдо кард хуччатхо.

Огоҳӣ аз мушкилот

Вале мо на дархол фахмидем, ки ба як хато рох додаем: кобилиятро илова накардаем сохтани тасвирҳо тавассути Dockerfile стандартӣ ва онҳоро ба як инфрасохтори идоракунии барномаҳо (яъне ҷамъ кардани тасвирҳо, ҷойгиркунӣ ва тоза кардани онҳо) муттаҳид кунед. Чӣ гуна метавонист асбоберо барои ҷойгиркунӣ дар Kubernetes созад ва дастгирии Dockerfile-ро татбиқ накунад, яъне. Усули стандартии тавсифи тасвирҳо барои аксари лоиҳаҳо? ..

Ба ҷои ҷавоб додан ба ин савол, мо роҳи ҳалли онро пешниҳод мекунем. Чӣ мешавад, агар шумо аллакай Dockerfile (ё маҷмӯи Dockerfiles) дошта бошед ва хоҳед, ки werf-ро истифода баред?

NB: Дар омади гап, чаро шумо ҳатто мехоҳед werf-ро истифода баред? Хусусиятҳои асосии инҳоянд:

  • давраи пурраи идоракунии барнома, аз ҷумла тозакунии тасвир;
  • қобилияти идора кардани маҷмӯи якчанд тасвирҳо дар як вақт аз як конфигуратсия;
  • Раванди такмилёфтаи ҷойгиркунӣ барои диаграммаҳои ба Helm мувофиқ.

Рӯйхати пурраи онҳоро метавон дар ин ҷо пайдо кард саҳифаи лоиҳа.

Ҳамин тавр, агар пештар мо пешниҳод мекардем, ки Dockerfile-ро дар конфигуратсияи худ дубора нависем, ҳоло мо бо камоли майл мегӯем: "Бигзор werf Dockerfile-и худро созад!"

Чӣ тавр истифода бурдани?

Татбиқи пурраи ин хусусият дар нашрия пайдо шуд werf v1.0.3-beta.1. Принсипи умумӣ оддӣ аст: корбар роҳро ба Dockerfile мавҷуда дар конфигуратсияи werf муайян мекунад ва сипас фармонро иҷро мекунад. werf build... ва ин аст - werf тасвирро ҷамъ мекунад. Биёед як мисоли абстрактиро дида бароем.

Биёед навбатиро эълон кунем Dockerfile дар решаи лоиҳа:

FROM ubuntu:18.04
RUN echo Building ...

Ва мо эълон мекунем werf.yamlки инро истифода мебарад Dockerfile:

configVersion: 1
project: dockerfile-example
---
image: ~
dockerfile: ./Dockerfile

Ҳама! Чап давидан werf build:

Шумо ҳоло метавонед тасвирҳои Docker-ро дар werf бо истифода аз Dockerfile муқаррарӣ созед

Илова бар ин, шумо метавонед зеринро эълон кунед werf.yaml барои сохтани якчанд тасвирҳо аз Dockerfiles дар як вақт:

configVersion: 1
project: dockerfile-example
---
image: backend
dockerfile: ./dockerfiles/Dockerfile-backend
---
image: frontend
dockerfile: ./dockerfiles/Dockerfile-frontend

Дар ниҳоят, он инчунин интиқоли параметрҳои иловагии сохтмонро дастгирӣ мекунад, ба монанди --build-arg и --add-host - тавассути конфигуратсияи werf. Тавсифи пурраи конфигуратсияи тасвири Dockerfile дар ин ҷо дастрас аст саҳифаи ҳуҷҷатгузорӣ.

Чӣ тавр он кор мекунад?

Дар ҷараёни сохтан, кэши стандартии қабатҳои маҳаллӣ дар Docker кор мекунад. Аммо, чизи муҳим он аст, ки werf низ конфигуратсияи Dockerfile -ро ба инфрасохтори худ муттаҳид мекунад. Ин чӣ маъно дорад?

  1. Ҳар як тасвири аз Dockerfile сохташуда аз як марҳила иборат аст dockerfile (шумо метавонед бештар дар бораи кадом марҳилаҳо дар werf хонед дар ин ҷо).
  2. Барои сахна dockerfile werf имзоеро ҳисоб мекунад, ки аз мундариҷаи конфигуратсияи Dockerfile вобаста аст. Вақте ки конфигуратсияи Dockerfile тағир меёбад, имзои марҳила тағир меёбад dockerfile ва werf барқарорсозии ин марҳиларо бо конфигуратсияи нави Dockerfile оғоз мекунад. Агар имзо тағир наёбад, werf тасвирро аз кэш мегирад (тафсилоти бештар дар бораи истифодаи имзоҳо дар werf дар ин гузориш).
  3. Баъдан, тасвирҳои ҷамъшударо бо фармон нашр кардан мумкин аст werf publishwerf build-and-publish) ва онро барои ҷойгиркунӣ дар Kubernetes истифода баред. Тасвирҳои нашршуда дар Реестри Docker бо истифода аз абзорҳои стандартии тозакунии werf тоза карда мешаванд, яъне. Тасвирҳои кӯҳна (аз N рӯз калонтар), тасвирҳои марбут ба шохаҳои мавҷуд набудани Git ва дигар сиёсатҳо ба таври худкор тоза карда мешаванд.

Тафсилоти бештарро дар бораи нуктаҳои дар ин ҷо тавсифшуда дар ҳуҷҷатҳо пайдо кардан мумкин аст:

Эзоҳҳо ва чораҳои эҳтиётӣ

1. URL-и беруна дар ADD дастгирӣ намешавад

Дар айни замон истифодаи URL-и беруна дар дастур дастгирӣ карда намешавад ADD. Вақте ки манбаъ дар URL-и муқарраршуда тағир меёбад, Werf бозсозӣ оғоз намекунад. Мо нақша дорем, ки ин хусусиятро ба зудӣ илова кунем.

2. Шумо наметавонед .git -ро ба тасвир илова кунед

Умуман, илова кардани директория .git дар тасвир - як амалияи бади бад ва дар ин ҷост, ки чаро:

  1. агар .git дар симои охирин мемонад, ин принципхоро вайрон мекунад Барномаи 12 омил: Азбаски тасвири ниҳоӣ бояд ба як ӯҳдадорӣ пайваст карда шавад, он набояд имконпазир бошад git checkout худсарона содир кардан.
  2. .git андозаи тасвирро зиёд мекунад (анбор метавонад калон бошад, зеро як маротиба ба он файлҳои калон илова карда шуда, сипас нест карда шудаанд). Андозаи дарахти корӣ, ки танҳо бо ӯҳдадории мушаххас алоқаманд аст, аз таърихи амалиёт дар Git вобаста нест. Дар ин ҳолат, илова ва хориҷ кардани минбаъда .git аз тасвири ниҳоӣ кор намекунад: тасвир то ҳол қабати иловагӣ ба даст меорад - ҳамин тавр Docker кор мекунад.
  3. Докер метавонад бозсозии нолозимро оғоз кунад, ҳатто агар як ӯҳдадорӣ сохта шуда бошад ҳам, аммо аз дарахтони гуногуни корӣ. Масалан, GitLab дар феҳристҳои алоҳидаи клононидашуда эҷод мекунад /home/gitlab-runner/builds/HASH/[0-N]/yourproject вақте ки васлкунии параллелӣ фаъол аст. Дар reassembly иловагӣ хоҳад сабаби он, ки директория .git дар версияҳои гуногуни клоншудаи ҳамон як анбор гуногун аст, ҳатто агар ҳамон як супориш сохта шуда бошад.

Нуқтаи охирин инчунин ҳангоми истифодаи werf оқибатҳо дорад. Werf талаб мекунад, ки кэши сохташуда ҳангоми иҷрои баъзе фармонҳо мавҷуд бошад (масалан. werf deploy). Вақте ки ин фармонҳо иҷро мешаванд, werf имзоҳои марҳиларо барои тасвирҳои дар зер нишондодашуда ҳисоб мекунад werf.yaml, ва онҳо бояд дар кэши васлшавӣ бошанд - вагарна фармон корашро идома дода наметавонад. Агар имзои сахна аз мазмун вобаста бошад .git, он гоҳ мо кэш мегирем, ки барои тағирот дар файлҳои номатлуб ноустувор аст ва werf ин гуна назоратро бахшида наметавонад (барои тафсилоти бештар нигаред. хуччатхо).

Дар маҷмӯъ илова кардани танҳо баъзе файлҳои зарурӣ тавассути дастурҳо ADD дар хар сурат самара ва эътимоднокии навиштачотро зиёд мекунад Dockerfile, ва инчунин устувории кэши барои ин ҷамъовардашударо беҳтар мекунад Dockerfile, ба тағйироти номатлуб дар Git.

Натиҷа

Роҳи аввалини мо барои навиштани бинокори худ барои эҳтиёҷоти мушаххас душвор, ростқавл ва содда буд: ба ҷои истифодаи асобачаҳо дар болои Dockerfile стандартӣ, мо ҳалли худро бо синтаксиси фармоишӣ навиштем. Ва ин бартариҳои худро дошт: коллектори Stapel аз ӯҳдаи вазифаи худ комилан мебарояд.

Аммо, дар ҷараёни навиштани бинокори худ, мо дастгирии Dockerfiles-и мавҷударо аз даст додем. Ин камбудӣ ҳоло ислоҳ шудааст ва дар оянда мо нақша дорем, ки дастгирии Dockerfile-ро дар якҷоягӣ бо созандаи фармоишии Stapel-и худ барои сохтмонҳои тақсимшуда ва сохтмонҳо бо истифода аз Kubernetes таҳия кунем (яъне дар давандагони дохили Кубернетес, тавре ки дар канико сохта шудааст).

Ҳамин тавр, агар шумо ногаҳон якчанд Dockerfiles дар атроф хобида бошед ... кӯшиш кунед верф!

PS Рӯйхати ҳуҷҷатҳо оид ба мавзӯъ

Инчунин дар блоги мо хонед: "werf - воситаи мо барои CI / CD дар Kubernetes (шарҳ ва гузориши видео)".

Манбаъ: will.com

Илова Эзоҳ