Hoʻomaʻamaʻa hoʻomau me Docker (nānā a me ke wikiō)

E hoʻomaka mākou i kā mākou blog me nā puke e pili ana i nā haʻiʻōlelo hou loa o kā mākou luna loea distol (Dmitry Stolyarov). Ua hana ʻia lākou āpau ma 2016 i nā hanana ʻoihana like ʻole a ua hoʻolaʻa ʻia i ke kumuhana o DevOps a me Docker. Hoʻokahi wikiō mai ka hui Docker Moscow ma ke keʻena Badoo, ua loaʻa iā mākou paʻi ʻia Online. E hui pū ʻia nā mea hou me nā ʻatikala e hōʻike ana i ke ʻano o nā hōʻike. No laila…

Mei 31 ma ka ʻaha kūkā RootConf 2016, i mālamaʻia ma keʻano he māhele o kaʻahaʻaina "Russian Internet Technologies" (RIT ++ 2016), ua weheʻia ka māhele "Continuous Deployment and Deployment" me ka hōʻike "Best Practices of Continuous Delivery with Docker". Ua hōʻuluʻulu a hoʻonohonoho i nā hana maikaʻi loa no ke kūkulu ʻana i kahi kaʻina hana hoʻomau (CD) me ka hoʻohana ʻana iā Docker a me nā huahana Open Source ʻē aʻe. Hana mākou me kēia mau hoʻonā i ka hana ʻana, e hiki ai iā mākou ke hilinaʻi i ka ʻike hana.

Hoʻomaʻamaʻa hoʻomau me Docker (nānā a me ke wikiō)

Inā loaʻa iā ʻoe ka manawa e hoʻolimalima i hoʻokahi hola wikiō o ka hōʻike, paipai mākou e nānā piha. A i ʻole, aia ma lalo ka hōʻuluʻulu nui ma ke ʻano kikokikona.

Hoʻouna mau me Docker

I lalo Lawe mau Hoʻomaopopo mākou i ke kaulahao o nā hanana e like me ka hopena o ke code noi mai ka waihona Git i hele mua i ka hana, a laila hoʻopau i ka waihona. Penei kona ano: Git → Hana → Hoʻāʻo → Hoʻokuʻu → Hana.

Hoʻomaʻamaʻa hoʻomau me Docker (nānā a me ke wikiō)
ʻO ka hapa nui o ka hōʻike i hoʻolaʻa ʻia i ke kahua kūkulu (kahi noiʻi noiʻi), a ʻo nā kumuhana i hoʻokuʻu ʻia a hoʻohana ʻia i hoʻopaʻa pōkole ʻia. E kamaʻilio mākou e pili ana i nā pilikia a me nā mamana e hiki ai iā ʻoe ke hoʻoponopono iā lākou, a ʻokoʻa paha nā hoʻokō kikoʻī o kēia mau hiʻohiʻona.

No ke aha e pono ai ʻo Docker ma aneʻi? ʻAʻole no ka mea ʻole mākou i hoʻoholo ai e kamaʻilio e pili ana i nā hana Hoʻomau Hoʻomau i ka pōʻaiapili o kēia hāmeʻa Open Source. ʻOiai ua hoʻolaʻa ʻia ka hōʻike holoʻokoʻa i kāna hoʻohana ʻana, ua hōʻike ʻia nā kumu he nui i ka wā e noʻonoʻo ai i ke kumu nui o ka hoʻohana ʻana i nā code code rollout.

ʻO ke kumu hoʻolaha nui

No laila, i ka wā e ʻōwili ai mākou i nā mana hou o ka noi, ʻoiaʻiʻo mākou e alo pilikia downtime, i hana ʻia i ka wā e hoʻololi ai i ke kikowaena hana. ʻAʻole hiki ke hoʻololi koke ka huakaʻi mai ka mana kahiko o ka noi i ka mea hou: ʻo ka mua pono mākou e hōʻoia ʻaʻole i hoʻoiho maikaʻi ʻia ka mana hou, akā "hoʻomaʻamaʻa ʻia" (ʻo ia hoʻi, mākaukau piha e lawelawe i nā noi).

Hoʻomaʻamaʻa hoʻomau me Docker (nānā a me ke wikiō)
No laila, no kekahi manawa e hana like nā mana ʻelua o ka noi (kahiko a me ka mea hou). Ka mea e alakai aunoa i kaʻana like waiwai: pūnaewele, waihona pūnaewele, IPC, etc. Me Docker, hoʻoponopono maʻalahi kēia pilikia ma ka holo ʻana i nā ʻano like ʻole o ka noi i loko o nā pahu ʻokoʻa, kahi e hōʻoiaʻiʻo ʻia ai ka hoʻokaʻawale waiwai i loko o ka host like (server/mīkini virtual). ʻOiaʻiʻo, hiki iā ʻoe ke loaʻa me kekahi mau hoʻopunipuni me ka ʻole o ka insulation, akā inā aia kahi mea hana i mākaukau a maʻalahi, a laila aia ke kumu ʻē aʻe - ʻaʻole e haʻalele.

Hāʻawi ka Containerization i nā pono ʻē aʻe he nui ke kau ʻia. Pili kekahi noi ʻano kikoʻī (a i ʻole ka laulā mana) unuhi ʻōlelo, ka loaʻa ʻana o nā modules/extensions, etc., a me kā lākou mau mana. A pili kēia ʻaʻole wale i ke kaiapuni hiki ke hoʻokō koke ʻia, akā i ke kaiapuni holoʻokoʻa pū kekahi polokalamu ʻōnaehana a me kona mana (a hiki i ka mahele Linux i hoʻohana ʻia). Ma muli o ka loaʻa ʻana o nā ipu ʻaʻole wale ke code noi, akā pū kekahi ʻōnaehana pre-installed a me nā polokalamu noi o nā mana i koi ʻia, hiki iā ʻoe ke poina e pili ana i nā pilikia me nā hilinaʻi.

E hōʻuluʻulu kākou kumu hoʻopuka puka nui nā mana hou e noʻonoʻo ana i nā kumu:

  1. I ka wā mua, holo ka mana kahiko o ka noi i ka pahu mua.
  2. Hoʻopili ʻia ka mana hou a "hoʻomaʻamaʻa" i loko o kahi pahu lua. He mea pono ia e lawe i kēia mana hou iho ʻaʻole wale i ka helu noi noi hou, akā kekahi o kāna mau hilinaʻi, a me nā ʻōnaehana ʻōnaehana (no ka laʻana, kahi mana hou o OpenSSL a i ʻole ka hāʻawi holoʻokoʻa).
  3. Ke mākaukau piha ka mana hou no ka lawelawe ʻana i nā noi, hoʻololi ke kaʻa mai ka pahu mua a i ka pahu lua.
  4. Hiki ke hooki i ka mana kahiko.

ʻO kēia ala o ka lawe ʻana i nā ʻano like ʻole o ka noi i nā pahu ʻokoʻa e hāʻawi i kahi ʻoluʻolu - hoʻihoʻi wikiwiki i ka mana kahiko (ma hope o nā mea a pau, ua lawa ia e hoʻololi i ke kaʻa i ka pahu makemake).

Hoʻomaʻamaʻa hoʻomau me Docker (nānā a me ke wikiō)
ʻO ka ʻōlelo aʻoaʻo hope loa e like me kahi mea i hiki ʻole i ke Kāpena ke ʻimi hewa: "[i ka hoʻonohonoho ʻana i ka hoʻouna mau me Docker] E hoʻohana i ka Docker [a hoʻomaopopo i kāna mea e hāʻawi ai]" E hoʻomanaʻo, ʻaʻole kēia he pōkā kālā e hoʻoponopono i kēlā me kēia pilikia, akā he mea hana e hāʻawi ai i kahi kumu kupanaha.

Hoʻopuka hou

ʻO ka "reproducibility" ke ʻōlelo nei mākou i kahi pūʻulu laulā o nā pilikia i loaʻa i ka wā e hana ana i nā noi. Ke kamaʻilio nei mākou no ia mau hihia:

  • Pono e hoʻopuka pololei ʻia nā palapala i nānā ʻia e ka ʻoihana maikaʻi no ka hana ʻana.
  • Hoʻopuka ʻia nā noi ma nā kikowaena e hiki ke loaʻa i nā pūʻolo mai nā aniani waihona ʻokoʻa (i ka wā e hoʻonui ʻia lākou, a me lākou nā mana o nā noi i hoʻonohonoho ʻia).
  • "Hana nā mea a pau iaʻu ma ka ʻāina!" (...ʻaʻole ʻae ʻia nā mea hoʻomohala e hana.)
  • Pono ʻoe e nānā i kekahi mea ma ka mana kahiko (archived).
  • ...

ʻO kā lākou kumu nui e hoʻoheheʻe ʻia i ka ʻoiaʻiʻo e pono ka hoʻokō piha ʻana i nā kaiapuni i hoʻohana ʻia (a me ka nele o ke kumu kanaka). Pehea mākou e hōʻoiaʻiʻo ai i ka reproducibility? Hana i nā kiʻi Docker e pili ana i ke code mai Git, a laila e hoʻohana iā lākou no kekahi hana: ma nā kahua hoʻāʻo, i ka hana ʻana, ma nā mīkini kūloko o nā polokalamu polokalamu ... I ka manawa like, pono e hōʻemi i nā hana i hana ʻia. mahope ka hui ʻana i ke kiʻi: ʻoi aku ka maʻalahi, ʻoi aku ka liʻiliʻi o nā hewa.

He code ka hale hana

Inā ʻaʻole i hoʻokumu ʻia a "polokalamu ʻia nā pono o ka ʻōnaehana (loaʻa o nā polokalamu kikowaena, kāna ʻano, a me nā mea ʻē aʻe)," a laila hiki i ka ʻōwili ʻia ʻana o kekahi hoʻopiʻi noi ke hopena i nā hopena pōʻino. No ka laʻana, i ka hoʻonohonoho ʻana ua hoʻololi ʻoe i ka PHP 7.0 a kākau hou i ke code e like me ia - a laila ʻo kona ʻike ʻana i ka hana ʻana me kekahi PHP kahiko (5.5) e kāhāhā paha kekahi. ʻAʻole paha ʻoe e poina e pili ana i kahi hoʻololi nui i ka unuhi unuhi, akā "ʻo ka diabolo i loko o nā kikoʻī": ʻo ka pīhoihoi paha i kahi hōʻano liʻiliʻi o kekahi hilinaʻi.

Ua ʻike ʻia kahi ala e hoʻoponopono ai i kēia pilikia IaC (Infrastructure as Code, "infrastructure as code") a e pili ana i ka mālama ʻana i nā pono hana me ke code noi. Ke hoʻohana nei iā ia, hiki i nā mea hoʻomohala a me nā loea DevOps ke hana me ka waihona noi Git like, akā ma nā ʻāpana like ʻole. Mai kēia code, ua hana ʻia kahi kiʻi Docker ma Git, kahi i kau ʻia ai ka noi e noʻonoʻo i nā kikoʻī āpau o ka ʻōnaehana. ʻO ka ʻōlelo maʻalahi, pono nā palapala (rula) no ka hui ʻana i nā kiʻi i loko o ka waihona like me ke kumu kumu a hoʻohui pū ʻia.

Hoʻomaʻamaʻa hoʻomau me Docker (nānā a me ke wikiō)

I ka hihia o kahi hoʻolālā noiʻi multi-layer - no ka laʻana, aia ka nginx, e kū nei i mua o kahi noi e holo nei i loko o kahi pahu Docker - Pono e hana ʻia nā kiʻi Docker mai ke code ma Git no kēlā me kēia papa. A laila e loaʻa i ke kiʻi mua kahi noi me ka unuhi ʻōlelo a me nā mea hilinaʻi "kokoke", a ʻo ka kiʻi ʻelua e loaʻa i ka upstream nginx.

Nā kiʻi Docker, kamaʻilio me Git

Hoʻokaʻawale mākou i nā kiʻi Docker āpau i hōʻiliʻili ʻia mai Git i ʻelua mau ʻāpana: no ka manawa pōkole a hoʻokuʻu. Nā kiʻi manawa i kau ʻia e ka inoa o ka lālā ma Git, hiki ke hoʻopaʻa ʻia e ka hana aʻe a ʻōwili ʻia no ka ʻike (ʻaʻole no ka hana). ʻO kēia kā lākou ʻokoʻa koʻikoʻi mai nā mea hoʻokuʻu: ʻaʻole ʻoe i ʻike i ka hana kikoʻī i loko o lākou.

He mea maʻalahi ke hōʻiliʻili i nā kiʻi pōkole: ka lālā kumu (hiki iā ʻoe ke ʻōwili i waho i kahi pūnaewele ʻokoʻa e ʻike mau i ka mana o kēia manawa o ka haku), nā lālā me nā hoʻokuʻu, nā lālā o nā mea hou.

Hoʻomaʻamaʻa hoʻomau me Docker (nānā a me ke wikiō)
Ma hope o ka ʻike mua ʻana o nā kiʻi pōkole i ka pono no ka unuhi ʻana i ka hana, ua kau nā mea hoʻomohala i kahi hōʻailona. ʻOhi ʻakomi ʻia e ka hōʻailona hoʻokuʻu kiʻi (ʻo kāna tag e pili ana i ka tag mai Git) a ua ʻōwili ʻia i waho i ke kahua. Inā hōʻoia maikaʻi ʻia e ka ʻoihana maikaʻi, hele ia i ka hana.

dappd

ʻO nā mea a pau i wehewehe ʻia (rollout, hui kiʻi, mālama ma hope) hiki ke hoʻokō kūʻokoʻa me ka hoʻohana ʻana i nā palapala Bash a me nā mea hana "improvised". Akā inā ʻoe e hana i kēia, a laila ma kekahi manawa e alakaʻi ka hoʻokō i ka paʻakikī nui a me ka hoʻokele maikaʻi ʻole. Ma ka hoʻomaopopo ʻana i kēia, ua hele mai mākou e hana i kā mākou pono Workflow kūikawā no ke kūkulu ʻana iā CI/CD - dappd.

Ua kākau ʻia kāna code kumu ma Ruby, open source a paʻi ʻia ma GitHub. ʻO ka mea pōʻino, ʻo ka palapala i kēia manawa ka nāwaliwali loa o ka mea hana, akā ke hana nei mākou. A e kākau mākou a kamaʻilio e pili ana i ka dapp ma mua o hoʻokahi manawa, no ka mea... ʻAʻole hiki iā mākou ke kali ʻoluʻolu e kaʻana like i kona hiki me ke kaiāulu hoihoi āpau, akā i kēia manawa, e hoʻouna i kāu mau pilikia a huki i nā noi a/a i ʻole e hahai i ka hoʻomohala ʻana o ka papahana ma GitHub.

Hoʻouka hou ʻia i ʻAukake 13, 2019: i kēia manawa he papahana dappd kapa hou ia werf, ua kākau hou ʻia kāna code ma Go, a ua hoʻomaikaʻi nui ʻia kāna palapala.

Kubernetes

ʻO kekahi mea hana Open Source i mākaukau mua i loaʻa i ka ʻike nui i ka ʻoihana ʻoihana Kubernetes, he hui hoʻokele Docker. ʻO ke kumuhana o kona hoʻohana ʻana i ka hana ʻana o nā papahana i kūkulu ʻia ma Docker ma waho o ke kiko o ka hōʻike, no laila ua kaupalena ʻia ka hōʻike ʻana i kahi ʻike o kekahi mau hiʻohiʻona hoihoi.

No ka hoʻolaha ʻana, hāʻawi ʻo Kubernetes:

  • mākaukau mākaukau - nānā i ka mākaukau o kahi mana hou o ka noi (e hoʻololi i ke kaʻa iā ia);
  • hōʻano hou - hōʻano hou kiʻi i loko o kahi pūʻulu o nā ipu (pani, hoʻohou, hoʻomākaukau no ka hoʻomaka ʻana, hoʻololi kaʻa);
  • hōʻano hou - hoʻonui i kahi kiʻi i loko o kahi hui me kahi ala ʻē aʻe: mua ma ka hapalua o nā pahu, a laila ma ke koena;
  • ka hoʻokuʻu ʻana i ka canary - hoʻokuʻu i kahi kiʻi hou ma kahi helu palena (liʻiliʻi) o nā ipu e nānā i nā anomalies.

No ka mea ʻaʻole ʻo Continuous Delivery ka hoʻokuʻu ʻana i kahi mana hou, he nui nā mana o Kubernetes no ka mālama ʻana i nā ʻōnaehana ma hope: ka nānā ʻana a me ka hoʻopaʻa inoa ʻana no nā ipu āpau, ka scaling maʻalahi, etc. Ke hana nei kēia mau mea a ke kali wale nei no ka pono hoʻokō i kāu mau hana.

Manaʻo hope

  1. E hoʻohana i ka Docker.
  2. E hana i nā kiʻi Docker o nā noi no kāu mau pono āpau.
  3. E hahai i ke kumu "Infrastructure is code."
  4. Hoʻopili iā Git iā Docker.
  5. Hoʻoponopono i ke ʻano o ka hoʻopuka ʻana.
  6. E hoʻohana i kahi kahua i hoʻomākaukau ʻia (Kubernetes a i ʻole kekahi).

Nā wikiō a me nā paheʻe

Video mai ka hana (ma kahi o hoʻokahi hola) paʻi ʻia ma YouTube (hoʻomaka ka hōʻike mai ka minuke 5 - e hahai i ka loulou e pāʻani mai kēia manawa).

Hōʻike i ka hōʻike:

PS

Nā hōʻike ʻē aʻe e pili ana i ke kumuhana ma kā mākou blog:

Source: www.habr.com

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