Ի՞նչ է Docker-ը։ Կոնտեյներները ոչ ծրագրավորողների համար բացատրված
Docker-ը գործիք է, որը հավելվածը փաթեթավորում է այն ամենի հետ, ինչ անհրաժեշտ է նրան աշխատելու համար՝ լեզվի ճիշտ տարբերակով, գրադարաններով, համակարգային գործիքներով և կարգավորումներով, մի ստանդարտ միավորի մեջ, որը կոչվում է կոնտեյներ։ Կոնտեյները նույն կերպ է աշխատում մշակողի նոութբուքում, թեստային սերվերում կամ ամպային հոստում, ինչը վերացնում է դասական «բայց իմ մեքենայի վրա աշխատում էր» խնդիրը։ Կոնտեյներ կառուցելու բաղադրատոմսը կարճ տեքստային ֆայլ է, որը կոչվում է Dockerfile։
Ինչու է Docker-ը կարևոր, երբ կառուցում եք AI-ով
Եթե ձեր հավելվածն ունի հետին մաս՝ API Python-ով, Node-ով, C#-ով կամ Java-ով, այն պետք է աշխատի մի տեղ, որտեղ հենց ճիշտ ծրագրային ապահովումն է տեղադրված։ Docker-ը ամենատարածված միջոցն է դա կրկնելի դարձնելու համար։
- Հետին մասի տեղակայում։ Շատ հոստեր, այդ թվում՝ Mythex-ը, հետին մասը տեղակայում են՝ կառուցելով կոնտեյներ Dockerfile-ից։ Mythex-ում «C# Web API» կամ «Java հետին մաս» խնդրելը ձեզ տալիս է հավելվածը և Dockerfile-ը, իսկ Publish-ը կառուցում է image-ը և տեղակայում այն (API հետին մասեր)։
- Հարթակից հեռանալը։ Եթե արտահանում եք AI-ով կառուցված հավելված, Dockerfile-ը շատ ավելի հեշտ է դարձնում այն մեկ այլ հոստում գործարկելը։ Տե՛ս ինչպես արտահանել և ինքնահոստել AI-ով կառուցված հավելվածը։
- Մշակողների հետ աշխատելը։ Ձեր նախագծին միացած մշակողը ամբողջ հավելվածը մեկ-երկու հրամանով կարող է սկսել՝ օրեր չծախսելով ամեն ինչ տեղադրելու վրա։
Ամենօրյա անալոգիա՝ տրանսպորտային կոնտեյներներ
Ստանդարտ տրանսպորտային կոնտեյներներից առաջ բեռը բեռնվում էր կտոր առ կտոր՝ պարկեր, տակառներ, արկղեր, և յուրաքանչյուր նավահանգիստ դա տարբեր կերպ էր վարվում։ Ստանդարտ պողպատե կոնտեյները փոխեց դա․ փաթեթավորեք մեկ անգամ, և ցանկացած նավ, ամբարձիչ, գնացք կամ բեռնատար կարող է այն տեղափոխել՝ առանց հոգալու, թե ինչ կա ներսում։
Docker-ն անում է նույնը ծրագրային ապահովման համար․
- Dockerfile-ը փաթեթավորման ցանկն է և հրահանգները։
- Image-ը կնքված, փաթեթավորված կոնտեյները։
- Աշխատող կոնտեյները այդ արկղն է, որ աշխատում է նավի վրա՝ այստեղ, սերվերի։
- Docker Engine-ը ամբարձիչն ու նավն է․ սերվերի վրա գտնվող ծրագրային ապահովումը, որը գիտի, թե ինչպես գործարկել ցանկացած կոնտեյներ։
Ինչպես է աշխատում Docker-ը
| Մաս | Ինչ է |
|---|---|
| Dockerfile | Տեքստային ֆայլ՝ image-ը կառուցելու քայլ առ քայլ հրահանգներով։ |
| Image | Միայն կարդալու փաթեթ՝ օպերացիոն համակարգի հիմունքներ, գործարկման միջավայր, գրադարաններ և ձեր կոդը։ |
| Կոնտեյներ | Image-ի աշխատող օրինակ, մեկուսացված նույն մեքենայի մյուս հավելվածներից։ |
| Registry | Տեղ՝ image-ները պահելու և կիսելու համար, օրինակ՝ Docker Hub կամ ամպային մատակարարի registry-ը։ |
| Docker Engine | Ֆոնային ծառայություն, որ կառուցում է image-ները և գործարկում կոնտեյներները։ Անվճար և բաց կոդով։ |
| Docker Desktop | Mac, Windows և Linux հավելված, որ փաթեթավորում է միջուկը գրաֆիկական ինտերֆեյսով։ |
Կոնտեյներներ ընդդեմ վիրտուալ մեքենաների․ վիրտուալ մեքենան ձևացնում է, թե ամբողջական առանձին համակարգիչ է սեփական օպերացիոն համակարգով, ուստի ծանր է և դանդաղ է գործարկվում։ Կոնտեյները կիսում է հոստի օպերացիոն համակարգի միջուկը և մեկուսացնում է միայն հավելվածը և նրա ֆայլերը, ուստի սովորաբար վայրկյանների ընթացքում է գործարկվում և շատ ավելի քիչ հիշողություն օգտագործում։ Շատ կոնտեյներներ կարող են կողք կողքի աշխատել մեկ սերվերի վրա։
Օրինակ աշխատանքում․ փոքր Python API
Նշենք, որ ձեր AI կառուցիչը ամրագրման հավելվածի համար ստեղծել է Python FastAPI հետին մաս։ Dockerfile-ը կարող է այսպիսի տեսք ունենալ․
FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 8000
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
Տող առ տող՝
| Տող | Ինչ է անում |
|---|---|
FROM python:3.12-slim | Սկսում է պաշտոնական image-ից, որում արդեն տեղադրված է Python 3.12։ |
WORKDIR /app | Աշխատում է կոնտեյների /app թղթապանակում։ |
COPY requirements.txt . և RUN pip install ... | Պատճենում և տեղադրում է requirements.txt-ում թվարկված գրադարանները։ |
COPY . . | Պատճենում է հավելվածի սեփական կոդը։ |
EXPOSE 8000 | Նշում է, որ հավելվածը լսում է 8000 պորտը։ |
CMD [...] | Հրաման, որ գործարկում է վեբ սերվերը, երբ կոնտեյները աշխատում է։ |
Պարզ խոսքով․ «Սկսիր Python 3.12-ով։ Տեղադրիր requirements.txt-ում թվարկված գրադարանները։ Պատճենիր կոդը։ Գործարկիր վեբ սերվերը 8000 պորտում։»
Մշակողը (կամ հոստինգային հարթակը) ապա գործարկում է երկու հրաման․
docker build -t booking-api .
docker run -p 8000:8000 booking-api
Առաջինը կառուցում է image-ը և անվանում այն booking-api։ Երկրորդը գործարկում է կոնտեյներ և միացնում մեքենայի 8000 պորտը կոնտեյների ներսի 8000 պորտին։ API-ն այժմ աշխատում է այնպես, ինչպես կաշխատի ցանկացած սերվերի վրա, որը ունի Docker։
Նկատեք, թե ինչ չկա image-ի մեջ․ գաղտնաբառեր և API բանալիներ։ Դրանք փոխանցվում են կոնտեյները գործարկելիս՝ որպես միջավայրի փոփոխականներ, այնպես որ նույն image-ը կարող է աշխատել թեստավորման և արտադրության մեջ՝ տարբեր կարգավորումներով։
Հիմնական տերմիններ
| Տերմին | Նշանակություն |
|---|---|
| Կոնտեյներ | Մեկուսացված, աշխատող փաթեթ՝ հավելվածով և նրա կախվածություններով։ |
| Image | Ձևանմուշ, որից գործարկվում է կոնտեյները։ |
| Բազային image (base image) | Dockerfile-ի FROM տողի սկզբնական կետը, օրինակ՝ python:3.12-slim կամ node:22։ |
| Շերտ (layer) | Dockerfile-ի յուրաքանչյուր քայլ ավելացնում է քեշավորված շերտ, ինչը արագացնում է վերակառուցումը։ |
| Պորտերի քարտեզագրում | Հոստի պորտը միացնել կոնտեյների ներսի պորտին։ |
| Հատոր (volume) | Պահեստ, որ գոյատևում է, երբ կոնտեյները փոխարինվում է։ Կոնտեյներները իրենք նետվող են։ |
| Docker Compose | Ֆայլ, որ նկարագրում է մի քանի միասին աշխատող կոնտեյներ, օրինակ՝ API և տվյալների բազա։ |
| Kubernetes | Համակարգ բազմաթիվ կոնտեյներներ բազմաթիվ սերվերների վրա գործարկելու համար։ Փոքր հավելվածների մեծ մասին այն պետք չէ։ |
Տարածված սխալ պատկերացումներ
- «Docker-ը վիրտուալ մեքենա է»։ Այն ավելի թեթև է․ կոնտեյներները կիսում են հոստի միջուկը։
- «Կոնտեյների ներսում պահված տվյալները ապահով են»։ Կոնտեյներները նախատեսված են նետվելու և փոխարինվելու համար։ Այն, ինչ պետք է մնա՝ օգտատիրոջ տվյալները, վերբեռնումները, պետք է լինի տվյալների բազայում, ֆայլերի պահեստում կամ հատորում։
- «Գաղտնիքները Dockerfile-ում դնելը նորմալ է, քանի որ այն մասնավոր է»։ Image-ները կիսվում են և հրվում registry-ներ։ Փոխանցեք գաղտնիքները գործարկման ժամանակ։
- «Docker-ը հավելվածն անվտանգ է դարձնում»։ Մեկուսացումն օգնում է, բայց հնացած ծրագրակազմ թույլ կարգավորումներով աշխատող կոնտեյները դեռ խոցելի է։
- «Յուրաքանչյուր հավելվածին Docker է պետք»։ Ստատիկ կայքը կամ պարզ առջևի մասը սովորաբար հոստվում է որպես սովորական ֆայլեր, առանց կոնտեյների ընդհանրապես։
- «Docker Desktop-ն ամենքի համար անվճար է»։ Միջուկն անվճար է․ Docker Desktop-ը պահանջում է վճարովի բաժանորդագրություն ավելի մեծ ընկերությունների համար, ըստ Docker-ի պայմանների։
Ինչ հարցնել ձեր AI կառուցիչից
- «Այս հավելվածին Dockerfile պե՞տք է։ Եթե այո, բացատրիր յուրաքանչյուր տող պարզ լեզվով։»
- «Օգտագործիր փոքր, պաշտոնական բազային image և ամրացրու լեզվի տարբերակը։»
- «Պահիր գաղտնիքները image-ից դուրս։ Կարդա դրանք միջավայրի փոփոխականներից գործարկման ժամանակ։»
- «Ապահովիր, որ վերբեռնումները և տվյալները պահվում են տվյալների բազայում կամ ֆայլերի պահեստում, ոչ թե կոնտեյների ներսում։»
- «Ավելացրու Docker Compose ֆայլ, որ մշակողը կարողանա տեղում գործարկել առջևի մասը, API-ն և տվյալների բազան մեկ հրամանով։»
- «Ավելացրու առողջության ստուգման վերջնակետ, որ հոստը կարողանա պարզել, արդյոք API-ն աշխատում է։»
Docker-ը Mythex-ում
Mythex-ը օգտագործելու համար Docker տեղադրել կամ գործարկել պետք չէ։ Ձեր նախագիծը աշխատում է մասնավոր ամպային sandbox-ում, և երբ խնդրում եք հետին մաս, որին կոնտեյներ է պետք՝ օրինակ՝ C#, Java կամ սովորական Node կամ Python ծառայություն, Mythex-ը գրում է հավելվածը և Dockerfile-ը, նախադիտում է այն sandbox-ում և տեղակայում է հրապարակման ժամանակ, առանց հոստինգի կարգավորման (ինչպես է ընտրվում տեխնոլոգիան)։ Pro-ում կարող եք արտահանել նախագիծը կամ համաժամացնել այն GitHub-ի հետ և վերցնել Dockerfile-ը ձեզ հետ։ Այն մասին, թե ինչպես են հետին և առջևի մասերը միանում իրար, տե՛ս առջևի և հետին մաս։
Հարցեր
Ի՞նչ է Docker-ը պարզ տերմիններով։
Docker-ը գործիք է, որը հավելվածը փաթեթավորում է այն ամենի հետ, ինչ անհրաժեշտ է նրան աշխատելու համար՝ լեզվի գործարկման միջավայրով, գրադարաններով և կարգավորումներով, ստանդարտ միավորի մեջ, որը կոչվում է կոնտեյներ։ Կոնտեյները նույն կերպ է աշխատում նոութբուքում, թեստային սերվերում կամ ամպային հոստում։
Ո՞րն է տարբերությունը Docker image-ի և կոնտեյների միջև։
Image-ը փաթեթավորված, միայն կարդալու ձևանմուշն է՝ հավելվածը և նրա կախվածությունները, որոնք կառուցվում են Dockerfile-ից։ Կոնտեյները այդ image-ի աշխատող պատճենն է։ Մեկ image-ից կարող եք գործարկել բազմաթիվ կոնտեյներներ։
Արդյո՞ք Docker-ը վիրտուալ մեքենա է։
Ոչ։ Վիրտուալ մեքենան մոդելավորում է ամբողջ համակարգիչը սեփական օպերացիոն համակարգով։ Կոնտեյներները կիսում են հոսթ մեքենայի օպերացիոն համակարգի միջուկը և մեկուսացնում միայն հավելվածը, ուստի ավելի արագ են գործարկվում և ավելի քիչ հիշողություն են օգտագործում։
Արդյո՞ք Docker-ն անվճար է։
Docker Engine-ը՝ միջուկը, որը գործարկում է կոնտեյներները, անվճար է և բաց կոդով։ Docker-ի պայմանների համաձայն՝ 2026 թվականի սեպտեմբերից Docker Desktop-ը անվճար է ոչ առևտրային բաց կոդով նախագծերի և 250-ից պակաս աշխատակից ու տարեկան 10 միլիոն ԱՄՆ դոլարից ցածր եկամուտ ունեցող ընկերությունների համար․ ավելի մեծ ընկերությունները պետք է ունենան վճարովի բաժանորդագրություն։
Պե՞տք է սովորել Docker-ը, որպեսզի AI-ով հավելված կառուցեմ։
Սովորաբար՝ ոչ։ Շատ AI կառուցիչներ կոնտեյներները կառավարում են ձեր փոխարեն։ Օգտակար է իմանալ, թե ինչ է Dockerfile-ը, որպեսզի հասկանաք, թե ինչպես է հետին մասը փաթեթավորված, և որ կարողանաք հավելվածը գործարկել այլ տեղ, եթե այն արտահանեք։