Hiki iā ʻoe ke kūkulu i nā kiʻi Docker i werf me ka hoʻohana ʻana i kahi Dockerfile maʻamau

ʻOi aku ka lohi ma mua o ka ʻole. A i ʻole pehea mākou i hana hewa nui ma ka loaʻa ʻole o ke kākoʻo no nā Dockerfiles maʻamau e kūkulu i nā kiʻi noi.

Hiki iā ʻoe ke kūkulu i nā kiʻi Docker i werf me ka hoʻohana ʻana i kahi Dockerfile maʻamau

E kamaʻilio mākou e pili ana werf — ʻO ka pono GitOps e hoʻohui pū me kekahi ʻōnaehana CI/CD a hāʻawi i ka hoʻokele o ke ola holoʻokoʻa holoʻokoʻa, e ʻae ana:

  • hōʻiliʻili a hoʻolaha i nā kiʻi,
  • kau i nā noi ma Kubernetes,
  • holoi i nā kiʻi i hoʻohana ʻole ʻia me ka hoʻohana ʻana i nā kulekele kūikawā.


ʻO ka manaʻo o ka papahana e hōʻiliʻili i nā mea hana haʻahaʻa i loko o kahi ʻōnaehana hui hoʻokahi e hāʻawi i nā ʻenekini DevOps ka mana ma luna o nā noi. Inā hiki, pono e hoʻohana i nā pono hana (e like me Helm a me Docker). Inā ʻaʻohe hopena i kahi pilikia, hiki iā mākou ke hana a kākoʻo i nā mea āpau e pono ai no kēia.

Ka hope: kāu ʻohi kiʻi ponoʻī

ʻO kēia ka mea i hana ʻia me ka ʻohi kiʻi ma werf: ʻaʻole lawa ka Dockerfile maʻamau iā mākou. Inā ʻoe e nānā wikiwiki i ka mōʻaukala o ka papahana, ua ʻike mua ʻia kēia pilikia i nā mana mua o werf (a laila aia nō. ʻike ʻia ʻo dapp).

ʻOiai e hana ana i kahi mea hana no ke kūkulu ʻana i nā noi i nā kiʻi Docker, ua ʻike koke mākou ʻaʻole kūpono ʻo Dockerfile iā mākou no kekahi mau hana kikoʻī:

  1. Pono e kūkulu i nā polokalamu pūnaewele liʻiliʻi maʻamau e like me ka papahana maʻamau aʻe:
    • e hoʻokomo i nā mea hilinaʻi o ka ʻōnaehana holoʻokoʻa,
    • e hoʻouka i kahi pūʻulu o nā hale waihona puke hilinaʻi noiʻi,
    • ʻohi waiwai,
    • a ʻo ka mea nui loa, e hoʻohou i ke code ma ke kiʻi me ka wikiwiki a me ka maikaʻi.
  2. Ke hoʻololi ʻia nā faila papahana, pono e hana koke ka mea hana i kahi papa hou ma ke kau ʻana i kahi pā i nā faila i hoʻololi ʻia.
  3. Inā ua loli kekahi mau faila, a laila pono e kūkulu hou i ka pae hilinaʻi kūpono.

I kēia lā he nui nā mea ʻē aʻe o kā mākou ʻohi, akā ʻo ia nā makemake a me nā koi mua.

Ma keʻano laulā, me ka noʻonoʻo ʻole ʻelua, ua kāhiko mākou iā mākou iho me ka ʻōlelo papahana a mākou i hoʻohana ai (e nānā ma lalo) a ku i ke ala e hoʻokō pono'ī DSL! E like me nā pahuhopu, ua manaʻo ʻia e wehewehe i ke kaʻina hana i nā pae a hoʻoholo i nā hilinaʻi o kēia mau pae ma nā faila. A hoʻokō ʻia ʻohi ʻohi ponoʻī, ka mea i hoʻohuli i ka DSL i ka pahuhopu hope - he kiʻi i hui ʻia. I ka wā mua aia ka DSL ma Ruby, akā e like me hoʻololi i Golang - ua hoʻomaka ka config o kā mākou ʻohi ʻohi e wehewehe i kahi faila YAML.

Hiki iā ʻoe ke kūkulu i nā kiʻi Docker i werf me ka hoʻohana ʻana i kahi Dockerfile maʻamau
Hoʻonohonoho kahiko no dapp ma Ruby

Hiki iā ʻoe ke kūkulu i nā kiʻi Docker i werf me ka hoʻohana ʻana i kahi Dockerfile maʻamau
Hoʻonohonoho i kēia manawa no werf ma YAML

Ua hoʻololi ʻia ke ʻano o ka mea ʻohi i ka manawa. I ka wā mua, ua hana mākou i kahi Dockerfile manawaleʻa ma ka lele ʻana mai kā mākou hoʻonohonoho ʻana, a laila hoʻomaka mākou e holo i nā ʻōlelo aʻoaʻo i loko o nā pahu pōkole a hana.

NB: I kēia manawa, ua hoʻomohala ʻia kā mākou ʻohi, e hana ana me kāna config (ma YAML) a kapa ʻia ʻo Stapel collector, i mea hana ikaika loa. Pono kona wehewehe kikoʻī i nā ʻatikala kaʻawale, a hiki ke loaʻa nā kikoʻī kumu ma palapala.

Ka ʻike o ka pilikia

Akā, ua ʻike mākou, ʻaʻole koke, ua hana hewa mākou: ʻaʻole mākou i hoʻohui i ka hiki kūkulu i nā kiʻi ma o Dockerfile maʻamau a hoʻohui iā lākou i loko o ka ʻōnaehana hoʻokele hoʻokele hoʻokele hoʻokahi hopena (ʻo ia hoʻi, e hōʻiliʻili i nā kiʻi, kau a hoʻomaʻemaʻe iā lākou). Pehea e hiki ai ke hana i kahi mea hana no ka waiho ʻana ma Kubernetes a ʻaʻole hoʻokō i ke kākoʻo Dockerfile, ʻo ia hoʻi. ala maʻamau e wehewehe i nā kiʻi no ka hapa nui o nā papahana?..

Ma kahi o ka pane ʻana i kēia nīnau, hāʻawi mākou i kahi hopena. He aha inā inā loaʻa iā ʻoe kahi Dockerfile (a i ʻole kahi hoʻonohonoho o Dockerfiles) a makemake ʻoe e hoʻohana werf?

NB: Ma ke ala, no ke aha ʻoe e makemake ai e hoʻohana i ka werf? ʻO nā hiʻohiʻona nui e iho i lalo:

  • piha hoʻokele hoʻokele hoʻokele me ka hoʻomaʻemaʻe kiʻi;
  • ka hiki ke hoʻokele i ka hui ʻana o kekahi mau kiʻi i ka manawa hoʻokahi mai hoʻokahi config;
  • Hoʻomaikaʻi ʻia ke kaʻina hana no nā kiʻi paʻi Helm.

Hiki ke loaʻa kahi papa inoa piha o lākou ma ʻaoʻao papahana.

No laila, inā ua hāʻawi mua mākou e kākau hou i ka Dockerfile i kā mākou config, i kēia manawa e ʻōlelo mākou: "E hana mākou i kāu Dockerfiles!"

Pehea e hoʻohana ai?

Ua ʻike ʻia ka hoʻokō piha ʻana o kēia hiʻohiʻona i ka hoʻokuʻu werf v1.0.3-beta.1. He mea maʻalahi ka manaʻo nui: kuhikuhi ka mea hoʻohana i ke ala i kahi Dockerfile i loaʻa i ka werf config, a laila holo i ke kauoha werf build... a ʻo ia - na werf e hōʻuluʻulu i ke kiʻi. E nānā kākou i kekahi laʻana abstract.

E hoʻolaha kākou i ka mea aʻe Dockerfile ma ke kumu o ka papahana:

FROM ubuntu:18.04
RUN echo Building ...

A e hoʻolaha mākou werf.yamlka mea hoʻohana i kēia Dockerfile:

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

ʻO nā mea a pau! Hema holo werf build:

Hiki iā ʻoe ke kūkulu i nā kiʻi Docker i werf me ka hoʻohana ʻana i kahi Dockerfile maʻamau

Eia hou, hiki iā ʻoe ke haʻi aku i kēia werf.yaml e kūkulu i kekahi mau kiʻi mai nā Dockerfiles i ka manawa hoʻokahi:

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

ʻO ka hope, kākoʻo pū ʻo ia i ka hoʻolilo ʻana i nā ʻāpana kūkulu hou, e like me --build-arg и --add-host - ma o werf config. Loaʻa kahi wehewehe piha o ka hoʻonohonoho kiʻi Dockerfile ma palapala palapala.

Pehea ia hana?

I ka wā o ke kaʻina hana, hana ka cache maʻamau o nā papa kūloko i Docker. Eia naʻe, ʻo ka mea nui ka werf pū kekahi hoʻohui i ka hoʻonohonoho Dockerfile i kāna ʻōnaehana. He aha ke ʻano o kēia?

  1. ʻO kēlā me kēia kiʻi i kūkulu ʻia mai kahi Dockerfile i hoʻokahi pae i kapa ʻia dockerfile (hiki iā ʻoe ke heluhelu hou aʻe e pili ana i nā pae i ka werf maanei).
  2. No ke kahua dockerfile Werf e helu i kahi pūlima e pili ana i nā mea o ka hoʻonohonoho Dockerfile. Ke hoʻololi ka hoʻonohonoho Dockerfile, hoʻololi ke kau inoa dockerfile a hoʻomaka ʻo werf i kahi kūkulu hou ʻana i kēia kaʻina me kahi config Dockerfile hou. Inā ʻaʻole e loli ka pūlima, a laila lawe ʻo werf i ke kiʻi mai ka cache (ʻO nā kikoʻī hou aku e pili ana i ka hoʻohana ʻana i nā pūlima ma werf ua wehewehe ʻia ma keia hoike).
  3. A laila, hiki ke paʻi ʻia nā kiʻi i hōʻiliʻili ʻia me ke kauoha werf publish (ai ole werf build-and-publish) a hoʻohana iā ia no ka hoʻolaha ʻana iā Kubernetes. E hoʻomaʻemaʻe ʻia nā kiʻi i paʻi ʻia i ka Docker Registry me ka hoʻohana ʻana i nā mea hoʻomaʻemaʻe werf maʻamau, ʻo ia hoʻi. E hoʻomaʻemaʻe ʻia nā kiʻi kahiko (ʻoi aku ma mua o N mau lā), nā kiʻi pili me nā lālā Git ʻole, a me nā kulekele ʻē aʻe.

Hiki ke loaʻa nā kikoʻī hou aku e pili ana i nā helu i wehewehe ʻia ma ka palapala:

Nā memo a me ka mālama ʻana

1. ʻAʻole kākoʻo ʻia ka URL waho ma ADD

I kēia manawa ʻaʻole kākoʻo ʻia ka hoʻohana ʻana i kahi URL waho ma kahi kuhikuhi ADD. ʻAʻole e hoʻomaka ʻo Werf i kahi hana hou i ka wā e hoʻololi ai ke kumu i ka URL i kuhikuhi ʻia. Hoʻolālā mākou e hoʻohui koke i kēia hiʻohiʻona.

2. ʻAʻole hiki iā ʻoe ke hoʻohui i ka .git i ke kiʻi

ʻO ka mea maʻamau, hoʻohui i kahi papa kuhikuhi .git i ke kiʻi - he hana ʻino ʻino a eia ke kumu:

  1. ina .git noho i ke kiʻi hope loa, ʻaʻole kēia i nā loina 12 kumu app: No ka mea pono e hoʻopili ʻia ke kiʻi hope i hoʻokahi commit, ʻaʻole hiki ke hana git checkout hana kūʻokoʻa.
  2. .git hoʻonui i ka nui o ke kiʻi (hiki ke nui ka waihona ma muli o ka hoʻohui ʻana o nā faila nui iā ia a laila holoi ʻia). ʻAʻole hilinaʻi ka nui o kahi lāʻau hana i pili wale me kahi hana kikoʻī i ka mōʻaukala o nā hana ma Git. I kēia hihia, ka hoʻohui a me ka wehe ʻana ma hope .git mai ke kiʻi hope ʻaʻole e hana: e loaʻa mau ke kiʻi i kahi papa ʻokoʻa - ʻo ia ke ʻano o ka hana ʻana o Docker.
  3. Hiki iā Docker ke hoʻomaka i kahi kūkulu hou ʻole, ʻoiai ke kūkulu ʻia nei ka hana like, akā mai nā lāʻau hana like ʻole. No ka laʻana, hana ʻo GitLab i nā papa kuhikuhi cloned kaʻawale /home/gitlab-runner/builds/HASH/[0-N]/yourproject ke hiki ke hui like. ʻO ka hoʻohui hou ʻana ma muli o ka ʻoiaʻiʻo o ka papa kuhikuhi .git ʻokoʻa i nā ʻano cloned like ʻole o ka waihona hoʻokahi, ʻoiai ke kūkulu ʻia ka hana like.

Loaʻa ka hopena hope loa i ka hoʻohana ʻana i ka werf. Pono ʻo Werf i ka cache i kūkulu ʻia i ka wā e holo ana i kekahi mau kauoha (e.g. werf deploy). Ke holo nei kēia mau kauoha, helu ʻo werf i nā pūlima pae no nā kiʻi i kuhikuhi ʻia ma werf.yaml, a pono lākou i loko o ka cache hui - inā ʻaʻole hiki i ke kauoha ke hoʻomau i ka hana. Inā pili ka pūlima pae i ka ʻike .git, a laila loaʻa iā mākou kahi cache i paʻa ʻole i nā hoʻololi i nā faila pili ʻole, a ʻaʻole hiki iā werf ke kala i kēlā ʻano nānā (no nā kikoʻī hou aku, ʻike. palapala).

Ma ka laulā hoʻohui wale i kekahi mau faila pono ma o na kuhikuhi ADD i kekahi hihia e hoʻonui i ka pono a me ka hilinaʻi o ka mea kākau Dockerfile, a hoʻomaikaʻi pū i ka paʻa o ka cache i hōʻiliʻili ʻia no kēia Dockerfile, i nā hoʻololi pili ʻole ma Git.

ʻO ka hopena

ʻO kā mākou ala mua i ke kākau ʻana i kā mākou mea hana no nā pono kikoʻī he paʻakikī, pololei a pololei: ma kahi o ka hoʻohana ʻana i nā koʻokoʻo ma luna o ka Dockerfile maʻamau, ua kākau mākou i kā mākou hopena me ka syntax maʻamau. A ua loaʻa kēia i kāna mau mea maikaʻi: ua hoʻokō pono ka ʻohi Stapel i kāna hana.

Eia nō naʻe, i ke kaʻina o ke kākau ʻana i kā mākou mea hana ponoʻī, ua nalowale mākou i ke kākoʻo no nā Dockerfiles. Ua hoʻopaʻa ʻia kēia hemahema, a i ka wā e hiki mai ana mākou e hoʻolālā e hoʻomohala i ke kākoʻo Dockerfile me kā mākou mea hana Stapel maʻamau no nā kūkulu māhele ʻia a no ke kūkulu ʻana me nā Kubernetes (ʻo ia hoʻi.

No laila, inā loaʻa koke iā ʻoe kekahi mau Dockerfiles e moe ana a puni ... e hoʻāʻo werf!

PS Papa inoa o nā palapala e pili ana i ke kumuhana

E heluhelu pū i kā mākou blog: "werf - kā mākou mea hana no CI/CD ma Kubernetes (nānā a me ka hōʻike wikiō)".

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka