Ինչպե՞ս հասկանալ, թե ձեզ պետք է Docker, սակայն ոչ VM: Нужно определить, что именно вы хотите изолировать. Եթե անհրաժեշտ է շրջափակել համակարգը երաշխավորված հատկացված ռեսուրսներով և վիրտուալ սարքավորումների, ապա ընտրությունը պետք է կանգնել VM-ի վրա: Եթե անհրաժեշտ է իրագործել աշխատող ծրագրեր տարբեր գործընթացներով, ապա ձեզ անհրաժեշտ կլինի Docker:
Ի՞նչ տարբերություն կա Docker կոնտեյներների և VM-ի միջև:
Վիրտուալ մեքենան (VM) նաև վիրտուալ համակարգիչ է բոլոր վիրտուալ սարքավորումներով և վիրտուալ դժվար համակարգիչով, որի վրա պետք է տեղադրվի նոր անկախ ОС միասին վիրտուալ սարքի վարորդների, հիշողության կառավարման և այլ բաղադրիչների հետ: То есть, мы получаем абстракцию физического оборудования, позволяющую запускать на одном компьютере множество виртуальных компьютеров.
Տեղադրված VM-ն կարող է տարբեր կերպ զբաղեցնել տեղը համակարգչի դարձվածքում:
- պահպանված տեղը հարդագծում, որը թույլ է տալիս ավելի արագ ընդլայնված հասանելիություն վիրտուալ դժվար համակարգչին և խուսափում է ֆրագմենտացիայից;
- դինամիկ հիշողության հատկացում. լրացուցիչ ծրագրերի տեղադրված ժամանակ հիշողությունը դինամիկ կերպով հատկացվում է դրանց, մինչև հասնի առավելագույն ծավալին, որը նախատեսված է դրա համար:
Ո колко օգտագործման համար կիրառվում է KubeVirt տեխնոլոգիան, որը թույլ է տալիս աշխատեցնել դասական վիրտուալ մեքենաներ ուղղակի Kubernetes կոնտեյներում և արդեն ունի բոլոր անհրաժեշտ ինտեգրացիաները Cluster API-ի հետ՝ կառավարվող Kubernetes կլաստերներ սկսելու համար «երևակայական» Kubernetes կլաստերում: сервер, այնքան ավելի շատ տեղ են զբաղեցնում նրանք, ինչպես նաև պահանջում են մշտական աջակցություն շրջապատի, որը անհրաժեշտ է ձեր ծրագիրը աշխատելու համար:
Docker նաև ծրագրային ապահովում է կոնտեյներների հիման վրա ծրագրեր ստեղծելու: Կոնտեյներները և վիրտուալ մեքենաներ имеют схожие преимущества, но работают по-разному. К containers используются меньший объем, поскольку используются большее количество общих ресурсов хост-системы, чем VM, поскольку, в отличие от VM, обеспечивает виртуализацию на уровне ОС. Такой подход обеспечивает меньший объем занимаемой памяти, быстрое развертывание и более простое масштабирование.
Контейнер обеспечивает более эффективный механизм инкапсуляции приложений, обеспечивая необходимые интерфейсы хост-системы. Эта функция позволяет контейнерам разделить ядро системы, где каждый контейнер функционирует как отдельный процесс основной ОС, имеющий свой собственный набор участков памяти (собственное виртуальное адресное пространство). Так как виртуальное адресное пространство каждого контейнера является независимым, данные, принадлежащие различным участкам памяти, не могут быть изменены.
Docker-ի տեղական OS-ն Linux է (Docker կարող է օգտագործվել նաև Windows և MacOS-ում), որը օգտվում է դրա հիմնական առավելություններից, որոնք թույլ տալիս կազմակերպել միջուկի բաժանումը։ Docker կոնտեյների գործարկումը Windows-ում տեղի ունի Linux OS-ի վիրուսային մեքենայի ներսում, քանի որ կոնտեյներները բաժանում են ունHosts համակարգի OS-ը, իսկ դրանց հիմնական OS-ն Linux-ն է։
Կոնտեյներ — ինչպես է սա աշխատում:
Կոնտեյեր — սա կիրառման մակարդակի աբստրակցիա է, որը միավորում է կոդն ու կախվածությունները։ Կոնտեյները միշտ ստեղծվում են պատկերներից, ավելացնելով գրանցման համար հասանելի վերին շերտ և սկսում են տարբեր պարամետրեր։ Որպեսզի կոնտեյներն ուներ իր սեփական գրանցման շերտը և բոլոր փոփոխությունները պահվեն այս շերտում, մի քանի կոնտեյներ կարող են համատեղ օգտվել նույն հիմնական պատկերին։
Յուրաքանչյուր կոնտեյեր կարող է կարգավորվել docker-compose նախագծում ընդգրկված ֆայլի միջոցով, որը մաս է կազմում հիմնական լուծմանը — docker-compose.yml։ Այնտեղ կարող եք սահմանել տարբեր պարամետրեր, ինչպիսիք են կոնտեյերի անունը, պորտերը, նույնականացողները, ռեսուրսների սահմանները, կախվածությունները այլ կոնտեյներների միջեւ։ Եթե կարգավորումներում կոնտեյերի անունը չի սահմանվում, ապա Docker ամեն անգամ նոր կոնտեյեր կստեղծի, պատահաբար անվանելով նրան։
Երբ կոնտեյերը ստեղծվում է պատկերից, Docker-ը մաունտավորում է ֆայլային համակարգը ընթերցման և գրանցման համար ցանկացած ստորև գտնվող շերտերի վրա։ Ահա թե որտեղ են կատարվում բոլոր պրոցեսները, որոնք ցանկանում ենք, որ մեր Docker կոնտեյերը կատարի։
Երբ Docker-ը առաջին անգամ ստեղծում է կոնտեյեր, սկզբնական ընթերցման-գրելու շերտը դատարկ է։ Երբ փոփոխություններ են կատարվում, դրանք կիրառվում են այս շերտին։ Օրինակ, եթե ցանկանում եք փոխել ֆայլ, այդ ֆայլը կնքվում է ստորև գտնվող միայն ընթերցման շերտից մակերես ստորևւ՝ ընթերցման և գրելու շերտում։
Ենթադրանքիկ ֆայլի տարբերակը դեռ կգտնվի, բայց այժմ այն ծածկված է իր պատճենով։ Տվյալները, անկախ կոնտեյերի կյանքի ցիկլից, պահվում են վոլյումները։ Վոլյումների ստեղծումը տեղի է ունենում կոնտեյերի ստեղծման ժամանակ։
Ինչպես է պատկերն առնչվում կոնտեյերին?
Պատկեր — յուրաքանչյուր կոնտեյերի հիմնական տարրն է։ Պատկերը ստեղծվում է Dockerfile-ից, որը հավելված է նախագծին և ներկայացնում է ֆայլային համակարգերի (շերտերի) հավաքածու, որոնք մուռին են կպցված և միավորված միասին, միայն ընթերցման նպատակով, առավելագույն շերտերի թիվը 127 է։
Յուրաքանչյուր պատկերների հիմքում դրված է հիմնական պատկեր, որը նշվում է FROM հրամանով՝ Dockerfile- ի մշակման ընթացակարգում։ Յուրաքանչյուր շերտը readonly շերտ է, որը ներկայացնում է մի հրաման, որը փոփոխել է Dockerfile-ում գրանցված ֆայլային համակարգը։
Այս շերտերը միավորում ի մի պատկեր Docker-ն օգտագործում է Advanced multi layered Union file system (AuFS-ն կառուցվել է UnionFS-ի հիման վրա), որը թույլ է տալիս տարբեր ֆայլեր և ուղղություններ տարբեր ֆայլերի շերտերից շփվել առանց խնդիրների՝ ստեղծելով մի կապված ֆայլային համակարգ։
Մակերեսները պարունակում են մետադատ տվյալներ, որոնք թույլ են տալիս պահպանել առնչվող տեղեկատվություն յուրաքանչյուր մակերևույթի համար ժամանակի ընթացք և հավաքման ընթացքում: Յուրաքանչյուր մակերեսն ունի հղում հաջորդ մակերեսին, եթե մակերեսը չունի հղում, ապա դա պատկերարվեստի վերևի մակերևույթն է:
Dockerfile-ը կարող է sisaldել հետևյալ հրամանները:
- FROM — հիմնակետ, երբ ձևավորել պատկերն;
- MAINTAINER — պատկերիդ սեփականատիրոջ անունը;
- RUN — հրաման կատարում ձևավորման ընթացքում;
- ADD — ֆայլի փոխադրում հյուրընկալողից նոր պատկեր, եթե նշվի ֆայլի URL-ը, Docker-ն այն ներբեռնում է նշված պահոցին;
- ENV — միջավայրի փոփոխականներ;
- CMD — запускает создание нового контейнера на основе образа;
- ENTRYPOINT — հրամանը կատարվում է контейнерի գործարկման ժամանակ:
- WORKDIR — աշխատանքային կատալոգ CMD հրամանի կատարելու համար:
- USER — սահմանում է UID ստեղծված контейների համար:
- VOLUME — կայունում է հյուրընկալողի կատալոգը դեպի контейներ:
- EXPOSE — լսվող պորտերի հավաքածու контейնում:
UnionFS-ը ինչպես է աշխատում:
UnionFS — ծառայողական շերտավորված ֆայլերի համակարգ (ՖՍ) Linux-ի և FreeBSD-ի համար: Այս ՖՍ-ն իրականացնում է գրիրիս ժամանակի կոպի (Copy-On-Write, COW) մեխանիզմը: UnionFS-ի աշխատանքային միավորը շերտն է, յուրաքանչյուր շերտ պետք է դիտարկել որպես առանձին լիիրավ ֆայլերի համակարգ հիերարխիկ կատալոգներով, սկսած հիմնականից: UnionFS-ն ստեղծում է միավորում մոնտաժման այլ ֆայլերի համակարգերի համար և թույլ է տալիս օգտագործողին միավորել ֆայլերը և կատալոգները տարբեր ֆայլերի համակարգերի (որոնք կոչվում են ն branch) միայնակ միացված ֆայլերի համակարգում:
Հատեղերի համանման փակուղիներում պարունակությունը ցուցադրվում է միասնական միացված փակուղում (մի կողմից նավի տարածքում) ստացված ֆայլերի համակարգում.
UnionFS-ն միացնում է շերտերը՝ հետևելով հետևյալ սկզբունքներին:
- մեկը շերտերից վերևի մակարդակի շերտ է դառնում, երկրորդն և հաջորդներն՝ ներքևի մակարդակի շերտեր;
- օգտվողին շերտերի առարկաներ հասանելի են «վերևից ներքև», այսինքն, եթե պահանջվող առարկան կա «վերևի» շերտում, վերադարձվում է այն, անկախ նրանից, թե կա արդյոք առարկա նման անունով «ներքևի» շերտում; հակառակ դեպքում վերադարձվում է «ներքևի» շերտի առարկան; եթե պահանջվող առարկան չկա ոչ այնտեղ, ոչ այնտեղ, վերադարձվում է «Ոչ այդպիսի ֆայլ կամ փակուղի» սխալ;
- աշխատանքային շերտը «վերևի» է, այսինքն, օգտվողի տվյալների փոփոխություն կատարելու բոլոր գործողությունները արտացոլվում են միայն վերևի մակարդակի շերտում, չազդելով ներքևի մակարդակի շերտերի բովանդակության վրա:
Docker-ը ամենատարածված տեխնոլոգիան է կիրառվող контейներ կիրառման աշխատանքներում: Այն դարձել է այս ոլորտի ստանդարտ՝ հիմնվելով cgroups-ի և նավի տարածքի տարածքի վրա, որը ապահովում է Linux-ի միջուկը.
Docker-ը մեզ թույլ է տալիս արագ հրահանգել դիմումները և առավելագույնս օպտիմալ օգտագործել ֆայլերի համակարգը՝ OS միջուկի բաժանման շնորհիվ բոլոր контейների միջև, աշխատելով ինչպես առանձին գործընթացներ OS-ի.
Ընտանիք: habr.com
