Докерді түсіну

Мен бірнеше ай бойы веб-жобаларды әзірлеу/жеткізу процесін құрылымдау үшін Docker қолданбасын пайдаланып жатырмын. Мен Habrakhabr оқырмандарына докер туралы кіріспе мақаланың аудармасын ұсынамын - «Докерді түсіну».

докер дегеніміз не?

Docker – қолданбаларды әзірлеуге, жеткізуге және пайдалануға арналған ашық платформа. Docker қолданбаларыңызды жылдамырақ жеткізуге арналған. Докер көмегімен қолданбаны инфрақұрылымнан ажыратуға және инфрақұрылымды басқарылатын қолданба ретінде қарастыруға болады. Docker кодты тезірек жеткізуге, жылдамырақ сынауға, қолданбаларды жіберуге және код жазу мен іске қосу кодының арасындағы уақытты азайтуға көмектеседі. Docker мұны қолданбаларды басқаруға және орналастыруға көмектесетін процестер мен утилиталарды пайдалана отырып, жеңіл контейнерлік виртуалдандыру платформасы арқылы жасайды.

Негізінде докер контейнерде қауіпсіз оқшауланған кез келген дерлік қолданбаны іске қосуға мүмкіндік береді. Қауіпсіз оқшаулау бір уақытта бір хостта көптеген контейнерлерді іске қосуға мүмкіндік береді. Гипервизордың қосымша ауыртпалығынсыз жұмыс істейтін контейнердің жеңіл табиғаты аппараттық құралдан көбірек пайда алуға мүмкіндік береді.

Контейнерді виртуалдандыру платформасы мен құралдары келесі жағдайларда пайдалы болуы мүмкін:

  • қолданбаңызды (және сіз пайдаланатын құрамдастарды) докер контейнерлеріне орау;
  • әзірлеу және сынақтан өткізу үшін осы контейнерлерді сіздің командаларыңызға тарату және жеткізу;
  • бұл контейнерлерді деректер орталықтарында да, бұлттарда да өндіріс орындарында орналастыру.

Мен доккерді не үшін пайдалана аламын?

Қолданбаларды жылдам жариялаңыз

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 қалай жұмыс істейді?

Әзірге біз мынаны білеміз:

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

Осы құрамдастардың бір-біріне қалай сәйкес келетінін көрейік.

Сурет қалай жұмыс істейді?

Біз суреттің контейнер жасалатын тек оқуға арналған үлгі екенін бұрыннан білеміз. Әрбір сурет деңгейлер жинағынан тұрады. Docker пайдаланады одақ файлдық жүйесі осы деңгейлерді бір суретке біріктіру. Біріккен файлдық жүйе әртүрлі файлдық жүйелердегі (әртүрлі тармақтар) файлдар мен каталогтардың мөлдір қабаттасуына мүмкіндік береді, когерентті файлдық жүйені жасайды.

Докердің жеңіл болуының себептерінің бірі оның осындай қабаттарды пайдалануында. Қолданбаны жаңарту сияқты кескінді өзгерткен кезде жаңа қабат жасалады. Осылайша, бүкіл кескінді ауыстырмай немесе оны қайта жасамай, виртуалды машинамен істеу қажет болуы мүмкін, тек қабат қосылады немесе жаңартылады. Жаңа кескінді толығымен таратудың қажеті жоқ, тек жаңарту таратылады, бұл кескіндерді таратуды жеңілдетеді және жылдамырақ етеді.

Әрбір кескіннің негізінде негізгі бейне жатыр. Мысалы, ubuntu, Ubuntu негізгі кескіні немесе Fedora, Fedora таратуының негізгі кескіні. Сондай-ақ, суреттерді жаңа кескіндерді жасау үшін негіз ретінде пайдалануға болады. Мысалы, егер сізде apache кескіні болса, оны веб-қосымшаларыңыз үшін негізгі кескін ретінде пайдалануға болады.

Ескерту! Docker әдетте Docker Hub тізілімінен кескіндерді тартады.

Докер кескіндерін осы негізгі кескіндерден жасауға болады; біз осы кескіндерді жасау нұсқауларын қадамдар деп атаймыз. Әрбір нұсқау жаңа кескінді немесе деңгейді жасайды. Нұсқаулар келесідей болады:

  • пәрменін іске қосыңыз
  • файлды немесе каталогты қосу
  • орта айнымалысын жасау
  • осы кескіннің контейнері іске қосылғанда нені іске қосу керектігі туралы нұсқаулар

Бұл нұсқаулар файлда сақталады Dockerfile. Докер мұны оқиды Dockerfile, кескінді құрастырған кезде осы нұсқауларды орындайды және соңғы кескінді қайтарады.

Докер тізілімі қалай жұмыс істейді?

Тізілім докер кескіндерінің репозиторийі болып табылады. Кескін жасалғаннан кейін оны жалпы Docker Hub тізілімінде немесе жеке тізілімде жариялауға болады.

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

Docker Hub жалпыға ортақ және жеке кескін репозиторийлерін қамтамасыз етеді. Қоғамдық репозиторийлерден суреттерді іздеу және жүктеп алу барлығына қолжетімді. Жеке қоймалардың мазмұны іздеу нәтижелеріне кірмейді. Тек сіз және сіздің пайдаланушыларыңыз бұл кескіндерді алып, олардан контейнерлер жасай аласыз.

Контейнер қалай жұмыс істейді?

Контейнер операциялық жүйеден, пайдаланушы файлдарынан және метадеректерден тұрады. Біз білетіндей, әрбір контейнер кескіннен жасалған. Бұл сурет докерге контейнерде не бар екенін, қандай процесті бастау керектігін, контейнер қашан іске қосылатынын және басқа конфигурация деректерін айтады. Docker кескіні тек оқуға арналған. Доккер контейнерді іске қосқанда, ол қолданбаны іске қосуға болатын кескіннің жоғарғы жағында оқу/жазу қабатын жасайды (бұрын айтылғандай одақ файлдық жүйесін пайдалану).

Контейнер іске қосылғанда не болады?

Немесе бағдарламаны пайдалану docker, немесе RESTful API арқылы докер клиенті докер демонына контейнерді іске қосуды айтады.

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

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

  • контейнер жасау үшін қандай кескінді пайдалану керек. Біздің жағдайда ubuntu
  • контейнер іске қосылған кезде іске қосқыңыз келетін пәрмен. Біздің жағдайда /bin/bash

Бұл пәрменді орындаған кезде капот астында не болады?

Docker, ретімен келесі әрекеттерді орындайды:

  • ubuntu кескінін жүктейді: докер кескіннің қолжетімділігін тексереді ubuntu жергілікті машинада және ол жоқ болса, оны жүктеп алыңыз Докер хабы. Егер сурет бар болса, ол оны контейнер жасау үшін пайдаланады;
  • контейнер жасайды: кескін қабылданған кезде докер оны контейнер жасау үшін пайдаланады;
  • файлдық жүйені инициализациялайды және тек оқуға арналған деңгейді орнатады: контейнер файлдық жүйеде жасалады және сурет тек оқуға арналған деңгейге қосылады;
  • желіні/көпірді инициализациялайды: докерге негізгі компьютермен байланысуға мүмкіндік беретін желі интерфейсін жасайды;
  • IP мекенжайын орнату: мекенжайды табады және орнатады;
  • Көрсетілген процесті бастайды: қолданбаңызды іске қосады;
  • Қолданбаңыздан нәтижені өңдейді және шығарады: қолданбаңыздың стандартты кірісін, шығысын және қате ағынын қосады және тіркейді, осылайша қолданбаңыздың орындалу жолын бақылай аласыз.

Енді сізде жұмыс істейтін контейнер бар. Контейнерді басқара аласыз, қолданбаңызбен әрекеттесе аласыз. Қолданбаны тоқтатуды шешкен кезде, контейнерді жойыңыз.

Қолданылған технологиялар

Docker Go бағдарламасында жазылған және жоғарыда аталған функционалдылықты жүзеге асыру үшін Linux ядросының кейбір мүмкіндіктерін пайдаланады.

Атау кеңістігі

Docker технологияны пайдаланады namespaces біз контейнерлер деп атайтын оқшауланған жұмыс кеңістігін ұйымдастыру. Контейнерді іске қосқан кезде докер сол контейнер үшін аттар кеңістігінің жинағын жасайды.

Бұл контейнердің әрбір аспектісі өз аттар кеңістігінде жұмыс істейтін және сыртқы жүйеге қатынасы жоқ оқшауланған қабатты жасайды.

Доккер пайдаланатын кейбір аттар кеңістігінің тізімі:

  • пид: процесті оқшаулау;
  • жел: желілік интерфейстерді басқару үшін;
  • IPc: IPC ресурстарын басқару үшін. (ICP: InterProccess Communication);
  • mnt: орнату нүктелерін басқару;
  • Дүниежүзілік үйлестірілген уақыт: ядроны оқшаулау және нұсқа генерациясын басқару (UTC: Unix уақыт бөлу жүйесі).

Бақылау топтары

Docker сонымен қатар технологияны пайдаланады cgroups немесе бақылау топтары. Қолданбаны оқшаулауда іске қосудың кілті қолданбаны тек қамтамасыз еткіңіз келетін ресурстармен қамтамасыз ету болып табылады. Бұл контейнерлердің жақсы көршілер болуын қамтамасыз етеді. Басқару топтары қолжетімді аппараттық ресурстарды ортақ пайдалануға және қажет болған жағдайда шектеулер мен шектеулерді орнатуға мүмкіндік береді. Мысалы, контейнер үшін жадтың ықтимал көлемін шектеңіз.

Біріккен файлдық жүйе

Union File Sysem немесе UnionFS - бұл қабаттар жасау арқылы жұмыс істейтін файлдық жүйе, оны өте жеңіл және жылдам етеді. Docker контейнер салынған блоктарды жасау үшін UnionFS пайдаланады. Docker UnionFS бірнеше нұсқаларын пайдалана алады, соның ішінде: AUFS, btrfs, vfs және DeviceMapper.

Контейнер пішімдері

Docker бұл компоненттерді контейнер пішімі деп атайтын қаптамаға біріктіреді. Әдепкі пішім деп аталады libcontainer. Docker сонымен қатар Linux жүйесінде дәстүрлі контейнер пішімін қолдайды LXC. Болашақта Docker басқа контейнер пішімдерін қолдауы мүмкін. Мысалы, BSD түрмелерімен немесе Solaris аймақтарымен біріктіру.

Ақпарат көзі: www.habr.com

пікір қалдыру