Հասկանալով Docker

Ես արդեն մի քանի ամիս է, ինչ օգտագործում եմ Docker-ը՝ վեբ նախագծերի մշակման/առաքման գործընթացի կառուցվածքի համար: Habrakhabr-ի ընթերցողներին առաջարկում եմ թարգմանել ներածական հոդվածը docker-ի մասին. «Հասկանալով դոկերը».

Ի՞նչ է դոկերը:

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

Իր հիմքում docker-ը թույլ է տալիս գործարկել գրեթե ցանկացած հավելված՝ ապահով կերպով մեկուսացված կոնտեյներով: Անվտանգ մեկուսացումը թույլ է տալիս միաժամանակ գործարկել բազմաթիվ կոնտեյներներ նույն հյուրընկալողի վրա: Կոնտեյների թեթև բնույթը, որն աշխատում է առանց հիպերվիզորի լրացուցիչ բեռի, թույլ է տալիս ավելի շատ օգտվել ձեր սարքաշարից:

Կոնտեյների վիրտուալացման հարթակը և գործիքները կարող են օգտակար լինել հետևյալ դեպքերում.

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

Ինչի՞ համար կարող եմ օգտագործել docker-ը:

Արագ հրապարակեք ձեր դիմումները

Docker-ը հիանալի է զարգացման ցիկլը կազմակերպելու համար: Docker-ը ծրագրավորողներին թույլ է տալիս գործարկել տեղական կոնտեյներներ հավելվածներով և ծառայություններով: Ինչը հետագայում թույլ է տալիս ինտեգրվել շարունակական ինտեգրման և տեղակայման գործընթացին:

Օրինակ՝ ձեր ծրագրավորողները տեղական կոդ են գրում և գործընկերների հետ կիսում իրենց մշակման փաթեթը (Docker պատկերների մի շարք): Երբ նրանք պատրաստ են, նրանք սեղմում են կոդը և բեռնարկղերը դեպի փորձարկման վայր և կատարում են բոլոր անհրաժեշտ թեստերը: Փորձարկման վայրից նրանք կարող են կոդ և պատկերներ ուղարկել արտադրություն:

Ավելի հեշտ երեսպատում և բացում

Դոկեր կոնտեյներների վրա հիմնված հարթակը հեշտացնում է ձեր օգտակար բեռը տեղափոխելը: Docker կոնտեյներները կարող են աշխատել ձեր տեղական մեքենայի վրա՝ իրական կամ վիրտուալ մեքենայի վրա տվյալների կենտրոնում կամ ամպի մեջ:

Docker-ի շարժականությունն ու թեթևությունը հեշտացնում են դինամիկ կերպով կառավարել ձեր ծանրաբեռնվածությունը: Դուք կարող եք օգտագործել docker-ը՝ ձեր հավելվածը կամ ծառայությունները տեղակայելու կամ անջատելու համար: Դոկերի արագությունը թույլ է տալիս դա անել գրեթե իրական ժամանակում:

Ավելի մեծ բեռներ և ավելի շատ ծանրաբեռնվածություն

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

Docker-ի հիմնական բաղադրիչները

Docker-ը բաղկացած է երկու հիմնական բաղադրիչներից.

  • Docker՝ բաց կոդով վիրտուալացման հարթակ;
  • Docker Hub. Մեր հարթակը որպես ծառայություն՝ Docker կոնտեյներների բաշխման և կառավարման համար:

Նշում! Docker-ը տարածվում է Apache 2.0 լիցենզիայի ներքո:

Docker ճարտարապետություն

Docker-ը օգտագործում է հաճախորդ-սերվեր ճարտարապետություն: Docker հաճախորդը շփվում է Docker daemon-ի հետ, որն իր վրա է վերցնում ձեր բեռնարկղերի ստեղծման, գործարկման և բաշխման բեռը: Ե՛վ հաճախորդը, և՛ սերվերը կարող են աշխատել նույն համակարգով, դուք կարող եք հաճախորդին միացնել հեռավոր դոկեր դեյմոնին: Հաճախորդը և սերվերը շփվում են վարդակից կամ RESTful API-ի միջոցով:

Հասկանալով Docker

Docker Daemon

Ինչպես ցույց է տրված դիագրամում, դեյմոնն աշխատում է հյուրընկալող մեքենայի վրա: Օգտագործողը ուղղակիորեն չի շփվում սերվերի հետ, այլ դրա համար օգտագործում է հաճախորդին:

Docker հաճախորդ

Docker հաճախորդը, docker ծրագիրը, Docker-ի հիմնական ինտերֆեյսն է: Այն ստանում է հրամաններ օգտատիրոջից և փոխազդում է docker daemon-ի հետ:

Ներսում նավահանգիստ

Հասկանալու համար, թե ինչից է բաղկացած դոկերը, դուք պետք է իմանաք երեք բաղադրիչների մասին.

  • պատկերներ
  • գրանցամատյան
  • տարաներ

Նկարներ

Docker պատկերը միայն կարդալու ձևանմուշ է: Օրինակ՝ պատկերը կարող է պարունակել Ubuntu օպերացիոն համակարգ՝ Apache-ով և դրա վրա հավելված: Պատկերները օգտագործվում են կոնտեյներներ ստեղծելու համար: Docker-ը հեշտացնում է նոր պատկերներ ստեղծելը, գոյություն ունեցողները թարմացնելը կամ կարող եք ներբեռնել այլ մարդկանց կողմից ստեղծված պատկերներ: Պատկերները դոկերի կառուցվածքի բաղադրիչներն են:

Ռեեստրը

Docker ռեեստրը պահպանում է պատկերները: Կան պետական ​​և մասնավոր ռեգիստրներ, որոնցից կարող եք ներբեռնել կամ վերբեռնել պատկերներ: Հանրային Docker ռեգիստրն է Docker հանգույց. Այնտեղ պահված է պատկերների հսկայական հավաքածու։ Ինչպես գիտեք, պատկերները կարող են ստեղծվել ձեր կողմից կամ կարող եք օգտագործել ուրիշների ստեղծած պատկերները: Ռեեստրները բաշխման բաղադրիչ են:

Բեռնարկղեր

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

Այսպիսով, ինչպես է աշխատում Docker-ը:

Առայժմ մենք գիտենք, որ.

  • մենք կարող ենք ստեղծել պատկերներ, որոնցում գտնվում են մեր հավելվածները.
  • մենք կարող ենք պատկերներից կոնտեյներներ ստեղծել հավելվածներ գործարկելու համար.
  • Մենք կարող ենք պատկերներ տարածել Docker Hub-ի կամ պատկերների այլ ռեեստրի միջոցով:

Տեսնենք, թե ինչպես են այս բաղադրիչները համապատասխանում միմյանց:

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

Մենք արդեն գիտենք, որ պատկերը միայն կարդալու ձևանմուշ է, որից ստեղծվում է կոնտեյներ։ Յուրաքանչյուր պատկեր բաղկացած է մի շարք մակարդակներից: Docker-ը օգտագործում է միության ֆայլային համակարգ միավորել այս մակարդակները մեկ պատկերի մեջ: Union ֆայլային համակարգը թույլ է տալիս տարբեր ֆայլային համակարգերի (տարբեր ճյուղերի) ֆայլերը և գրացուցակները թափանցիկորեն համընկնել՝ ստեղծելով համահունչ ֆայլային համակարգ:

Դոկերի թեթևության պատճառներից մեկն այն է, որ այն օգտագործում է նման շերտեր: Երբ դուք փոխում եք պատկերը, օրինակ՝ հավելվածի թարմացումը, ստեղծվում է նոր շերտ: Այսպիսով, առանց ամբողջ պատկերը փոխարինելու կամ այն ​​վերակառուցելու, ինչպես դուք կարող եք անել վիրտուալ մեքենայի հետ, ավելացվում կամ թարմացվում է միայն շերտը: Եվ պետք չէ ամբողջ նոր պատկերը տարածել, միայն թարմացումն է բաշխվում՝ հեշտացնելով և արագացնելով պատկերների տարածումը:

Յուրաքանչյուր պատկերի հիմքում հիմնական պատկերն է: Օրինակ՝ ubuntu-ն՝ Ubuntu-ի հիմնական պատկերը, կամ Fedora-ն՝ Fedora-ի բաշխման հիմնական պատկերը։ Կարող եք նաև օգտագործել պատկերները որպես հիմք նոր պատկերներ ստեղծելու համար: Օրինակ, եթե դուք ունեք apache պատկեր, կարող եք օգտագործել այն որպես հիմնական պատկեր ձեր վեբ հավելվածների համար:

Նշում! Docker-ը սովորաբար նկարներ է հանում Docker Hub ռեեստրից:

Docker պատկերները կարող են ստեղծվել այս բազային պատկերներից, մենք կոչում ենք այս պատկերների ստեղծման քայլերը հրահանգներ: Յուրաքանչյուր հրահանգ ստեղծում է նոր պատկեր կամ մակարդակ: Հրահանգները կլինեն հետևյալը.

  • գործարկել հրամանը
  • ֆայլ կամ գրացուցակ ավելացնելով
  • շրջակա միջավայրի փոփոխականի ստեղծում
  • հրահանգներ, թե ինչ գործարկել, երբ գործարկվի այս պատկերի կոնտեյները

Այս հրահանգները պահվում են ֆայլում Dockerfile. Դոկերը կարդում է սա Dockerfile, երբ դուք կառուցում եք պատկերը, կատարում է այս հրահանգները և վերադարձնում վերջնական պատկերը:

Ինչպե՞ս է աշխատում դոկերի ռեեստրը:

Ռեեստրը դոկերի պատկերների պահոց է: Պատկերը ստեղծելուց հետո դուք կարող եք այն հրապարակել հանրային Docker Hub ռեեստրում կամ ձեր անձնական գրանցամատյանում:

Docker հաճախորդի հետ դուք կարող եք որոնել արդեն հրապարակված պատկերներ և ներբեռնել դրանք ձեր docker մեքենա՝ բեռնարկղեր ստեղծելու համար:

Docker Hub-ը տրամադրում է հանրային և մասնավոր պատկերների պահոցներ: Հանրային պահոցներից պատկերներ որոնելը և ներբեռնելը հասանելի է բոլորին: Մասնավոր պահեստների բովանդակությունը ներառված չէ որոնման արդյունքներում: Եվ միայն դուք և ձեր օգտատերերը կարող եք ստանալ այս պատկերները և դրանցից կոնտեյներներ ստեղծել:

Ինչպե՞ս է աշխատում կոնտեյները:

Կոնտեյները բաղկացած է օպերացիոն համակարգից, օգտվողի ֆայլերից և մետատվյալներից: Ինչպես գիտենք, յուրաքանչյուր կոնտեյներ ստեղծվում է պատկերից։ Այս պատկերը դոկերին ասում է, թե ինչ կա կոնտեյներով, ինչ գործընթաց սկսել, երբ բեռնարկղը գործարկվի և այլ կազմաձևման տվյալներ: Docker պատկերը միայն կարդալու է: Երբ docker-ը գործարկում է կոնտեյներ, այն ստեղծում է կարդալու/գրելու շերտ նկարի վերևում (օգտագործելով միության ֆայլային համակարգը, ինչպես նշված է նախկինում), որում կարող է գործարկվել հավելվածը:

Ինչ է տեղի ունենում, երբ բեռնարկղը սկսվում է:

Կամ օգտագործելով ծրագիրը docker, կամ օգտագործելով RESTful API-ը, docker հաճախորդը ասում է docker daemon-ին միացնել կոնտեյները:

$ sudo docker run -i -t ubuntu /bin/bash

Եկեք նայենք այս հրամանին: Հաճախորդը գործարկվում է հրամանի միջոցով docker, տարբերակով run, որն ասում է, որ նոր կոնտեյներ է գործարկվելու։ Կոնտեյների գործարկման նվազագույն պահանջները հետևյալ հատկանիշներն են.

  • որ պատկերն օգտագործել կոնտեյները ստեղծելու համար: Մեր դեպքում ubuntu
  • հրամանը, որը ցանկանում եք գործարկել, երբ բեռնարկղը գործարկվի: Մեր դեպքում /bin/bash

Ի՞նչ է տեղի ունենում գլխարկի տակ, երբ մենք գործարկում ենք այս հրամանը:

Docker-ը, հերթականությամբ, անում է հետևյալը.

  • ներբեռնում է ubuntu պատկերը՝ docker-ը ստուգում է պատկերի առկայությունը ubuntu տեղական մեքենայի վրա, և եթե այն չկա, ապա ներբեռնեք այն Docker հանգույց. Եթե ​​կա պատկեր, այն օգտագործում է կոնտեյներ ստեղծելու համար;
  • ստեղծում է կոնտեյներ. երբ պատկերը ստացվում է, docker-ն այն օգտագործում է կոնտեյներ ստեղծելու համար.
  • սկզբնավորում է ֆայլային համակարգը և տեղադրում միայն կարդալու մակարդակը. կոնտեյները ստեղծվում է ֆայլային համակարգում և պատկերն ավելացվում է միայն կարդալու մակարդակին.
  • սկզբնավորում է ցանցը/կամուրջը՝ ստեղծում է ցանցային ինտերֆեյս, որը թույլ է տալիս docker-ին շփվել հյուրընկալող մեքենայի հետ.
  • IP հասցեի կարգավորում. գտնում և սահմանում է հասցեն;
  • Սկսում է նշված գործընթացը. գործարկում է ձեր հավելվածը;
  • Մշակում և արտադրում է արդյունք ձեր հավելվածից. միացնում և գրանցում է ձեր հավելվածի ստանդարտ մուտքագրումը, ելքը և սխալների հոսքը, որպեսզի կարողանաք հետևել ձեր հավելվածի աշխատանքին:

Այժմ դուք ունեք աշխատանքային կոնտեյներ: Դուք կարող եք կառավարել ձեր կոնտեյները, շփվել ձեր հավելվածի հետ: Երբ որոշեք դադարեցնել հավելվածը, ջնջեք կոնտեյները:

Օգտագործված տեխնոլոգիաներ

Docker-ը գրված է Go-ում և օգտագործում է Linux միջուկի որոշ առանձնահատկություններ՝ վերը նշված գործառույթն իրականացնելու համար:

Անվան տարածքներ

Docker-ը օգտագործում է տեխնոլոգիա namespaces կազմակերպել մեկուսացված աշխատանքային տարածքներ, որոնք մենք անվանում ենք կոնտեյներներ։ Երբ մենք գործարկում ենք կոնտեյներ, docker-ը ստեղծում է անվանատարածքների մի շարք այդ կոնտեյների համար:

Սա ստեղծում է մեկուսացված շերտ, որտեղ կոնտեյների յուրաքանչյուր կողմն աշխատում է իր սեփական անվանատարածքում և չունի մուտք դեպի արտաքին համակարգ:

Որոշ անունների տարածքների ցանկ, որոնք օգտագործում է docker-ը.

  • pid: մեկուսացնել գործընթացը;
  • ցանց: ցանցային միջերեսների կառավարման համար;
  • ipc: IPC ռեսուրսները կառավարելու համար: (ICP: InterProccess Communication);
  • mnt: կառավարել լեռան կետերը;
  • UTC: մեկուսացնել միջուկը և վերահսկել տարբերակների ստեղծումը (UTC: Unix timesharing system):

Վերահսկիչ խմբեր

Docker-ը նույնպես օգտագործում է տեխնոլոգիա cgroups կամ վերահսկիչ խմբեր: Հավելվածը առանձին գործարկելու բանալին հավելվածին միայն այն ռեսուրսներով ապահովելն է, որը դուք ցանկանում եք տրամադրել: Սա ապահովում է, որ բեռնարկղերը լավ հարեւաններ կլինեն: Վերահսկիչ խմբերը թույլ են տալիս կիսել հասանելի ապարատային ռեսուրսները և, անհրաժեշտության դեպքում, սահմանել սահմանափակումներ և սահմանափակումներ: Օրինակ, սահմանափակեք կոնտեյների հիշողության հնարավոր քանակությունը:

Միության ֆայլային համակարգ

Union File Sysem-ը կամ UnionFS-ը ֆայլային համակարգ է, որն աշխատում է՝ ստեղծելով շերտեր՝ դարձնելով այն շատ թեթև և արագ: Docker-ն օգտագործում է UnionFS՝ ստեղծելու այն բլոկները, որոնցից կառուցված է կոնտեյները: Docker-ը կարող է օգտագործել UnionFS-ի մի քանի տարբերակներ, այդ թվում՝ AUFS, btrfs, vfs և DeviceMapper:

Կոնտեյների ձևաչափեր

Docker-ը միավորում է այս բաղադրիչները փաթաթման մեջ, որը մենք անվանում ենք կոնտեյների ձևաչափ: Կանխադրված ձևաչափը կոչվում է libcontainer. Docker-ը նաև աջակցում է ավանդական կոնտեյների ձևաչափին Linux-ում, օգտագործելով LXC. Ապագայում Docker-ը կարող է աջակցել այլ կոնտեյների ձևաչափերին: Օրինակ՝ ինտեգրվելով BSD Jails-ի կամ Solaris Zones-ի հետ:

Source: www.habr.com

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