VM же Docker?

Сизге VM эмес, Docker керек экенин кантип түшүнсө болот? Сиз обочолонгуңуз келген нерсени так аныкташыңыз керек. Эгер сиз тутумду кепилденген ресурстар жана виртуалдык жабдыктар менен изоляциялоону кааласаңыз, анда тандоо VMге туура келиши керек. Эгер сиз иштеп жаткан тиркемелерди өзүнчө система процесстери катары бөлүп алышыңыз керек болсо, сизге Docker керек болот.

Ошентип, Docker контейнерлери менен VMлердин ортосунда кандай айырма бар?

Виртуалдык машина (VM) бардык виртуалдык түзүлүштөрү жана виртуалдык катуу дисктери бар виртуалдык компьютер, анда виртуалдык түзүлүш драйверлери, эс тутумду башкаруу жана башка компоненттер менен бирге жаңы көз карандысыз ОС орнотулган. Башкача айтканда, биз бир компьютерде көптөгөн виртуалдык компьютерлерди иштетүүгө мүмкүндүк берген физикалык жабдыктын абстракциясын алабыз.
Орнотулган VM ар кандай жолдор менен диск мейкиндигин ээлей алат:

  • виртуалдык катуу дискке тезирээк кирүүгө мүмкүндүк берүүчү жана файлдын фрагменттелүүсүн болтурбай турган стационардык катуу диск мейкиндиги;
  • динамикалык эстутум бөлүштүрүү. Кошумча тиркемелерди орнотуп жатканда, эстутум аларга бөлүнгөн максималдуу суммага жеткенге чейин динамикалык түрдө бөлүнөт.

Серверде виртуалдык машиналар канчалык көп болсо, алар ошончолук көп орун ээлейт, ошондой эле тиркемеңиздин иштеши үчүн зарыл болгон чөйрөнүн туруктуу колдоосун талап кылат.

ютуб контейнерлердин негизинде тиркемелерди куруу үчүн программа болуп саналат. Контейнерлер жана виртуалдык машиналар окшош артыкчылыктарга ээ, бирок башкача иштешет. Контейнерлер аз орун ээлейт, анткени VMге караганда хост тутумунун жалпы ресурстарын ашыкча колдонуу, анткени VMден айырмаланып, аппараттык эмес, OS деңгээлинде виртуалдаштырууну камсыз кылат. Бул ыкма эстутумдун азыраак изи, тезирээк жайылтууну жана жеңил масштабды камсыз кылат.

Контейнер хост тутумуна керектүү интерфейстерди камсыз кылуу аркылуу тиркемелерди капсулдаштыруунун натыйжалуу механизмин камсыз кылат. Бул өзгөчөлүк контейнерлерге системанын өзөгүн бөлүшүүгө мүмкүндүк берет, мында контейнерлердин ар бири негизги ОСтун өзүнчө процесси катары иштейт, анын эстутум аймактарынын (өзүнүн виртуалдык дарек мейкиндиги) бар. Ар бир контейнердин виртуалдык дарек мейкиндиги өзүнө таандык болгондуктан, ар кандай эстутум аймактарына тиешелүү маалыматтарды өзгөртүүгө болбойт.
Docker үчүн түпнуска OS Linux болуп саналат (Docker Windows жана MacOSдо да колдонулушу мүмкүн), ал өзүнүн негизги артыкчылыктарын колдонот, бул ага бөлүнгөн ядрону уюштурууга мүмкүндүк берет. Windowsдо Docker контейнерлерин ишке киргизүү Linux виртуалдык машинасынын ичинде ишке ашат. контейнерлер хост системасынын OS менен бөлүшөт жана алар үчүн негизги ОС Linux болуп саналат.

Контейнер - бул кантип иштейт?

контейнер код менен көз карандылыкты бириктирген колдонмо деңгээлиндеги абстракция. Контейнерлер ар дайым сүрөттөрдөн түзүлүп, жазыла турган үстүнкү катмарды кошуп, ар кандай параметрлерди инициализациялайт. Контейнердин өзүнүн жазуу катмары бар жана бардык өзгөртүүлөр ошол катмарда сакталгандыктан, бир нече контейнер бир эле башкы сүрөткө кирүү мүмкүнчүлүгүн бөлүшө алат.

Ар бир контейнер негизги чечимге киргизилген docker-compose долбоорундагы файл аркылуу конфигурацияланышы мүмкүн, docker-compose.yml. Ал жерден сиз контейнердин аталышы, порттор, идентификаторлор, ресурс чектөөлөрү, башка контейнерлердин ортосундагы көз карандылык сыяктуу ар кандай параметрлерди орното аласыз. Орнотууларда контейнердин атын көрсөтпөсөңүз, анда Docker жаңы контейнерди ар бир жолу түзүп, ага туш келди ат ыйгарат.

Контейнер сүрөттөн башталганда, Docker окуу/жазуу файл системасын төмөнкү катмарлардын үстүнө орнотот. Бул жерде Docker контейнерибиздин иштешин каалаган бардык процесстер иштейт.

Docker контейнерди биринчи жолу баштаганда, баштапкы окуу/жазуу катмары бош. Өзгөрүүлөр болгондо, алар ошол катмарга колдонулат; мисалы, сиз файлды өзгөрткүңүз келсе, ал файл төмөнкү окуу үчүн гана катмардан окуу-жазуу катмарына көчүрүлөт.
Файлдын окуу үчүн гана версиясы дагы деле бар, бирок азыр көчүрмөнүн астында жашырылган. Көлөмдөр контейнердин жашоо циклине карабастан маалыматтарды сактоо үчүн колдонулат. Көлөмдөр контейнер түзүлгөндө инициализацияланат.

Сүрөт контейнер менен кандай байланышта?

сүрөт - ар бир контейнер үчүн негизги элемент. Сүрөт долбоорго кошулган Dockerfile файлынан түзүлгөн жана бири-биринин үстүнө катмарланган жана чогуу топтоштурулган, окуу үчүн гана жеткиликтүү болгон файл тутумдарынын (катмарларынын) жыйындысы; катмарлардын максималдуу саны - 127.

Ар бир сүрөттөлүштүн жүрөгүндө FROM буйругу менен аныкталган негизги сүрөт турат - Dockerfile сүрөтүн түзүүдө кирүү чекити. Ар бир катмар окуу үчүн гана катмар болуп саналат жана Докер файлында жазылган файл тутумун өзгөрткөн бир буйрук менен көрсөтүлөт.
Бул катмарларды бир сүрөттөлүшкө айкалыштыруу үчүн Docker Advanced көп катмарлуу Биримдик файл тутумун колдонот (AuFS UnionFSдин үстүнө курулган), ар кандай файл катмарларынын ар кандай файлдарына жана каталогдоруна тунук түрдө бири-бирине дал келип, байланышкан файл системасын түзүүгө мүмкүндүк берет.

Катмарлар ар бир катмар жөнүндө тиешелүү маалыматты аткаруу жана куруу убагында сактоого мүмкүндүк берген метаберилиштерди камтыйт. Ар бир катмарда кийинки катмарга шилтеме бар, эгерде катмарда шилтеме жок болсо, анда бул сүрөттөгү эң жогорку катмар.

Dockerfile төмөнкүдөй буйруктарды камтышы мүмкүн:

  • FROM - сүрөттөлүштү түзүүдөгү кирүү чекити;
  • МИНТЕЙНЕР – сүрөт ээсинин аты-жөнү;
  • RUN - сүрөттү чогултуу учурунда буйруктун аткарылышы;
  • ADD - хост файлын жаңы сүрөткө көчүрүү, эгер сиз URL файлын көрсөтсөңүз, Docker аны көрсөтүлгөн каталогго жүктөп алат;
  • ENV - чөйрө өзгөрмөлөрү;
  • CMD - сүрөттүн негизинде жаңы контейнер түзүүнү баштайт;
  • ENTRYPOINT - Контейнер башталганда буйрук аткарылат.
  • WORKDIR - CMD буйругун аткаруу үчүн жумушчу каталог.
  • USER - Сүрөттөн түзүлгөн контейнер үчүн UID коет.
  • VOLUME - Хост каталогун контейнерге орнотот.
  • EXPOSE – контейнерде угулган порттордун жыйындысы.

UnionFS кантип иштейт?

UnionFS — Linux жана FreeBSD үчүн кызматтык стек файл системасы (FS). Бул ФС жазууга көчүрүү (Copy-On-Write, COW) механизмин ишке ашырат. UnionFSтин жумушчу бирдиги катмар болуп саналат, ар бир катмар тамырдын өзүнөн каталогдук иерархиясы бар өзүнчө толук кандуу файл системасы катары каралышы керек. UnionFS башка файл тутумдары үчүн союздук монтажды түзөт жана ар кандай файл тутумдарынан (филиалдар деп аталган) файлдарды жана каталогдорду колдонуучуга ачык-айкын, бир шилтемеленген файл системасына бириктирүүгө мүмкүндүк берет.

Ошол эле жолдору бар каталогдордун мазмуну пайда болгон файл тутумунун бир бириктирилген каталогунда (бир эле аттар мейкиндигинде) чогуу көрсөтүлөт.

UnionFS төмөнкү принциптердин негизинде катмарларды бириктирет:

  • катмарлардын бири жогорку деңгээлдеги катмарга, экинчи жана андан кийинки катмарлар төмөнкү деңгээлдеги катмарга айланат;
  • катмар объекттери колдонуучуга "жогорудан ылдыйга чейин", б.а. эгерде суралып жаткан объект "жогорку" катмарда болсо, "төмөнкү" катмарда ошол эле аталыштагы объекттин бар экендигине карабастан, ал кайтарылат; антпесе, "төмөнкү" катмар объекти кайтарылат; эгерде суралган объект ал жерде да, ал жерде да жок болсо, "Мындай файл же каталог жок" катасы кайтарылат;
  • жумушчу катмар "жогорку" болуп саналат, башкача айтканда, маалыматтарды өзгөртүү боюнча колдонуучунун бардык аракеттери төмөнкү деңгээлдеги катмарлардын мазмунуна таасирин тийгизбестен, жогорку деңгээлдеги катмарда гана чагылдырылат.

Docker - колдонмо иштеринде контейнерлерди колдонуунун эң кеңири таралган технологиясы. Бул Linux ядросу тарабынан берилген топторго жана аттар мейкиндигине негизделип, бул чөйрөдө стандарт болуп калды.

Докер бизге OS өзөгүн өзүнчө OS процесстери катары иштетип, бардык контейнерлер арасында бөлүшүү аркылуу тиркемелерди тез жайгаштырууга жана файл тутумун мыкты пайдаланууга мүмкүндүк берет.

Source: www.habr.com

Комментарий кошуу