Докерди түшүнүү

Мен веб-долбоорлорду иштеп чыгуу/жеткирүү процессин структуралаштыруу үчүн бир нече айдан бери Dockerди колдонуп жатам. Мен Habrakhabr окурмандарына докер жөнүндө кириш макаланын котормосун сунуштайм - "Докерди түшүнүү".

докер деген эмне?

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

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

Контейнерди виртуалдаштыруу платформасы жана куралдары төмөнкү учурларда пайдалуу болушу мүмкүн:

  • колдонмоңузду (жана сиз колдонгон компоненттерди) докер контейнерлерине таңгактоо;
  • иштеп чыгуу жана сыноо үчүн бул контейнерлерди бөлүштүрүү жана жеткирүү;
  • бул контейнерлерди маалымат борборлоруңузда да, булуттарда да өндүрүш сайттарыңызга жайгаштыруу.

Мен докерди эмне үчүн колдоно алам?

Тиркемелериңизди тез жарыялаңыз

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

Мисалы, иштеп чыгуучуларыңыз локалдык түрдө код жазышат жана иштеп чыгуу стектерин (Docker сүрөттөрүнүн топтому) кесиптештери менен бөлүшүшөт. Алар даяр болгондо, алар кодду жана контейнерлерди сыноо аянтына түртүп, керектүү сыноолорду өткөрүшөт. Сыноо аянтынан алар кодду жана сүрөттөрдү өндүрүшкө жөнөтө алышат.

Оңой жайгаштыруу жана ачуу

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

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

Жогорку жүктөр жана көбүрөөк пайдалуу жүктөр

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

Докердин негизги компоненттери

Docker эки негизги компоненттен турат:

  • Docker: ачык булактуу виртуалдаштыруу платформасы;
  • Docker Hub: Биздин платформа Docker контейнерлерин бөлүштүрүү жана башкаруу үчүн кызмат катары.

Эскертүү! Docker Apache 2.0 лицензиясы боюнча таратылат.

Докер архитектурасы

Docker кардар-сервер архитектурасын колдонот. Docker кардары Docker демону менен байланышат, ал сиздин контейнерлериңизди түзүү, иштетүү жана таратуу жүгүн алат. Кардар да, сервер да бир системада иштей алат, сиз кардарды алыскы докер демонуна туташтыра аласыз. Кардар менен сервер розетка же RESTful API аркылуу байланышат.

Докерди түшүнүү

Докер демону

Диаграммада көрсөтүлгөндөй, демон хост машинасында иштейт. Колдонуучу сервер менен түздөн-түз иштешпейт, бирок бул үчүн кардарды колдонот.

Docker кардары

Docker кардары, докер программасы, Dockerдин негизги интерфейси. Ал колдонуучудан буйруктарды алат жана докер демону менен иштешет.

Докердин ичинде

Докер эмнеден турарын түшүнүү үчүн сиз үч компонент жөнүндө билишиңиз керек:

  • сүрөттөр
  • реестр
  • контейнерлер

көрүнүш

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

каттоо

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

Контейнерлер

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

Ошентип, Docker кантип иштейт?

Буга чейин биз билебиз:

  • биз колдонмолорубуз жайгашкан сүрөттөрдү түзө алабыз;
  • колдонмолорду иштетүү үчүн сүрөттөрдөн контейнерлерди түзө алабыз;
  • Биз сүрөттөрдү Docker Hub же башка сүрөт реестри аркылуу тарата алабыз.

Келгиле, бул компоненттер бири-бирине кантип туура келгенин карап көрөлү.

Сүрөт кантип иштейт?

Биз мурунтан эле сүрөт окуу үчүн гана калып, андан контейнер түзүлөөрүн билебиз. Ар бир сүрөт деңгээлдердин жыйындысынан турат. Docker колдонот союздук файл системасы бул деңгээлдерди бир сүрөткө айкалыштыруу үчүн. Биримдик файл системасы ар кандай файл тутумдарынан (ар кандай бутактардан) файлдарга жана каталогдорго тунук түрдө бири-бирине дал келип, когеренттүү файл системасын түзүүгө мүмкүндүк берет.

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

Ар бир сүрөттүн өзөгүндө негизги сүрөт турат. Мисалы, ubuntu, Ubuntuнун негизги сүрөтү же Fedora, Fedora бөлүштүрүүнүн негизги сүрөтү. Сиз ошондой эле жаңы сүрөттөрдү түзүү үчүн негиз катары сүрөттөрдү колдоно аласыз. Мисалы, сизде apache сүрөтү бар болсо, аны веб-тиркемелериңиз үчүн негизги сүрөт катары колдоно аласыз.

Эскертүү! Docker адатта Docker Hub реестринен сүрөттөрдү тартат.

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

  • иштетүү буйругу
  • файлды же каталогду кошуу
  • чөйрө өзгөрмө түзүү
  • бул сүрөттүн контейнери ишке киргенде эмнени иштетүү керектиги боюнча нускамалар

Бул нускамалар файлда сакталат Dockerfile. Докер муну окуйт Dockerfile, сиз сүрөттү курганда, бул нускамаларды аткарат жана акыркы сүрөттү кайтарат.

Докер реестри кантип иштейт?

Реестр докер сүрөттөрү үчүн репозиторий болуп саналат. Сүрөт түзүлгөндөн кийин, сиз аны коомдук Docker Hub реестрине же жеке реестриңизге жарыялай аласыз.

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

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

Контейнер кантип иштейт?

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

Контейнер башталганда эмне болот?

Же программаны колдонуу docker, же RESTful API колдонуп, докер кардары докер демонуна контейнерди баштоону айтат.

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

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

  • контейнерди түзүү үчүн кайсы сүрөттү колдонуу керек. Биздин учурда ubuntu
  • контейнер башталганда сиз иштеткиңиз келген команда. Биздин учурда /bin/bash

Бул буйрукту аткарганда капоттун астында эмне болот?

Докер ирети менен төмөнкүлөрдү кылат:

  • ubuntu сүрөтүн жүктөйт: докер сүрөттүн жеткиликтүүлүгүн текшерет ubuntu жергиликтүү машинада, ал жок болсо, аны жүктөп алыңыз Docker hub. Сүрөт бар болсо, аны контейнерди түзүү үчүн колдонот;
  • контейнер түзөт: сүрөт алынганда, докер аны контейнерди түзүү үчүн колдонот;
  • файл системасын инициализациялайт жана окуу үчүн гана деңгээлин орнотот: контейнер файл системасында түзүлөт жана сүрөт окуу үчүн гана деңгээлге кошулат;
  • тармакты/көпүрөнү инициализациялайт: докерге хост машина менен байланышууга мүмкүндүк берген тармак интерфейсин түзөт;
  • IP дарегин орнотуу: табат жана дарегин белгилейт;
  • Белгиленген процессти баштайт: колдонмоңузду ишке киргизет;
  • Колдонмоңуздан натыйжаларды иштетет жана чыгарат: тиркемеңиздин стандарттык киргизүү, чыгаруу жана ката агымын туташтырат жана журналга киргизет, андыктан колдонмоңуздун иштешине көз салсаңыз болот.

Сизде азыр иштеген контейнер бар. Сиз контейнериңизди башкара аласыз, колдонмоңуз менен иштеше аласыз. Колдонмону токтотууну чечкенде, контейнерди жок кылыңыз.

Колдонулган технологиялар

Docker Go программасында жазылган жана жогорудагы функцияларды ишке ашыруу үчүн Linux ядросунун кээ бир функцияларын колдонот.

Namespaces

Docker технологияны колдонот namespaces биз контейнерлер деп атаган обочолонгон жумуш мейкиндигин уюштуруу. Контейнерди баштаганда, докер ал контейнер үчүн аттар мейкиндигин түзөт.

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

Докер колдонгон кээ бир аттар мейкиндиктеринин тизмеси:

  • пид: процессти изоляциялоо;
  • таза: тармак интерфейстерин башкаруу үчүн;
  • ipc: IPC ресурстарын башкаруу. (ICP: InterProccess Communication);
  • mnt: орнотуу пункттарын башкаруу;
  • UTC: ядрону изоляциялоо жана версия генерациясын башкаруу (UTC: Unix timesharing системасы).

Контролдук топтор

Докер ошондой эле технологияны колдонот cgroups же контролдук топтор. Тиркемени обочолонуп иштетүүнүн ачкычы - бул колдонмону сиз камсыз кылгыңыз келген ресурстар менен гана камсыз кылуу. Бул контейнерлер жакшы кошуна болот деп кепилдик берет. Башкаруу топтору колдо болгон аппараттык ресурстарды бөлүшүүгө жана зарыл болсо, чектөөлөрдү жана чектөөлөрдү коюуга мүмкүндүк берет. Мисалы, контейнер үчүн эстутумдун мүмкүн болгон көлөмүн чектеңиз.

Union File System

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

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