Docker-ի մասին նյութերի շարքի թարգմանության այսօրվա հատվածում կխոսենք տվյալների հետ աշխատելու մասին։ Մասնավորապես, Docker հատորների մասին. Այս նյութերում մենք անընդհատ համեմատում էինք Docker ծրագրավորման մեխանիզմները տարբեր ուտելի անալոգիաների հետ: Մենք այստեղ չենք շեղվելու այս ավանդույթից։ Թող Docker-ի տվյալները լինեն համեմունքներ: Աշխարհում շատ համեմունքներ կան, և Docker-ը տվյալների հետ աշխատելու բազմաթիվ եղանակներ ունի:
Խնդրում ենք նկատի ունենալ, որ այս նյութը պատրաստվել է Docker շարժիչի 18.09.1 տարբերակով և API տարբերակով 1.39.
Docker-ում տվյալները կարող են պահվել կա՛մ ժամանակավոր, կա՛մ մշտապես: Սկսենք ժամանակավոր տվյալներից:
Տվյալների ժամանակավոր պահպանում
Docker կոնտեյներներում ժամանակավոր տվյալները կառավարելու երկու եղանակ կա.
Լռելյայնորեն, կոնտեյներով աշխատող հավելվածի կողմից ստեղծված ֆայլերը պահվում են գրավոր կոնտեյների շերտում: Որպեսզի այս մեխանիզմը աշխատի, հատուկ ոչինչ կարգավորելու կարիք չկա: Ստացվում է էժան և ուրախ: Հավելվածը պարզապես պետք է պահպանի տվյալները և շարունակի անել իր գործը: Այնուամենայնիվ, այն բանից հետո, երբ բեռնարկղը դադարում է գոյություն ունենալ, նման պարզ եղանակով պահված տվյալները նույնպես կանհետանան։
Docker-ում ֆայլերի ժամանակավոր պահպանումը ևս մեկ լուծում է, որը հարմար է այն դեպքերի համար, երբ պահանջվում է կատարողականի ավելի բարձր մակարդակ՝ համեմատած այն բանի հետ, ինչ հնարավոր է ստանդարտ ժամանակավոր տվյալների պահպանման մեխանիզմի միջոցով: Եթե ձեզ հարկավոր չէ, որ ձեր տվյալները պահվեն ավելի երկար, քան կոնտեյները գոյություն ունի, կարող եք միանալ tmpfs կոնտեյների հետ՝ տեղեկատվության ժամանակավոր պահեստ, որն օգտագործում է հյուրընկալողի RAM-ը: Սա կարագացնի տվյալների գրման և ընթերցման գործողությունների կատարումը:
Հաճախ է պատահում, որ տվյալները պետք է պահվեն նույնիսկ այն բանից հետո, երբ բեռնարկղը դադարում է գոյություն ունենալ: Դա անելու համար մեզ անհրաժեշտ են տվյալների պահպանման մշտական մեխանիզմներ:
Մշտական տվյալների պահպանում
Տվյալների ծառայության ժամկետն ավելի երկար դարձնելու երկու եղանակ կա, քան կոնտեյների ժամկետը: Ճանապարհներից մեկը bind mount տեխնոլոգիայի օգտագործումն է: Այս մոտեցմամբ դուք կարող եք տեղադրել, օրինակ, իրական թղթապանակ կոնտեյների մեջ: Docker-ից դուրս գործընթացները նույնպես կկարողանան աշխատել նման թղթապանակում պահվող տվյալների հետ: Այդպես նայել tmpfs mount and bind mount տեխնոլոգիա:
tmpfs-ի տեղադրում և ամրացում
Bind mount տեխնոլոգիայի օգտագործման թերություններն այն են, որ դրա օգտագործումը բարդացնում է տվյալների կրկնօրինակումը, տվյալների միգրացիան, տվյալների փոխանակումը մի քանի բեռնարկղերի միջև: Շատ ավելի լավ է օգտագործել Docker ծավալները տվյալների մշտական պահպանման համար:
Volumes Docker
Հատորը ֆայլային համակարգ է, որը տեղակայված է հյուրընկալող մեքենայի վրա՝ բեռնարկղերից դուրս: Ծավալները ստեղծվում և կառավարվում են Docker-ի կողմից: Ահա Docker ծավալների հիմնական հատկությունները.
Դրանք տեղեկատվության մշտական պահպանման միջոց են։
Նրանք անկախ են և առանձնացված են տարաներից։
Նրանք կարող են կիսվել տարբեր բեռնարկղերի միջև:
Դրանք թույլ են տալիս կազմակերպել տվյալների արդյունավետ ընթերցում և գրառում:
Ծավալները կարող են տեղադրվել հեռավոր ամպային մատակարարի ռեսուրսների վրա:
Նրանք կարող են կոդավորված լինել:
Նրանց կարելի է անուններ տալ:
Բեռնարկղը կարող է կազմակերպել ծավալի նախնական համալրումը տվյալների հետ:
Նրանք հարմար են փորձարկման համար։
Ինչպես տեսնում եք, Docker հատորները զարմանալի հատկություններ ունեն: Եկեք խոսենք այն մասին, թե ինչպես ստեղծել դրանք:
Ծավալների ստեղծում
Ծավալները կարող են ստեղծվել Docker կամ API հարցումների միջոցով:
Ահա մի հրահանգ Dockerfile-ում, որը թույլ է տալիս ծավալ ստեղծել կոնտեյներ սկսելիս:
VOLUME /my_volume
Նմանատիպ հրահանգ օգտագործելիս Docker-ը, կոնտեյները ստեղծելուց հետո, կստեղծի ծավալ, որը պարունակում է տվյալներ, որոնք արդեն գոյություն ունեն նշված վայրում: Նկատի ունեցեք, որ եթե դուք ծավալ եք ստեղծում Dockerfile-ի միջոցով, դա ձեզ չի ազատում ծավալի ամրացման կետը նշելու անհրաժեշտությունից:
Կարող եք նաև ծավալներ ստեղծել Dockerfile-ում՝ օգտագործելով JSON ձևաչափը:
Բացի այդ, ծավալները կարող են ստեղծվել հրամանի տող գործիքների միջոցով, մինչ բեռնարկղը աշխատում է:
Հրամանի տողից ծավալների հետ աշխատելը
▍Ծավալի ստեղծում
Կարող եք ինքնուրույն ծավալ ստեղծել հետևյալ հրամանով.
docker volume create —-name my_volume
▍Գտեք տեղեկություններ ծավալների մասին
Docker ծավալների ցանկը դիտելու համար օգտագործեք հետևյալ հրամանը.
docker volume ls
Դուք կարող եք ուսումնասիրել որոշակի ծավալ, ինչպես սա.
docker volume inspect my_volume
▍ Հատորի ջնջում
Դուք կարող եք ջնջել հետևյալ ծավալը.
docker volume rm my_volume
Կոնտեյներների կողմից չօգտագործվող բոլոր ծավալները ջնջելու համար կարող եք դիմել հետևյալ հրամանին.
docker volume prune
Նախքան հատորները ջնջելը, Docker-ը ձեզ կխնդրի հաստատել այս գործողությունը:
Եթե հատորը կապված է կոնտեյների հետ, այդ ծավալը չի կարող ջնջվել, քանի դեռ չի ջնջվել համապատասխան կոնտեյները: Միևնույն ժամանակ, նույնիսկ եթե բեռնարկղը հանվում է, Docker-ը միշտ չէ, որ հասկանում է դա: Եթե դա տեղի ունենա, կարող եք օգտագործել հետևյալ հրամանը.
docker system prune
Այն նախատեսված է Docker ռեսուրսները մաքրելու համար: Այս հրամանը կատարելուց հետո դուք պետք է կարողանաք ջնջել այն հատորները, որոնց կարգավիճակը նախկինում սխալ էր:
--mount և --volume դրոշները
Ծավալների հետ աշխատելու համար, երբ զանգում եք հրամանը docker, դուք հաճախ կարիք կունենաք օգտագործել դրոշներ: Օրինակ, կոնտեյների ստեղծման ժամանակ ծավալ ստեղծելու համար կարող եք օգտագործել այս կառուցվածքը.
docker container run --mount source=my_volume, target=/container/path/for/volume my_image
Հնում (մինչև 2017 թվականը) դրոշը տարածված էր --volume. Սկզբում այս դրոշը (այն կարող է օգտագործվել նաև կրճատ ձևով, այնուհետև այն նման է -v) օգտագործվել է ինքնուրույն բեռնարկղերի համար, իսկ դրոշը --mount - Docker Swarm միջավայրում: Այնուամենայնիվ, Docker 17.06-ի դրությամբ դրոշը --mount կարող է օգտագործվել ցանկացած սցենարով:
Հարկ է նշել, որ դրոշն օգտագործելիս --mount լրացուցիչ տվյալների քանակը, որոնք պետք է նշվեն հրամանում, ավելանում է, բայց մի քանի պատճառներով ավելի լավ է օգտագործել այս կոնկրետ դրոշը, և ոչ --volume. Դրոշ --mount միակ մեխանիզմն է, որը թույլ է տալիս աշխատել ծառայությունների հետ կամ նշել ձայնի վարորդի տարբերակները: Բացի այդ, այս դրոշի հետ ավելի հեշտ է աշխատել:
Docker տվյալների մանիպուլյացիայի հրամանների առկա օրինակներում դուք կարող եք տեսնել դրոշի օգտագործման բազմաթիվ օրինակներ -v. Երբ փորձում եք հարմարեցնել այս հրամանները ձեզ համար, հիշեք, որ դրոշները --mount и --volume օգտագործել տարբեր պարամետրերի ձևաչափեր: Այսինքն, դուք չեք կարող պարզապես փոխարինել -v մասին --mount և ձեռք բերեք աշխատանքային թիմ:
Հիմնական տարբերությունը --mount и --volume դա դրոշն օգտագործելիս է --volume բոլոր պարամետրերը հավաքվում են միասին մեկ դաշտում և օգտագործելիս --mount պարամետրերը առանձնացված են.
հետ աշխատելիս --mount պարամետրերը ներկայացված են որպես բանալի-արժեք զույգեր, մասնավորապես, կարծես key=value. Այս զույգերը բաժանվում են ստորակետերով։ Ահա սովորաբար օգտագործվող տարբերակները --mount:
type - լեռան տեսակը. Համապատասխան բանալի արժեքը կարող է լինել պարտադիր, ծավալ կամ tmpfs. Այստեղ խոսքը ծավալների մասին է, այսինքն՝ մեզ հետաքրքրում է արժեքը volume.
source - լեռան աղբյուրը: Անվանված հատորների համար սա հատորի անունն է։ Անանուն ծավալների համար այս բանալին նշված չէ: Այն կարող է կրճատվել մինչև src.
destination - այն ուղին, որով ֆայլը կամ թղթապանակը տեղադրված է կոնտեյներով: Այս բանալին կարող է կրճատվել dst կամ target.
readonly - տեղադրում է նախատեսված ծավալը միայն կարդալու համար. Այս բանալիի օգտագործումը կամընտիր է, և դրան ոչ մի արժեք չի վերագրվում:
Ահա օգտագործման օրինակ --mount բազմաթիվ տարբերակներով.
docker run --mount type=volume,source=volume_name,destination=/path/in/container,readonly my_image
Արդյունքները
Ահա մի քանի օգտակար հրամաններ, որոնք կարող եք օգտագործել Docker ծավալների հետ աշխատելիս.
docker volume create
docker volume ls
docker volume inspect
docker volume rm
docker volume prune
Ահա հաճախ օգտագործվող տարբերակների ցանկը --mount, կիրառելի է ձևի հրամանում docker run --mount my_options my_image:
type=volume
source=volume_name
destination=/path/in/container
readonly
Այժմ, երբ մենք ավարտեցինք Docker-ի այս շարքը, ժամանակն է մի քանի խոսք ասելու այն մասին, թե որտեղ կարող են գնալ Docker սովորողները: Այստեղ հիանալի լավ հոդված Docker-ի մասին: Այստեղ Docker-ի մասին գիրք (այս գիրքը գնելիս փորձեք ստանալ դրա ամենավերջին հրատարակությունը): Այստեղ ևս մեկ գիրք նրանց համար, ովքեր կարծում են, որ պրակտիկան տեխնոլոգիա սովորելու լավագույն միջոցն է:
Հարգելի ընթերցողներ: Docker-ի ի՞նչ նյութեր խորհուրդ կտաք սովորել սկսնակներին: