O le kọ awọn aworan Docker ni werf ni lilo Dockerfile deede

Dara pẹ ju lailai. Tabi bii a ṣe fẹrẹ ṣe aṣiṣe to ṣe pataki nipa ko ni atilẹyin fun awọn Dockerfiles deede lati kọ awọn aworan ohun elo.

O le kọ awọn aworan Docker ni werf ni lilo Dockerfile deede

A yoo soro nipa werf - IwUlO GitOps ti o ṣepọ pẹlu eyikeyi eto CI/CD ati pese iṣakoso ti gbogbo igbesi aye ohun elo, gbigba:

  • gba ati gbejade awọn aworan,
  • gbe awọn ohun elo ni Kubernetes,
  • pa awọn aworan ti ko lo ni lilo awọn eto imulo pataki.


Imọye ti iṣẹ akanṣe ni lati gba awọn irinṣẹ ipele kekere sinu eto iṣọkan kan ti o fun awọn onimọ-ẹrọ DevOps ni iṣakoso lori awọn ohun elo. Ti o ba ṣeeṣe, awọn ohun elo ti o wa tẹlẹ (bii Helm ati Docker) yẹ ki o lo. Ti ko ba si ojutu si iṣoro kan, a le ṣẹda ati atilẹyin ohun gbogbo pataki fun eyi.

Background: ara rẹ image-odè

Eyi ni ohun ti o ṣẹlẹ pẹlu olugba aworan ni werf: Dockerfile deede ko to fun wa. Ti o ba yara wo itan-akọọlẹ ti ise agbese na, iṣoro yii han tẹlẹ ni awọn ẹya akọkọ ti werf (lẹhinna tun mọ bi dapp).

Lakoko ṣiṣẹda ohun elo kan fun kikọ awọn ohun elo sinu awọn aworan Docker, a yara rii pe Dockerfile ko dara fun wa fun diẹ ninu awọn iṣẹ ṣiṣe kan pato:

  1. Iwulo lati kọ awọn ohun elo wẹẹbu kekere aṣoju ni ibamu si ero boṣewa atẹle:
    • fi sori ẹrọ awọn igbẹkẹle ohun elo jakejado eto,
    • fi sori ẹrọ akojọpọ awọn ile-ikawe igbẹkẹle ohun elo,
    • gba ohun-ini,
    • ati ṣe pataki julọ, ṣe imudojuiwọn koodu ni aworan ni kiakia ati daradara.
  2. Nigbati a ba ṣe awọn ayipada si awọn faili iṣẹ akanṣe, olupilẹṣẹ gbọdọ yara ṣẹda Layer tuntun nipa lilo alemo kan si awọn faili ti o yipada.
  3. Ti awọn faili kan ba ti yipada, lẹhinna o jẹ dandan lati tun ipele ti o gbẹkẹle ti o baamu ṣe.

Loni oni-odè wa ni ọpọlọpọ awọn aye miiran, ṣugbọn iwọnyi ni awọn ifẹ ati awọn ifẹ akọkọ.

Ní gbogbogbòò, láìronú lẹ́ẹ̀mejì, a di ìhámọ́ra pẹ̀lú èdè ìṣètò tí a ń lò (wo isalẹ) ati ki o lu ni opopona lati se DSL ti ara! Ni ibamu pẹlu awọn ibi-afẹde, o ti pinnu lati ṣe apejuwe ilana apejọ ni awọn ipele ati pinnu awọn igbẹkẹle ti awọn ipele wọnyi lori awọn faili. Ati pe o ṣe afikun ara-odè, eyi ti o yi DSL pada si ibi-afẹde ikẹhin - aworan ti o pejọ. Ni igba akọkọ ti DSL ni Ruby, sugbon bi iyipada si Golang - atunto ti olugba wa bẹrẹ si ṣe apejuwe ninu faili YAML kan.

O le kọ awọn aworan Docker ni werf ni lilo Dockerfile deede
Atijọ konfigi fun dapp ni Ruby

O le kọ awọn aworan Docker ni werf ni lilo Dockerfile deede
Iṣeto lọwọlọwọ fun werf lori YAML

Ilana ti olugba tun yipada ni akoko pupọ. Ni akọkọ, a rọrun ni ipilẹṣẹ Dockerfile igba diẹ lori fifo lati iṣeto wa, ati lẹhinna a bẹrẹ lati ṣiṣe awọn ilana apejọ ni awọn apoti igba diẹ ati ṣe.

NBNi akoko yii, olugba wa, eyiti o ṣiṣẹ pẹlu atunto tirẹ (ni YAML) ati pe a pe ni Stapel-odè, ti ni idagbasoke tẹlẹ sinu ohun elo to lagbara. Apejuwe alaye rẹ yẹ awọn nkan lọtọ, ati awọn alaye ipilẹ ni a le rii ninu iwe.

Imọye ti iṣoro naa

Ṣugbọn a ṣe akiyesi, kii ṣe lẹsẹkẹsẹ, pe a ti ṣe aṣiṣe kan: a ko ṣafikun agbara naa kọ awọn aworan nipasẹ boṣewa Dockerfile ati ṣepọ wọn sinu awọn amayederun iṣakoso ohun elo ipari-si-opin kanna (ie gba awọn aworan, ran ati sọ di mimọ). Bawo ni o ṣe le ṣe ohun elo kan fun imuṣiṣẹ ni Kubernetes ati pe ko ṣe atilẹyin Dockerfile, i.e. ọna boṣewa lati ṣe apejuwe awọn aworan fun ọpọlọpọ awọn iṣẹ akanṣe? ..

Dipo ti dahun ibeere yi, ti a nse a ojutu. Kini ti o ba ti ni Dockerfile tẹlẹ (tabi ṣeto ti Dockerfiles) ati pe o fẹ lati lo werf?

NB: Nipa ọna, kilode ti iwọ yoo paapaa fẹ lati lo werf? Awọn ẹya akọkọ wa ni isalẹ si atẹle naa:

  • Eto iṣakoso ohun elo ni kikun pẹlu mimọ aworan;
  • agbara lati ṣakoso apejọ ti awọn aworan pupọ ni ẹẹkan lati atunto kan;
  • Ilana imuṣiṣẹ ti ilọsiwaju fun awọn shatti ibaramu Helm.

A diẹ pipe akojọ ti wọn le ri ni ise agbese iwe.

Nitorinaa, ti iṣaaju a yoo ti funni lati tun Dockerfile sinu atunto wa, ni bayi a yoo fi ayọ sọ pe: “Jẹ ki werf kọ awọn faili Docker rẹ!”

Bawo ni lati lo?

Awọn imuse ni kikun ti ẹya ara ẹrọ yi han ninu awọn Tu werf v1.0.3-beta.1. Ilana gbogbogbo jẹ rọrun: olumulo n ṣalaye ọna si Dockerfile ti o wa tẹlẹ ninu atunto werf, ati lẹhinna ṣiṣẹ aṣẹ naa. werf build... ati pe iyẹn - werf yoo pejọ aworan naa. Jẹ ká wo ni ohun áljẹbrà apẹẹrẹ.

Jẹ ki a kede ekeji Dockerfile ninu root ise agbese:

FROM ubuntu:18.04
RUN echo Building ...

Ati pe a yoo kede werf.yamlti o nlo eyi Dockerfile:

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

Gbogbo! Osi ṣiṣe werf build:

O le kọ awọn aworan Docker ni werf ni lilo Dockerfile deede

Ni afikun, o le sọ awọn wọnyi werf.yaml lati kọ ọpọlọpọ awọn aworan lati oriṣiriṣi Dockerfiles ni ẹẹkan:

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

Lakotan, o tun ṣe atilẹyin gbigbe awọn igbelewọn kikọ afikun, bii --build-arg и --add-host - nipasẹ werf konfigi. Apejuwe pipe ti iṣeto aworan Dockerfile wa ni iwe iwe.

Bawo ni o ṣiṣẹ?

Lakoko ilana kikọ, kaṣe boṣewa ti awọn fẹlẹfẹlẹ agbegbe ni awọn iṣẹ Docker. Sibẹsibẹ, ohun ti o jẹ pataki ni wipe werf tun ṣepọ iṣeto Dockerfile sinu awọn amayederun rẹ. Kini eleyi tumọ si?

  1. Aworan kọọkan ti a ṣe lati Dockerfile ni ipele kan ti a pe ni dockerfile (o le ka diẹ sii nipa awọn ipele wo ni werf nibi).
  2. Fun ipele dockerfile werf ṣe iṣiro ibuwọlu kan ti o da lori awọn akoonu ti iṣeto ni Dockerfile. Nigbati iṣeto Dockerfile ba yipada, ibuwọlu ipele naa yipada dockerfile ati werf bẹrẹ atunṣe ipele yii pẹlu atunto Dockerfile tuntun kan. Ti ibuwọlu ko ba yipada, lẹhinna werf gba aworan lati kaṣe (awọn alaye diẹ sii nipa lilo awọn ibuwọlu ni werf ni a ṣe apejuwe ninu iroyin yi).
  3. Nigbamii ti, awọn aworan ti a gba ni a le ṣe atẹjade pẹlu aṣẹ naa werf publish (tabi werf build-and-publish) ati lo fun imuṣiṣẹ si Kubernetes. Awọn aworan ti a tẹjade si iforukọsilẹ Docker yoo di mimọ nipa lilo awọn irinṣẹ afọmọ werf boṣewa, i.e. Awọn aworan atijọ (ti o dagba ju awọn ọjọ N lọ), awọn aworan ti o ni nkan ṣe pẹlu awọn ẹka Git ti ko si, ati awọn eto imulo miiran yoo di mimọ laifọwọyi.

Awọn alaye diẹ sii nipa awọn aaye ti a ṣalaye nibi ni a le rii ninu iwe-ipamọ:

Awọn akọsilẹ ati awọn iṣọra

1. URL ita ko ni atilẹyin ni ADD

Lọwọlọwọ ko ṣe atilẹyin lati lo URL ita ni itọsọna kan ADD. Werf kii yoo ṣe atunko kan nigbati orisun ti URL ti o wa ni pato yipada. A gbero lati ṣafikun ẹya yii laipẹ.

2. O ko le fi .git kun aworan naa

Ni gbogbogbo, fifi itọsọna kan kun .git ninu aworan - iwa buburu buburu ati idi niyi:

  1. ti o ba ti .git si maa wa ni ik image, yi rufin awọn ilana 12 ifosiwewe app: Niwọn bi aworan ikẹhin gbọdọ jẹ asopọ si ifarakan kan, ko yẹ ki o ṣee ṣe lati ṣe git checkout lainidii dá.
  2. .git mu iwọn aworan pọ si (ipamọ le jẹ nla nitori otitọ pe awọn faili nla ni ẹẹkan ṣafikun si rẹ lẹhinna paarẹ). Iwọn igi-iṣẹ ti o ni nkan ṣe pẹlu adehun kan pato kii yoo dale lori itan-akọọlẹ awọn iṣẹ ni Git. Ni idi eyi, awọn afikun ati awọn tetele yiyọ .git lati aworan ikẹhin kii yoo ṣiṣẹ: aworan naa yoo tun gba Layer afikun - eyi ni bii Docker ṣe n ṣiṣẹ.
  3. Docker le pilẹṣẹ atunkọ ti ko wulo, paapaa ti o ba n ṣe adehun kanna, ṣugbọn lati oriṣiriṣi awọn igi iṣẹ. Fun apẹẹrẹ, GitLab ṣẹda awọn ilana ti cloned lọtọ ni /home/gitlab-runner/builds/HASH/[0-N]/yourproject nigbati o jọra ijọ wa ni sise. Awọn afikun atunṣe yoo jẹ nitori otitọ pe liana naa .git ti o yatọ si ni orisirisi awọn cloned awọn ẹya ti kanna ibi ipamọ, paapa ti o ba kanna ifaramo ni itumọ ti.

Ojuami ti o kẹhin tun ni awọn abajade nigba lilo werf. Werf nilo kaṣe ti a ṣe lati wa nigbati o nṣiṣẹ diẹ ninu awọn aṣẹ (fun apẹẹrẹ. werf deploy). Nigbati awọn aṣẹ wọnyi ba ṣiṣẹ, werf ṣe iṣiro awọn ibuwọlu ipele fun awọn aworan ti a pato ninu werf.yaml, ati pe wọn gbọdọ wa ninu kaṣe apejọ - bibẹẹkọ aṣẹ kii yoo ni anfani lati tẹsiwaju ṣiṣẹ. Ti ibuwọlu ipele ba da lori akoonu naa .git, lẹhinna a gba kaṣe ti o jẹ riru si awọn ayipada ninu awọn faili ti ko ṣe pataki, ati werf kii yoo ni anfani lati dariji iru abojuto (fun awọn alaye diẹ sii, wo iwe).

Ni gbogbogbo fifi awọn faili pataki kan kun nikan nipasẹ awọn ilana ADD ni eyikeyi ọran mu ṣiṣe ati igbẹkẹle ti kikọ sii Dockerfile, ati tun mu iduroṣinṣin ti kaṣe ti a gba fun eyi ṣe Dockerfile, si awọn iyipada ti ko ṣe pataki ni Git.

Abajade

Ọna akọkọ wa si kikọ akọle tiwa fun awọn iwulo pato jẹ lile, ooto ati taara: dipo lilo awọn crutches lori oke Dockerfile boṣewa, a kọ ojutu wa pẹlu sintasi aṣa. Ati pe eyi ni awọn anfani rẹ: Olukojọpọ Stapel koju iṣẹ-ṣiṣe rẹ daradara.

Sibẹsibẹ, ninu ilana kikọ akọle tiwa, a padanu oju ti atilẹyin fun awọn faili Dockerfiles ti o wa. Aṣiṣe yii ti ni atunṣe bayi, ati ni ọjọ iwaju a gbero lati ṣe agbekalẹ atilẹyin Dockerfile pẹlu aṣa Stapel Akole wa fun apejọ pinpin ati fun apejọ nipa lilo Kubernetes (ie apejọ lori awọn asare inu Kubernetes, bi a ti ṣe ni kaniko).

Nitorinaa, ti o ba lojiji ni tọkọtaya Dockerfiles ti o dubulẹ ni ayika… gbidanwo werf!

PS Akojọ ti awọn iwe lori koko

Ka tun ninu bulọọgi wa: "werf - irinṣẹ wa fun CI / CD ni Kubernetes (ayẹwo ati ijabọ fidio)».

orisun: www.habr.com

Fi ọrọìwòye kun