Kev coj ua tsis tu ncua nrog Docker (kev tshuaj xyuas thiab yees duab)

Peb yuav pib peb cov blog nrog cov ntawv tshaj tawm raws li cov lus hais tshiab kawg ntawm peb tus thawj coj kev tshaj lij disstol (Dmitry Stolyarov). Txhua tus ntawm lawv tau tshwm sim hauv 2016 ntawm ntau yam kev tshaj lij thiab tau mob siab rau lub ntsiab lus ntawm DevOps thiab Docker. Ib qho yeeb yaj kiab los ntawm Docker Moscow lub rooj sib tham ntawm Badoo chaw ua haujlwm, peb twb muaj lawm luam tawm Online. Cov tshiab yuav tau nrog cov khoom xa tawm cov ntsiab lus ntawm cov ntawv ceeb toom. Yog li ntawd…

Tsib Hlis 31 ntawm lub rooj sib tham RootConf 2016, tuav ua ib feem ntawm lub koob tsheej "Lavxias teb sab Internet Technologies" (RIT ++ 2016), ntu "Nruam Kev xa tawm thiab xa mus" tau qhib nrog daim ntawv tshaj tawm "Kev coj ua zoo tshaj plaws ntawm Kev xa mus tas li nrog Docker". Nws tau sau tseg thiab ua raws li cov kev coj ua zoo tshaj plaws rau kev tsim Cov Txheej Txheem Kev Xa Mus Ntxiv (CD) siv Docker thiab lwm yam khoom siv qhib. Peb ua haujlwm nrog cov kev daws teeb meem no hauv kev tsim khoom, uas tso cai rau peb tso siab rau cov kev paub dhau los.

Kev coj ua tsis tu ncua nrog Docker (kev tshuaj xyuas thiab yees duab)

Yog tias koj muaj sijhawm los siv sijhawm ib teev video ntawm tsab ntawv ceeb toom, peb pom zoo saib nws tag nrho. Txwv tsis pub, hauv qab no yog cov ntsiab lus tseem ceeb hauv daim ntawv sau.

Kev xa khoom txuas ntxiv nrog Docker

Hauv qab Kev Xa Xa Mus Ntxiv peb nkag siab cov saw ntawm cov xwm txheej raws li qhov tshwm sim ntawm cov ntawv thov code los ntawm Git repository ua ntej los rau kev tsim khoom, thiab tom qab ntawd xaus rau hauv cov ntaub ntawv. Nws zoo li no: Git β†’ Tsim β†’ Test β†’ Tso tawm β†’ Ua haujlwm.

Kev coj ua tsis tu ncua nrog Docker (kev tshuaj xyuas thiab yees duab)
Feem ntau ntawm cov ntawv tshaj tawm yog mob siab rau rau theem tsim (kev sib dhos ua ke), thiab cov ntsiab lus tso tawm thiab ua haujlwm yog kov rau luv luv. Peb yuav tham txog cov teeb meem thiab cov qauv uas tso cai rau koj los daws lawv, thiab cov kev siv tshwj xeeb ntawm cov qauv no yuav txawv.

Vim li cas Docker xav tau ntawm no txhua? Nws tsis yog rau tsis muaj dab tsi uas peb tau txiav txim siab los tham txog kev coj ua kev xa khoom mus tas li hauv cov ntsiab lus ntawm qhov cuab yeej Open Source. Txawm hais tias tag nrho cov ntawv tshaj tawm tau mob siab rau nws txoj kev siv, ntau qhov laj thawj tau tshwm sim thaum xav txog cov qauv tseem ceeb ntawm daim ntawv thov code rollout.

Main rollout qauv

Yog li, thaum peb dov tawm tshiab versions ntawm daim ntawv thov, peb yeej ntsib nrog teeb meem downtime, generated thaum switching ntawm cov neeg rau zaub mov ntau lawm. Kev khiav tsheb los ntawm qhov qub version ntawm daim ntawv thov mus rau ib qho tshiab tsis tuaj yeem hloov tam sim ntawd: ua ntej peb yuav tsum xyuas kom meej tias cov ntawv tshiab tsis yog tsuas yog ua tiav rub tawm, tab sis kuj "sov" (piv txwv li, npaj txhij los ua haujlwm thov).

Kev coj ua tsis tu ncua nrog Docker (kev tshuaj xyuas thiab yees duab)
Yog li, rau qee lub sijhawm ob qho tib si ntawm daim ntawv thov (qub thiab tshiab) yuav ua haujlwm ib txhij. Uas tau ua rau sib koom kev sib cav: network, file system, IPC, thiab lwm yam. Nrog Docker, qhov teeb meem no tau yooj yim daws tau los ntawm kev khiav cov ntawv sib txawv ntawm daim ntawv thov hauv cov thawv cais, uas cov peev txheej cais tawm tau lees paub hauv tib lub tswv tsev (server / virtual tshuab). Ntawm chav kawm, koj tuaj yeem tau txais los ntawm qee qhov kev ntxias yam tsis muaj kev rwb thaiv tsev, tab sis yog tias muaj cov cuab yeej ua tiav thiab yooj yim, ces muaj qhov tsis sib xws - tsis txhob tsis quav ntsej nws.

Containerization muab ntau lwm yam txiaj ntsig thaum xa mus. Txhua daim ntawv thov nyob ntawm tshwj xeeb version (los yog version range) tus txhais lus, muaj cov modules/extensions, thiab lwm yam, nrog rau lawv cov versions. Thiab qhov no siv tsis tau tsuas yog rau qhov chaw ua haujlwm tam sim ntawd, tab sis kuj rau tag nrho ib puag ncig, suav nrog system software thiab nws version (txog li Linux faib siv). Vim lub fact tias cov ntim tsis tsuas yog daim ntawv thov code, tab sis kuj pre-installed system thiab daim ntawv thov software ntawm yuav tsum tau versions, koj muaj peev xwm tsis nco qab txog cov teeb meem nrog dependencies.

Cia peb xaus lub ntsiab rollout qauv tshiab versions coj mus rau hauv tus account cov nram qab no yam:

  1. Thaum xub thawj, qhov qub version ntawm daim ntawv thov khiav hauv thawj lub thawv.
  2. Tus tshiab version yog ces dov tawm thiab "sov" nyob rau hauv ib tug thib ob thawv. Nws yog qhov tsim nyog hais tias qhov tshiab version nws tus kheej tuaj yeem nqa tsis tau tsuas yog hloov kho daim ntawv thov code, tab sis kuj muaj ib qho ntawm nws cov kev vam khom, nrog rau cov khoom siv hauv lub cev (piv txwv li, ib qho tshiab ntawm OpenSSL lossis tag nrho cov kev faib tawm).
  3. Thaum tus tshiab version tau npaj txhij los ua kev thov, tsheb hloov pauv ntawm thawj lub thawv mus rau qhov thib ob.
  4. Cov qub version tam sim no raug tso tseg.

Txoj hauv kev no ntawm kev xa cov ntawv sib txawv ntawm daim ntawv thov hauv cov thawv cais muab lwm qhov yooj yim - ceev rollback mus rau qhov qub version (tom qab tag nrho, nws txaus los hloov tsheb mus rau lub thawv xav tau).

Kev coj ua tsis tu ncua nrog Docker (kev tshuaj xyuas thiab yees duab)
Thawj qhov kev pom zoo zaum kawg zoo li qee yam uas txawm tias Tus Thawj Tub Ceev Xwm nrhiav tsis tau qhov txhaum: "[thaum teeb tsa Kev xa khoom txuas ntxiv nrog Docker] Siv Docker [thiab nkag siab tias nws muab dab tsi]" Nco ntsoov, qhov no tsis yog lub mos txwv nyiaj uas yuav daws tau txhua qhov teeb meem, tab sis yog lub cuab yeej uas muab lub hauv paus zoo.

Reproducibility

Los ntawm "reproducibility" peb txhais tau hais tias cov teeb meem dav dav uas tau ntsib thaum ua haujlwm siv. Peb tab tom tham txog cov xwm txheej zoo li no:

  • Cov ntawv txheeb xyuas los ntawm lub tuam tsev ua haujlwm zoo rau kev ua yeeb yam yuav tsum raug muab rov ua dua tshiab hauv kev tsim khoom.
  • Cov ntawv thov raug luam tawm ntawm cov servers uas tuaj yeem tau txais cov pob khoom los ntawm cov iav repository sib txawv (thaum lub sijhawm lawv hloov kho, thiab nrog lawv cov versions ntawm cov ntawv thov tau teeb tsa).
  • "Txhua yam ua haujlwm rau kuv hauv zos!" (...thiab cov neeg tsim khoom tsis raug tso cai rau hauv kev tsim khoom.)
  • Koj yuav tsum tau xyuas ib yam dab tsi hauv qhov qub (archived) version.
  • ...

Lawv cov ntsiab lus dav dav mus rau qhov tseeb tias kev ua raws tag nrho ntawm ib puag ncig siv (nrog rau qhov tsis muaj tib neeg qhov tseem ceeb) yog qhov tsim nyog. Peb tuaj yeem lav qhov kev tsim tawm li cas? Ua cov duab Docker raws li cov cai los ntawm Git, thiab tom qab ntawd siv lawv rau txhua txoj haujlwm: ntawm qhov chaw sim, hauv kev tsim khoom, ntawm cov tshuab hauv zos ntawm cov programmers ... Tib lub sijhawm, nws yog ib qho tseem ceeb kom txo qis cov kev ua uas tau ua. tom qab assembling cov duab: qhov yooj yim nws yog, qhov tsawg yuav muaj qhov yuam kev.

Infrastructure yog code

Yog tias cov kev cai tsim kho vaj tse (muaj cov software server, nws cov version, thiab lwm yam) tsis raug cai thiab "programmed", ces qhov kev nthuav tawm ntawm txhua daim ntawv thov hloov tshiab tuaj yeem ua rau muaj kev puas tsuaj loj. Piv txwv li, hauv staging koj twb tau hloov mus rau PHP 7.0 thiab rov sau cov cai raws li - tom qab ntawd nws cov tsos hauv ntau lawm nrog qee qhov qub PHP (5.5) yuav ua rau ib tus neeg xav tsis thoob. Tej zaum koj yuav tsis hnov ​​​​qab txog qhov kev hloov pauv loj hauv cov neeg txhais lus, tab sis "dab ntxwg nyoog yog nyob rau hauv cov ntsiab lus": qhov xav tsis thoob yuav nyob rau hauv me me hloov tshiab ntawm kev vam khom.

Ib txoj hauv kev los daws qhov teeb meem no yog hu ua IaC (Infrastructure li Code, "infrastructure li code") thiab koom nrog kev khaws cia cov kev xav tau hauv vaj tse nrog rau daim ntawv thov code. Siv nws, cov neeg tsim khoom thiab DevOps cov kws tshaj lij tuaj yeem ua haujlwm nrog tib daim ntawv thov Git repository, tab sis ntawm qhov sib txawv ntawm nws. Los ntawm cov cai no, Docker duab yog tsim nyob rau hauv Git, nyob rau hauv uas daim ntawv thov yog deployed coj mus rau hauv tus account tag nrho cov tshwj xeeb ntawm infrastructure. Yooj yim muab tso, cov ntawv sau (txoj cai) rau kev sib sau cov duab yuav tsum nyob rau hauv tib lub chaw cia khoom nrog rau qhov chaws thiab merged ua ke.

Kev coj ua tsis tu ncua nrog Docker (kev tshuaj xyuas thiab yees duab)

Nyob rau hauv cov ntaub ntawv ntawm ntau txheej daim ntawv thov architecture - piv txwv li, muaj nginx, uas sawv nyob rau hauv pem hauv ntej ntawm ib daim ntawv thov twb khiav nyob rau hauv lub Docker thawv - Docker dluab yuav tsum tau tsim los ntawm code nyob rau hauv Git rau txhua txheej. Tom qab ntawd thawj daim duab yuav muaj daim ntawv thov nrog tus neeg txhais lus thiab lwm yam "kaw" kev vam khom, thiab daim duab thib ob yuav muaj cov nginx ntws.

Docker duab, kev sib txuas lus nrog Git

Peb faib tag nrho cov duab Docker sau los ntawm Git ua ob pawg: ib ntus thiab tso tawm. Cov duab ib ntus tagged los ntawm lub npe ntawm ceg hauv Git, tuaj yeem sau los ntawm kev cog lus tom ntej thiab raug dov tawm tsuas yog rau kev saib ua ntej (tsis yog rau kev tsim khoom). Qhov no yog lawv qhov sib txawv tseem ceeb ntawm kev tso tawm: koj yeej tsis paub qhov kev cog lus tshwj xeeb hauv lawv.

Nws ua rau kev nkag siab los sau rau hauv cov duab ib ntus: tus tswv ceg (koj tuaj yeem txiav nws tawm mus rau ib qho chaw cais kom pom cov qauv tam sim no ntawm tus tswv), ceg nrog kev tshaj tawm, ceg ntawm kev hloov kho tshiab.

Kev coj ua tsis tu ncua nrog Docker (kev tshuaj xyuas thiab yees duab)
Tom qab saib ua ntej ntawm cov duab ib ntus tuaj txog qhov xav tau kev txhais lus rau hauv kev tsim khoom, cov neeg tsim khoom tau muab ib qho cim npe. Automatically sau los ntawm tag tso duab (nws tag sib raug rau tag los ntawm Git) thiab tau dov tawm mus rau theem. Yog tias nws tau ua tiav los ntawm lub tuam tsev zoo, nws mus rau kev tsim khoom.

dapp ua

Txhua yam uas tau piav qhia (rollout, duab los ua ke, kev saib xyuas tom ntej) tuaj yeem siv nws tus kheej siv Bash scripts thiab lwm yam "improvised" cov cuab yeej. Tab sis yog tias koj ua qhov no, tom qab qee qhov kev siv yuav ua rau muaj kev nyuaj siab thiab kev tswj tsis tau zoo. To taub qhov no, peb tuaj los tsim peb tus kheej tshwj xeeb Workflow utility rau tsim CI / CD - dapp ua.

Nws qhov chaws tau sau hauv Ruby, qhib qhov chaw thiab luam tawm rau GitHub. Hmoov tsis zoo, cov ntaub ntawv tam sim no yog qhov tsis muaj zog ntawm cov cuab yeej, tab sis peb tab tom ua haujlwm rau nws. Thiab peb yuav sau thiab tham txog dapp ntau dua ib zaug, vim ... Peb ua siab ntev tos tsis tau qhia nws lub peev xwm rau tag nrho cov neeg nyiam, tab sis lub sijhawm no, xa koj cov teeb meem thiab rub cov lus thov thiab / lossis ua raws li kev txhim kho ntawm qhov project ntawm GitHub.

Hloov kho Lub Yim Hli 13, 2019: tam sim no ib qhov project dapp ua hloov npe rau werf, nws cov cai tau rov sau dua tshiab hauv Go, thiab nws cov ntaub ntawv tau raug txhim kho zoo.

Kubernetes

Lwm qhov kev npaj ua Open Source uas twb tau txais kev lees paub tseem ceeb hauv ib puag ncig kev tshaj lij yog Kubernetes, Docker tswj pawg. Lub ntsiab lus ntawm nws siv nyob rau hauv kev ua hauj lwm ntawm tej yaam num tsim nyob rau hauv Docker yog dhau ntawm cov Scope ntawm tsab ntawv ceeb toom, yog li qhov kev nthuav qhia yog txwv rau ib tug txheej txheem cej luam ntawm ib co nthuav nta.

Rau kev tshaj tawm, Kubernetes muaj:

  • Kev sojntsuam npaj txhij - kuaj xyuas qhov kev npaj ntawm daim ntawv thov tshiab (kom hloov tsheb mus rau nws);
  • dov hloov tshiab - cov duab hloov tshiab nyob rau hauv ib pawg ntawm cov ntim khoom (kaw, hloov tshiab, npaj rau kev tso tawm, hloov tsheb);
  • synchronous hloov tshiab - hloov kho cov duab hauv ib pawg nrog rau txoj hauv kev sib txawv: ua ntej ntawm ib nrab ntawm cov ntim, tom qab ntawd rau ntawm tus so;
  • canary tso tawm - tso tawm ib daim duab tshiab ntawm qhov txwv (me me) cov ntim los saib xyuas qhov tsis zoo.

Txij li Kev xa tawm tsis tu ncua tsis yog tsuas yog tso tawm cov ntawv tshiab xwb, Kubernetes muaj ntau lub peev xwm rau kev saib xyuas kev tsim kho tom ntej: kev saib xyuas thiab kev nkag rau txhua lub thawv, tsis siv neeg scaling, thiab lwm yam. Tag nrho cov no tau ua haujlwm thiab tsuas yog tos kom raug. kev siv hauv koj cov txheej txheem.

Cov lus pom zoo kawg

  1. Siv Docker.
  2. Tsim Docker dluab ntawm daim ntawv thov rau txhua yam koj xav tau.
  3. Ua raws li lub hauv paus ntsiab lus "Infrastructure yog code."
  4. Txuas Git rau Docker.
  5. Tswj qhov kev txiav txim ntawm rollout.
  6. Siv lub platform npaj tau (Kubernetes lossis lwm qhov).

Yeeb yaj duab thiab slides

Video los ntawm kev ua yeeb yam (txog ib teev) luam tawm hauv YouTube (daim ntawv qhia nws tus kheej pib ntawm 5 feeb - ua raws li qhov txuas mus ua si los ntawm lub sijhawm no).

Kev nthuav qhia ntawm daim ntawv qhia:

PS

Lwm cov lus ceeb toom ntawm lub ncauj lus ntawm peb blog:

Tau qhov twg los: www.hab.com

Ntxiv ib saib