VM կամ Docker.

Ինչպե՞ս հասկանալ, որ ձեզ պետք է Docker, այլ ոչ թե VM: Դուք պետք է որոշեք, թե կոնկրետ ինչ եք ուզում մեկուսացնել: Եթե ​​ցանկանում եք մեկուսացնել երաշխավորված ռեսուրսներով և վիրտուալ սարքավորումներով համակարգը, ապա ընտրությունը պետք է ընկնի VM-ի վրա: Եթե ​​Ձեզ անհրաժեշտ է մեկուսացնել գործող հավելվածները որպես առանձին համակարգի գործընթացներ, ապա ձեզ հարկավոր կլինի Docker:

Այսպիսով, ո՞րն է տարբերությունը Docker բեռնարկղերի և VM-ների միջև:

Վիրտուալ մեքենա (VM) վիրտուալ համակարգիչ է՝ բոլոր վիրտուալ սարքերով և վիրտուալ կոշտ սկավառակով, որի վրա տեղադրված է նոր անկախ ՕՀ՝ վիրտուալ սարքի դրայվերների, հիշողության կառավարման և այլ բաղադրիչների հետ միասին։ Այսինքն, մենք ստանում ենք ֆիզիկական ապարատային աբստրակցիա, որը թույլ է տալիս գործարկել բազմաթիվ վիրտուալ համակարգիչներ մեկ համակարգչի վրա:
Տեղադրված VM-ը կարող է սկավառակի տարածություն գրավել տարբեր ձևերով.

  • ֆիքսված կոշտ սկավառակի տարածություն, որը թույլ է տալիս ավելի արագ մուտք գործել վիրտուալ կոշտ սկավառակ և խուսափել ֆայլերի մասնատումից;
  • դինամիկ հիշողության բաշխում: Հավելյալ հավելվածներ տեղադրելիս հիշողությունը դինամիկ կերպով կհատկացվի նրանց համար, մինչև հասնի իրեն հատկացված առավելագույն գումարին։

Որքան շատ վիրտուալ մեքենաներ սերվերի վրա, այնքան ավելի շատ տարածք են դրանք զբաղեցնում, ինչպես նաև պահանջում են միջավայրի մշտական ​​աջակցություն, որն անհրաժեշտ է ձեր հավելվածի աշխատանքի համար:

դոկեր բեռնարկղերի վրա հիմնված հավելվածներ կառուցելու համար նախատեսված ծրագիր է: Կոնտեյներները և վիրտուալ մեքենաներն ունեն նմանատիպ առավելություններ, բայց տարբեր կերպ են աշխատում: Տարաները ավելի քիչ տեղ են զբաղեցնում, քանի որ չարաշահել հյուրընկալող համակարգի ավելի շատ ընդհանուր ռեսուրսներ, քան VM-ը, քանի որ ի տարբերություն VM-ի, ապահովում է վիրտուալացում OS մակարդակով, ոչ թե ապարատային: Այս մոտեցումը ապահովում է ավելի քիչ հիշողություն, ավելի արագ տեղակայում և ավելի հեշտ մասշտաբավորում:

Կոնտեյները ապահովում է ավելի արդյունավետ մեխանիզմ՝ հավելվածները պարփակելու համար՝ ապահովելով անհրաժեշտ ինտերֆեյսներ հյուրընկալող համակարգին: Այս հատկությունը թույլ է տալիս բեռնարկղերին կիսել համակարգի միջուկը, որտեղ կոնտեյներներից յուրաքանչյուրն աշխատում է որպես հիմնական ՕՀ-ի առանձին գործընթաց, որն ունի հիշողության տարածքների իր հավաքածուն (իր սեփական վիրտուալ հասցեների տարածքը): Քանի որ յուրաքանչյուր կոնտեյների վիրտուալ հասցեի տարածքն իրենն է, հիշողության տարբեր տարածքներին պատկանող տվյալները չեն կարող փոխվել:
Docker-ի բնիկ ՕՀ-ն Linux-ն է (Docker-ը կարող է օգտագործվել նաև Windows-ի և MacOS-ի վրա), այն օգտագործում է իր հիմնական առավելությունները, որոնք թույլ են տալիս կազմակերպել բաժանված միջուկ։ Windows-ում Docker կոնտեյներների գործարկումը տեղի կունենա Linux վիրտուալ մեքենայի ներսում: կոնտեյներները կիսում են հյուրընկալող համակարգի ՕՀ-ն, և նրանց համար հիմնական ՕՀ-ն Linux-ն է:

Բեռնարկղ - ինչպես է այն աշխատում:

Բեռնարկղ աբստրակցիա է հավելվածի մակարդակում, որը համատեղում է կոդը և կախվածությունները։ Կոնտեյներները միշտ ստեղծվում են պատկերներից՝ ավելացնելով գրավոր վերին շերտ և սկզբնավորելով տարբեր պարամետրեր: Քանի որ կոնտեյներն ունի իր գրելու շերտը, և բոլոր փոփոխությունները պահվում են այդ շերտում, մի քանի կոնտեյներներ կարող են օգտվել նույն հիմնական պատկերից:

Յուրաքանչյուր կոնտեյներ կարող է կազմաձևվել հիմնական լուծման մեջ ներառված docker-compose նախագծի ֆայլի միջոցով՝ docker-compose.yml: Այնտեղ կարող եք սահմանել տարբեր պարամետրեր, ինչպիսիք են կոնտեյների անվանումը, նավահանգիստները, նույնացուցիչները, ռեսուրսների սահմանաչափերը, այլ բեռնարկղերի միջև կախվածությունը: Եթե ​​կարգավորումներում չեք նշում կոնտեյների անուն, ապա Docker-ը ամեն անգամ կստեղծի նոր կոնտեյներ՝ պատահականորեն անուն տալով դրան:

Երբ բեռնարկղը գործարկվում է պատկերից, Docker-ը տեղադրում է կարդալ/գրելու ֆայլային համակարգը ներքևի ցանկացած շերտի վերևում: Այստեղ կաշխատեն բոլոր գործընթացները, որոնք մենք ցանկանում ենք, որ մեր Docker կոնտեյները աշխատի:

Երբ Docker-ը առաջին անգամ գործարկում է կոնտեյներ, նախնական ընթերցման/գրելու շերտը դատարկ է: Երբ փոփոխություններ են տեղի ունենում, դրանք կիրառվում են այդ շերտի վրա; օրինակ, եթե ցանկանում եք փոփոխել ֆայլը, այդ ֆայլը կպատճենվի ներքևում գտնվող միայն կարդալու շերտից դեպի կարդալ-գրել շերտ:
Ֆայլի միայն կարդալու տարբերակը դեռ գոյություն կունենա, բայց այժմ թաքնված է պատճենի տակ: Ծավալները օգտագործվում են տվյալների պահպանման համար՝ անկախ բեռնարկղի կյանքի ցիկլից: Ծավալները սկզբնավորվում են, երբ ստեղծվում է կոնտեյներ:

Ինչպե՞ս է պատկերը կապված տարայի հետ:

Պատկեր - յուրաքանչյուր տարայի հիմնական տարրը: Պատկերը ստեղծվել է նախագծին ավելացված Dockerfile-ից և իրենից ներկայացնում է ֆայլային համակարգերի (շերտերի) մի շարք, որոնք շերտավորվել են միմյանց վրա և խմբավորվել միասին, հասանելի միայն կարդալու համար. շերտերի առավելագույն քանակը 127 է։

Յուրաքանչյուր պատկերի հիմքում ընկած է բազային պատկերը, որը նշված է FROM հրամանով` մուտքի կետը Dockerfile պատկեր ստեղծելիս: Յուրաքանչյուր շերտ միայն կարդալու շերտ է և ներկայացված է մեկ հրամանով, որը փոփոխում է ֆայլային համակարգը՝ գրված Dockerfile-ում:
Այս շերտերը մեկ պատկերի մեջ միավորելու համար Docker-ն օգտագործում է Ընդլայնված բազմաշերտ Union ֆայլային համակարգը (AuFS-ը կառուցված է UnionFS-ի վերևում), որը թույլ է տալիս տարբեր ֆայլերի տարբեր շերտերից տարբեր ֆայլեր և գրացուցակներ թափանցիկորեն համընկնել՝ ստեղծելով համապատասխան ֆայլային համակարգ:

Շերտերը պարունակում են մետատվյալներ, որոնք թույլ են տալիս յուրաքանչյուր շերտի մասին համապատասխան տեղեկատվությունը պահել գործարկման և կառուցման ժամանակ: Յուրաքանչյուր շերտ պարունակում է հղում դեպի հաջորդ շերտը, եթե շերտը չունի հղում, ապա սա պատկերի ամենավերին շերտն է:

Dockerfile-ը կարող է պարունակել այնպիսի հրամաններ, ինչպիսիք են.

  • FROM - մուտքի կետ պատկերի ձևավորման մեջ;
  • MAINTAINER - պատկերի սեփականատիրոջ անունը;
  • RUN - հրամանի կատարում պատկերի հավաքման ժամանակ;
  • ADD - հյուրընկալող ֆայլը պատճենելը նոր պատկերի վրա, եթե նշեք URL ֆայլ, Docker-ը այն կներբեռնի նշված գրացուցակում;
  • ENV - շրջակա միջավայրի փոփոխականներ;
  • CMD - սկսում է պատկերի հիման վրա նոր կոնտեյների ստեղծումը.
  • ENTRYPOINT - հրամանը կատարվում է, երբ բեռնարկղը գործարկվում է:
  • WORKDIR-ը CMD հրամանի կատարման աշխատանքային գրացուցակն է:
  • USER - Սահմանում է UID-ը պատկերից ստեղծված կոնտեյների համար:
  • VOLUME - Տեղադրում է հյուրընկալող գրացուցակը կոնտեյների վրա:
  • EXPOSE-ը նավահանգիստների մի շարք է, որոնք լսվում են կոնտեյներով:

Ինչպե՞ս է աշխատում UnionFS-ը:

UnionFS — սպասարկման ստեկ ֆայլային համակարգ (FS) Linux-ի և FreeBSD-ի համար: Այս FS-ն իրականացնում է copy-on-write (Copy-On-Write, COW) մեխանիզմը: UnionFS-ի աշխատանքային միավորը շերտ է, յուրաքանչյուր շերտ պետք է դիտարկվի որպես առանձին լիարժեք ֆայլային համակարգ, որն ունի գրացուցակի հիերարխիա հենց արմատից: UnionFS-ը ստեղծում է միություն այլ ֆայլային համակարգերի համար և թույլ է տալիս թափանցիկ կերպով միաձուլել ֆայլերն ու գրացուցակները տարբեր ֆայլային համակարգերից (կոչվում են ճյուղեր) մեկ կապակցված ֆայլային համակարգի մեջ՝ թափանցիկ օգտագործողի համար:

Նույն ուղիներով գրացուցակների բովանդակությունը միասին կցուցադրվի ստացված ֆայլային համակարգի մեկ համակցված գրացուցակում (նույն անվանատարածքում):

UnionFS-ը միավորում է շերտերը՝ հիմնվելով հետևյալ սկզբունքների վրա.

  • Շերտերից մեկը դառնում է վերին մակարդակի շերտ, երկրորդ և հաջորդ շերտերը դառնում են ավելի ցածր մակարդակի շերտեր.
  • շերտի օբյեկտները հասանելի են օգտագործողին «վերևից ներքև», այսինքն. եթե հայցվող օբյեկտը գտնվում է «վերին» շերտում, այն վերադարձվում է՝ անկախ «ստորին» շերտում նույն անունով օբյեկտի առկայությունից. հակառակ դեպքում, «ներքևի» շերտի օբյեկտը վերադարձվում է. եթե հայցվող օբյեկտը ոչ այնտեղ է, ոչ էլ այնտեղ, «Չկա այդպիսի ֆայլ կամ գրացուցակ» սխալը վերադարձվում է.
  • աշխատանքային շերտը «վերևում» է, այսինքն՝ տվյալների փոփոխման համար օգտագործողի բոլոր գործողություններն արտացոլվում են միայն վերին մակարդակի վրա՝ չազդելով ստորին մակարդակի շերտերի բովանդակության վրա:

Docker-ը կիրառական աշխատանքներում կոնտեյներների օգտագործման ամենատարածված տեխնոլոգիան է: Այն դարձել է ստանդարտ այս ոլորտում՝ հիմնվելով Linux միջուկի կողմից տրամադրված cgroups-ի և namespace-ների վրա:

Docker-ը մեզ թույլ է տալիս արագորեն տեղակայել հավելվածները և լավագույնս օգտագործել ֆայլային համակարգը՝ բաժանելով ՕՀ միջուկը բոլոր կոնտեյներների միջև՝ գործարկելով որպես առանձին OS գործընթացներ:

Source: www.habr.com

Добавить комментарий