VM ё Docker?

Чӣ тавр фаҳмидан мумкин аст, ки ба шумо Docker лозим аст, на VM? Шумо бояд муайян кунед, ки маҳз чиро ҷудо кардан мехоҳед. Агар шумо хоҳед, ки системаро бо захираҳои кафолатнок ва сахтафзори виртуалӣ ҷудо кунед, он гоҳ интихоб бояд ба VM афтад. Агар ба шумо лозим аст, ки замимаҳои иҷрошавандаро ҳамчун равандҳои алоҳидаи система ҷудо кунед, ба шумо Docker лозим мешавад.

Пас, фарқияти байни контейнерҳои Docker ва VM чист?

Мошини виртуалӣ (VM) компютери маҷозӣ бо тамоми дастгоҳҳои виртуалӣ ва диски сахти маҷозӣ мебошад, ки дар он ОС-и нави мустақил дар якҷоягӣ бо драйверҳои дастгоҳи виртуалӣ, идоракунии хотира ва ҷузъҳои дигар насб шудааст. Яъне, мо абстраксияи сахтафзори физикиро мегирем, ки ба шумо имкон медиҳад, ки дар як компютер бисёр компютерҳои виртуалиро идора кунед.
VM насбшуда метавонад фазои дискро бо роҳҳои гуногун ишғол кунад:

  • фазои собит диски сахт, ки имкон медиҳад дастрасии тезтар ба диски сахти виртуалӣ ва пешгирӣ аз тақсимоти файл;
  • тақсимоти хотираи динамикӣ. Ҳангоми насб кардани замимаҳои иловагӣ, хотира барои онҳо ба таври динамикӣ ҷудо карда мешавад, то он даме ки он ба ҳадди ниҳоии барои он ҷудошуда расад.

Чӣ қадаре ки мошинҳои виртуалӣ дар сервер зиёдтар бошанд, онҳо ҳамон қадар фазои бештарро ишғол мекунанд ва инчунин дастгирии доимии муҳити барои кор кардани замимаи шумо лозимиро талаб мекунанд.

Доктор нармафзорест барои сохтани замимаҳо дар асоси контейнерҳо. Контейнерҳо ва мошинҳои виртуалӣ манфиатҳои якхела доранд, аммо ба таври дигар кор мекунанд. Контейнерхо кам чойро ишгол мекунанд, зеро зиёда аз захираҳои муштараки системаи мизбон нисбат ба VM аз ҳад зиёд истифода баред, зеро бар хилофи VM, виртуализатсияро дар сатҳи OS таъмин мекунад, на сахтафзор. Ин равиш фазои камтари хотира, густариши тезтар ва миқёси осонро таъмин мекунад.

Контейнер механизми муассиртари инкапсулизатсияи барномаҳоро тавассути таъмини интерфейсҳои зарурӣ ба системаи ҳост таъмин мекунад. Ин хусусият ба контейнерҳо имкон медиҳад, ки ядрои системаро мубодила кунанд, ки дар он ҳар як контейнер ҳамчун як раванди алоҳидаи ОС асосӣ кор мекунад, ки дорои маҷмӯи худии минтақаҳои хотира (фазои суроғаи виртуалии худ) мебошад. Азбаски фазои суроғаи виртуалии ҳар як контейнер аз они худ аст, маълумоти ба минтақаҳои гуногуни хотира тааллуқдоштаро тағир додан мумкин нест.
OS модарӣ барои Docker Linux мебошад (Docker инчунин метавонад дар Windows ва MacOS истифода шавад), он бартариҳои асосии худро истифода мебарад, ки ба он имкон медиҳад ядрои тақсимшударо ташкил кунад. Ифтитоҳи контейнерҳои Docker дар Windows дар дохили мошини виртуалии Linux сурат мегирад, зеро контейнерҳо OS-и системаи ҳостро мубодила мекунанд ва ОС-и асосӣ барои онҳо Linux мебошад.

Контейнер - он чӣ гуна кор мекунад?

Контейнер абстраксия дар сатҳи барнома мебошад, ки рамз ва вобастагиҳоро муттаҳид мекунад. Контейнерҳо ҳамеша аз тасвирҳо сохта мешаванд, илова кардани қабати болоии навишташаванда ва параметрҳои гуногунро оғоз мекунанд. Азбаски контейнер дорои қабати навиштани худро дорад ва ҳама тағйирот дар он қабат нигоҳ дошта мешаванд, контейнерҳои сершумор метавонанд дастрасиро ба як тасвири асосӣ мубодила кунанд.

Ҳар як контейнерро тавассути файли лоиҳаи docker-compose, ки дар ҳалли асосӣ, docker-compose.yml дохил карда шудааст, танзим кардан мумкин аст. Дар он ҷо шумо метавонед параметрҳои гуногунро ба монанди номи контейнер, портҳо, идентификаторҳо, маҳдудиятҳои захираҳо, вобастагӣ байни контейнерҳои дигар таъин кунед. Агар шумо дар танзимот номи контейнерро муайян накунед, он гоҳ Docker ҳар дафъа як контейнери нав эҷод мекунад ва ба он ба таври тасодуфӣ ном таъин мекунад.

Вақте ки контейнер аз тасвир оғоз мешавад, Docker системаи файлии хондан/навиштро дар болои ҳама қабатҳои дар зер ҷойгир мекунад. Дар ин ҷо ҳамаи равандҳое, ки мо мехоҳем контейнери Docker-и мо иҷро шаванд, иҷро мешаванд.

Вақте ки Docker бори аввал контейнерро оғоз мекунад, қабати ибтидоии хондан/навишт холӣ аст. Вақте ки тағирот ба амал меояд, онҳо ба он қабат татбиқ карда мешаванд; масалан, агар шумо хоҳед, ки файлро тағир диҳед, он файл аз қабати танҳо барои хондан дар зер ба қабати хондан-навиштан нусхабардорӣ карда мешавад.
Варианти танҳо барои хондани файл то ҳол вуҷуд хоҳад дошт, аммо ҳоло дар зери нусха пинҳон аст. Ҳаҷмҳо барои нигоҳ доштани маълумот новобаста аз давраи ҳаёти контейнер истифода мешаванд. Ҳаҷмҳо ҳангоми сохтани контейнер оғоз карда мешаванд.

Тасвир бо контейнер чӣ гуна алоқаманд аст?

Image - унсури асосӣ барои ҳар як контейнер. Тасвир аз файли Dockerfile, ки ба лоиҳа илова карда шудааст, сохта шудааст ва маҷмӯи системаҳои файлӣ (қабатҳо) аст, ки дар болои ҳамдигар ҷойгир шудаанд ва якҷоя гурӯҳбандӣ шудаанд, ки танҳо барои хондан дастрасанд; шумораи максималии қабатҳо 127 аст.

Дар маркази ҳар як тасвир тасвири асосӣ ҷойгир аст, ки онро фармони FROM - нуқтаи вуруд ҳангоми тавлиди тасвири Dockerfile муайян мекунад. Ҳар як қабат як қабати танҳо хондан аст ва бо як фармон, ки системаи файлиро, ки дар Dockerfile навишта шудааст, тағир медиҳад, муаррифӣ мешавад.
Барои муттаҳид кардани ин қабатҳо дар як тасвир, Docker системаи файлии бисёрқабатаи Advanced Unionро истифода мебарад (AuFS дар болои UnionFS сохта шудааст), имкон медиҳад файлҳо ва директорияҳои гуногунро аз қабатҳои файлии гуногун шаффоф ба ҳам мепайвандад ва системаи файлии алоқамандро эҷод кунад.

Қабатҳо дорои метамаълумотҳое мебошанд, ки ба шумо имкон медиҳанд, ки маълумоти алоқамандро дар бораи ҳар як қабат дар вақти кор ва вақти сохтмон нигоҳ доред. Ҳар як қабат дорои истинод ба қабати оянда аст, агар қабат пайванд надошта бошад, пас ин қабати болоии тасвир аст.

Dockerfile метавонад чунин фармонҳоро дар бар гирад:

  • АЗ - нуқтаи воридшавӣ дар ташаккули тасвир;
  • МИНТЕЙНЕР – номи соҳиби тасвир;
  • RUN - иҷрои фармон ҳангоми васлкунии тасвир;
  • ADD - нусхабардории файли ҳост ба тасвири нав, агар шумо файли URL-ро муайян кунед, Docker онро ба директорияи муайяншуда зеркашӣ мекунад;
  • ENV - тағирёбандаҳои муҳити зист;
  • CMD - эҷоди контейнери навро дар асоси тасвир оғоз мекунад;
  • ENTRYPOINT - Фармон ҳангоми оғоз кардани контейнер иҷро карда мешавад.
  • WORKDIR директорияи корӣ барои иҷрои фармони CMD мебошад.
  • Истифодабаранда - UID-ро барои контейнере, ки аз тасвир сохта шудааст, муқаррар мекунад.
  • VOLUME - Феҳристи мизбонро ба контейнер васл мекунад.
  • EXPOSE маҷмӯи портҳоест, ки дар контейнер гӯш карда мешаванд.

UnionFS чӣ гуна кор мекунад?

UnionFS — системаи файлии хидматрасонии стек (FS) барои Linux ва FreeBSD. Ин ФС механизми нусхабардорӣ дар навиштанро (Нусхабардорӣ дар навиштан, COW) амалӣ мекунад. Воҳиди кории UnionFS қабат аст, ҳар як қабат бояд ҳамчун системаи файлии алоҳидаи мукаммал бо иерархияи директория аз худи реша баррасӣ карда шавад. UnionFS барои дигар системаҳои файлӣ васлкунии иттифоқро эҷод мекунад ва ба шумо имкон медиҳад, ки файлҳо ва директорияҳоро аз системаҳои файлии гуногун (шоҳидаҳо номида мешавад) ба як системаи файлии ягонаи алоқаманд ба таври шаффоф ба корбар муттаҳид кунед.

Мундариҷаи директорияҳои дорои роҳҳо якхела дар як директорияи якҷояшуда (дар як фазои ном) системаи файлии натиҷавӣ намоиш дода мешаванд.

UnionFS қабатҳоро дар асоси принсипҳои зерин муттаҳид мекунад:

  • яке аз қабатҳо ба қабати болоӣ, қабатҳои дуюм ва баъдӣ ба қабатҳои поёнӣ табдил меёбанд;
  • Объектҳои қабат барои корбар “аз боло то поён” дастрасанд, яъне. агар объекти дархостшуда дар қабати "болоӣ" бошад, новобаста аз мавҷудияти объекти бо ҳамон ном дар қабати "поён" баргардонида мешавад; дар акси ҳол, объекти қабати "поён" баргардонида мешавад; агар объекти дархостшуда на дар он ҷо бошад ва на онҷо, хатогии "Чунин файл ё директория нест" бармегардад;
  • қабати корӣ "боло" аст, яъне тамоми амалҳои корбар барои тағир додани маълумот танҳо дар қабати болоӣ бидуни таъсир ба мундариҷаи қабатҳои сатҳи поёнӣ инъикос карда мешаванд.

Docker технологияи маъмултарин барои истифодаи контейнерҳо дар кори барномаҳо мебошад. Он дар ин соҳа стандарт шудааст, ки дар асоси гурӯҳҳо ва фазоҳои номҳо, ки ядрои Linux пешниҳод кардааст, асос ёфтааст.

Docker ба мо имкон медиҳад, ки барномаҳоро зуд ҷойгир кунем ва системаи файлиро бо роҳи мубодилаи ядрои ОС дар байни ҳама контейнерҳо, ки ҳамчун равандҳои алоҳидаи ОС кор мекунанд, истифода барем.

Манбаъ: will.com

Илова Эзоҳ