JavaRush /Java блогы /Random-KK /Докермен алғашқы танысу
Viacheslav
Деңгей

Докермен алғашқы танысу

Топта жарияланған
Контейнерлеу – тәжірибеде жиі қолданылатын механизм. Мысалы, сіз headhunter қолданбасында іздеген кезде, бүгінгі күні Docker туралы 477 бос орынды табасыз. Сондықтан оның не екенін білу жаман идея болмас еді. Бұл қысқа шолу алғашқы әсерді қалыптастыруға көмектеседі деп үміттенемін. Ол оны Udemy курстары сияқты қосымша материалдармен қамтамасыз етеді. Docker бағдарламасына алғашқы кіріспе - 1

Кіріспе

Бұл қысқа шолуда мен контейнерлеу сияқты тақырыпты қозғағым келеді. Және контейнерлеудің шын мәнінде не екенін түсінуден бастау керек. Википедияға сәйкес, « Контейнеризация » операциялық жүйе деңгейіндегі (яғни аппараттық құрал ЕМЕС ) виртуализация, онда операциялық жүйе ядросы бір емес, бірнеше оқшауланған пайдаланушы кеңістігі даналарын сақтайды. " Пайдаланушы кеңістігі " - пайдаланушы бағдарламалары үшін сақталған операциялық жүйенің виртуалды жады мекенжай кеңістігі. Пайдаланушы кеңістігі даналары (әдетте контейнерлер деп аталады) пайдаланушы көзқарасы бойынша бір операциялық жүйе данасына толығымен ұқсас. Ядро контейнердің толық оқшаулануын қамтамасыз етеді, сондықтан әртүрлі контейнерлердегі бағдарламалар бір-біріне әсер ете алмайды. Контейнерлеу бағдарламалық жасақтаманы виртуализациялау, яғни операциялық жүйенің ядросы жауап беретін операциялық жүйе деңгейіндегі виртуализация болып табылады. Бұл тәсілдің сипатты ерекшеліктерінің бірі барлық контейнерлер негізгі операциялық жүйемен бірдей (яғни контейнерлер орналасқан) ортақ ядроны пайдаланады. Бұл виртуалды жабдықты эмуляциялаудан және операциялық жүйенің толыққанды данасын іске қосудан құтылуға мүмкіндік береді. Бұл «жеңіл» виртуализация деп айта аламыз. Ядро процессор уақыты, жады, сыртқы аппараттық құрал және сыртқы енгізу-шығару құрылғылары сияқты компьютер ресурстарына үйлестірілген қол жеткізуді қамтамасыз ететін ОЖ орталық бөлігі болып табылады. Ядро әдетте файлдық жүйе мен желілік протокол қызметтерін де қамтамасыз етеді. Жалпы, бұл бүкіл жүйенің жүрегі. Қосымша ақпарат алу үшін « Контейнерлер туралы жалпы ақпарат » материалын қарастыру пайдалы болуы мүмкін . Кіріспені аяқтау үшін тағы бірнеше сөз. Енді операциялық жүйенің ядросы бар екенін түсінеміз. Ол пайдаланушы кеңістігі даналары үшін оқшаулауды қамтамасыз етеді. Осы тұрғыда сіз « топтар » терминін кездестіруіңіз мүмкін . Бұл сізге жетуге мүмкіндік беретін Linux ядросының механизмінің атауы. Сондықтан контейнерлендіру жолы Linux жүйелерінен басталды деп айта аламыз. Дегенмен, Windows 10 жүйесінен бастап контейнерлеуге қолдау да пайда болды. Виртуализациямен жұмыс істеу үшін компьютердің BIOS жүйесінде виртуалдандыруды қолдауды конфигурациялау қажет. Мұны қалай жасау компьютерге байланысты. Мысалы, ол келесідей болуы мүмкін:
Docker бағдарламасына алғашқы кіріспе - 2
Windows жүйесінде мұны әртүрлі жолдармен тексеруге болады. Мысалы, Microsoft веб-сайтынан арнайы қызметтік бағдарламаны жүктеп алуға болады: Аппараттық құрал арқылы виртуализацияны анықтау құралы . Тағы бір маңызды тұжырымдаманы атап өткен жөн - гипервизор. Гипервизор – виртуалды машина мониторы, бір компьютерде бірнеше операциялық жүйелердің параллель орындалуын қамтамасыз ететін бағдарлама. Гипервизор операциялық жүйелердің бір-бірінен оқшаулануын қамтамасыз етеді және іске қосылған ОЖ арасында ресурстарды бөліседі. Осындай гипервизорлардың бірі - Oracle VirtualBox .
Docker бағдарламасына алғашқы кіріспе - 3

Докер

Сонымен, виртуализацияның не екені түсінікті. Бірақ оны қалай пайдалануға болады? Міне, Докер бізге көмекке келеді. Docker - бұл контейнерлік орталарда қолданбаларды орналастыру мен басқаруды автоматтандыруға арналған бағдарламалық құрал. Docker Docker Enginge сияқты тұжырымдамамен ұсынылғанынан бастаған жөн. Сіз ресми Docker веб-сайтынан және « Docker шолуы » бөлімінен бастауыңыз керек.
Docker бағдарламасына алғашқы кіріспе - 4
Құжаттама докердің мыналардан тұратынын айтады:
  • Docker serverі Docker Daemon процесі (dockerd) деп аталады.
  • Командалық жол интерфейсі, сонымен қатар CLI (докер) ретінде белгілі.
  • Бағдарламалардың димонмен қалай «сөйлей алатынын» және оған не істеу керектігін айта алатынын сипаттайтын REST API.
Әрі қарай кіріспес бұрын докерді, яғни докер демонын орнатайық. Docker веб-сайтында " Windows үшін Docker " орнату нұсқаулары бар. Бір қызығы, Docker-тің өзінің жүйелік талаптары бар. Егер сізде мен сияқты ескі Windows жүйесі болса, мысалы, Windows 7 болса, онда сізге Docker Toolbox пайдалану керек.
Docker бағдарламасына алғашқы кіріспе - 5

Docker құралдар жинағы

Жүйе талаптарына сәйкес келмейтін ескі машиналарға Docker орнату үшін. Веб-сайтта «Бұрынғы жұмыс үстелі шешімі» деп жазылған. « Docker Toolbox » бетіне өтіп , оны жүктеп алайық. Бұл жинақтың салмағы шамамен 211 мегаbyte. Біз оны әдепкі ретінде орнатамыз, яғни жалаушаларды қайта реттемей-ақ барлығымен сыпайы түрде келісеміз. Орнатқаннан кейін біз бәрі жақсы екенін тексереміз. Болашақта біздің ұрыс алаңымыз командалық желі болады. Мен Windows пәрмен жолын пайдаланбауды ұсынамын, себебі онымен анық емес мәселелер болуы мүмкін. Bash қабығын қолданған дұрыс. Windows жүйесінде оны алудың ең көп ұсынылатын жолы - git нұсқасын басқару жүйесін орнату , ол әлі де пайдалы болады. Өйткені онымен «жинақтау» бізге қажет бас болады. Бұл шолу үшін мен git bash қолданамын. Сондай-ақ, CYGWIN көмегімен bash орнатуға болады . Bash немесе git bash іске қосайық. Докер машинасы ретінде белгілі Docker машинасын орнатқанымызға көз жеткізейік: docker-machine -version Бұл Docker машинасы дегеніміз не? Docker Machine — докерленген хосттарды басқаруға арналған утorта (бұл Docker Engine орнатылған хосттар). Егер біз Docket Toolbox орнатқаннан кейін бірден докерлік машиналарды пәрмен арқылы көрсек docker-machine ls, біз бос тізімді көреміз:
Docker-пен бірінші таныстыру - 6
Жаңа машина жасайық. Ол үшін құру пәрменін орындау керек : docker-machine create -- driver virtualbox javarush: Біз докер машинасын жасау журналын көреміз:
Docker бағдарламасына алғашқы кіріспе - 7
Бұл жерде бізді қызықтыратыны мынау. Boot2Docker дегеніміз не? Бұл Docker Engine жүйесін іске қосуға арналған минималистік Linux дистрибуциясы (біз Docker Linux виртуалдандыру құралдарының арқасында жұмыс істейтінін түсінеміз, ал Windows жүйесінде қажетті механизм тек Windows 10 жүйесінен бастап пайда болды). Бұл тарату « Tiny Core Linux » дистрибутивіне негізделген . VirtualBox VM туралы да айтылған. Бұл біз белгілегендіктен --driver virtualbox. VirtualBox жүйесінде Boot2Docker кескінінен жаңа виртуалды машина жасалды. Жасалғаннан кейін біз VirtualBox-ты іске қоса аламыз (өйткені VirtualBox Docker Toolbox-пен орнатылған) және докерлік машина үшін жасалған виртуалды машинаны көре аламыз:
Docker-пен бірінші таныстыру - 8
Жасалғаннан кейін бізге докер машинасына қосылу үшін конфигурациялануы қажет ортаның айнымалы мәндерін алу үшін « docker-machine env » пәрменін іске қосу ұсынылады :
Docker-пен алғашқы таныстыру - 9
Бұл пәрменді docker-machine арқылы орындағаннан кейін біз қашықтағы докерленген хостқа қосыламыз (бұл жағдайда Virtual Box-та орналастырылған виртуалды) және докер пәрмендерін қашықтағы хостта орындағандай жергілікті түрде орындай аламыз. Тексеру үшін біз « docker info » пәрменін іске қоса аламыз. Егер докер машинасымен байланыс орнатылмаса, біз қатені аламыз. Ал егер бәрі жақсы болса, докер машинасындағы докер туралы ақпарат. Енді Docker қалай жұмыс істейтінін және оны қалай пайдалану керектігін түсінудің уақыты келді.
Docker бағдарламасына алғашқы кіріспе - 10

Docker контейнерлері

Сонымен, бізде докер бар. Бұл докер деген не? Docker құжаттамасы және « Бастау » бөлімі мұны түсінуге көмектеседі . Бұл бөлімнің кіріспе бөлігі Docker концепцияларымен таныстырады . Онда Docker қолданбаларды әзірлеуге, жөндеуге және контейнерлерде іске қосуға арналған платформа екені айтылған. Сондықтан Docker үшін ең бастысы - контейнерлер. Егер сіз докер логотипіне қарасаңыз да, ол контейнерлерді артқы жағында ұстайтын кит. Бірақ контейнер дегеніміз не? Келесі « Суреттер мен контейнерлер » бөлімінде контейнер кескіннің іске қосылған данасы екенін айтады. Ал Image – бұл қолданбаға қажеттінің барлығын (code, орта, кітапханалар, параметрлер және т.б.) қамтитын «бума». Енді өзіміз сынап көрейік. Docker веб-сайтында " Жаңадан бастаушыларға арналған Docker " кіретін " Docker үлгілері " деп аталатын бөлім бар . Мұндағы мысалдар маған қызық болып көрінеді. Сонымен, біз кенеттен Alpine Linux- пен танысқымыз келді және мұны Docker контейнерлері арқылы жасай аламыз. Кескінді алу үшін оны «тарту» немесе «суырып алу» керек. Сондықтан біз docker pull пәрменін орындаймыз :docker pull apline
Docker бағдарламасына алғашқы кіріспе - 11
Көріп отырғанымыздай, біз бір жерден жүктеп жатырмыз. Әдепкі бойынша, Docker https://hub.docker.com желісіндегі репозиторийіне қарайды . Кескінді сәтті шығарып алғаннан кейін біз docker images пәрменін іске қосу арқылы қолжетімді кескіндер тізімін тексере аламыз :
Docker бағдарламасына алғашқы кіріспе - 12
Енді бізде аплайн кескіні бар. Контейнер кескіннің іске қосылған данасы болғандықтан, дәл осы кескінді іске қосайық. Команда арқылы контейнерді іске қосамыз docker run alpine. Көріп отырғанымыздай, ештеңе болған жоқ. Егер біз барлық белсенді контейнерлерді көрсету пәрменін орындасақ docker ps, біз де ештеңе алмаймыз. Бірақ егер біз орындасақ, docker ps -aбіз барлық контейнерлерді көреміз:
Докермен алғашқы танысу – 13
Мәселе мынада, біз Docker-ті интерактивті режимде іске қоспадық. Сондықтан ол бұйрықты орындап, тоқтады. Команда терминалды ашу болды. Дәл солай істейік, бірақ интерактивті режимде ( -it жалауымен ):
Docker бағдарламасына алғашқы кіріспе - 14
Көріп отырғаныңыздай, бір қатені жеңіп, кеңесті пайдалана отырып, біз контейнерге жеттік және онда жұмыс істей аламыз! Контейнер жұмысын тоқтатпай шығу үшін түймесін басыңыз Ctrl + p + q. Егер біз қазір іске қоссақ docker ps, біз бір белсенді контейнерді көреміз. Жұмыс істеп тұрған контейнерге кіру үшін docker exec пәрменін іске қосыңыз :
Docker-пен алғашқы танысу – 15
Мұның бәрі қалай болатынын тамаша сипаттау үшін Docker үлгісінің сипаттамасын оқуды ұсынамын: “ 1.0 Бірінші контейнерді іске қосу ”. Маған ұнайды, өйткені онда бәрі өте қолжетімді және түсінікті түрде жазылған. Қысқаша қайталау үшін, біз Docker-машинаны пайдаланып Docker Daemon жұмыс істейтін виртуалды машинаға қосылдық. REST API арқылы CLI арқылы біз альпі кескінін іске қосуды сұраймыз. Docker оны табады, сондықтан оны жүктеп алмайды. Docker жаңа контейнер жасайды және осы контейнерде біз көрсеткен пәрменді іске қосады. Мұның бәрі, әрине, жақсы. Бірақ мұның бәрі бізге не үшін керек? Мұнда доккер кескінді қалай жасайтынын анықтауымыз керек. Және ол оларды докер файлы негізінде жасайды.
Docker-ке алғашқы кіріспе - 16

Докер файлы

Dockerfile анықтамасында айтылғандай , докер файлы кескінді алуға арналған барлық пәрмендерді қамтитын мәтіндік файл болып табылады. Шын мәнінде, біз алатын барлық кескіндер (тіпті жоғарыдағы мысалдағы Альпі де) докер файлынан жасалған. Кескінді Java қолданбасымен құрастырайық. Алдымен бізге осы Java қолданбасы қажет. Мен Gradle құрастыру жүйесін пайдалануды ұсынамын, ол туралы осы қысқа шолуда оқи аласыз: « Gradle-ге қысқаша кіріспе ». « Gradle Build init плагині » жобасын құруға көмектеседі . Gradle көмегімен жаңа Java қосымшасын жасайық: gradle init --type java-application Бұл пәрмен Java жобасын жасайды. Бұл дербес қолданба, бірақ біз веб-қосымшаны жасағымыз келеді. Қолданба және AppTest сыныптарын жойайық (олар Gradle Build Init Plugin арқылы автоматты түрде жасалған). Веб-қосымшаны жылдам жасау үшін біз Gradle оқулығын пайдаланамыз: « Java веб-қосымшаларын құру ». Оқулыққа сәйкес, келесіні жасайық: Бұл жерде абай болу керек. Әдеттегідей, мысалдарда қателер болуы мүмкін. Мінеки:
Docker-ке алғашқы кіріспе - 17
Енді оны тексеру үшін " Gretty плагинін қосу және қолданбаны іске қосу " бөлімінде көрсетілгендей build.gradle файлына grtty плагинін қосамыз :
plugins {
    id 'war'
    id 'org.gretty' version '2.2.0'
}
HelloServletБір қызығы, Гретти жоғарыда сипатталған қатені көрмейді . Бұл қолданбаның әртүрлі орталарда әр түрлі әрекет етуі мүмкін екенін дәлелдейді. Гретти кәдімгі автономды server қате жіберетін жерде жұмыс істей алады. Қолданбаның дұрыс жұмыс істеп тұрғанын тексеру ғана қалады. жасайық:gradle appRun
Докермен алғашқы танысу – 18
gradle warЕгер бәрі жақсы болса, кеңейтім соғысы (веб-архив) бар мұрағатты жинау үшін пәрменді пайдаланыңыз . Әдепкі бойынша, gradle оны \build\libs. Енді біз докер файлымызды жазуға дайынбыз. « Dockerfile анықтамасын » пайдалана отырып, біз Dockerfile жасаймыз. Java жобамыздың түбірінде (құрастыру сценарийімен бір жерде) «Dockerfile» деп аталатын файлды жасайық. Оны өңдеу үшін ашайық. Бұл файлдың " Dockerfile анықтамасы: формат " бөлімінде сипатталған өз пішімі бар . Кез келген докер файлы «негізгі кескінді» көрсететін FROM операторынан басталады. Бұл біздің имиджімізді жасайтын ата-аналық бейне деп айта аламыз. Бізге ата-ана бейнесін таңдау өте оңай. Веб-қосымшаға веб-server қажет. Мысалы, біз Tomcat веб-serverін пайдалана аламыз. Біз ресми Docker репозиторийіне барамыз, ол докер хабы деп аталады . Бізге қажетті кескіннің бар-жоғын білу үшін сол жерге қараймыз:
Докермен алғашқы танысу – 19
Сондай-ақ, tomcat бейнесі деп аталатынын түсіну керек. Бірақ оның атауынан басқа тегі бар. Tag нұсқа сияқты. Әртүрлі нұсқалардың Tomcat кескіндері Tomcat нұсқасының қай нұсқасы пайдаланылғанында, jre нұсқасының қай нұсқасы және қандай негізгі кескінде ерекшеленеді. Мысалы, біз суретті ала аламыз. docker pull tomcat:9-jre8-alpine Ол негіз ретінде tomcat 9 нұсқасын, jre 8 нұсқасын және альпі кескінін пайдаланады. Бұл кескіннің өлшемін азайту үшін маңызды болуы мүмкін:
Docker бағдарламасына бірінші кіріспе - 20
Көріп отырғанымыздай, айырмашылық өте үлкен. Егер біз суретті tomcata alpine негізінде құрастырсақ, біз 600 емес, тек 100 мегаbyteтан бастаймыз. Сәйкесінше, бұрын жасалған докер файлына келесі мазмұнды қосамыз:
# Базовый образ, "наследуемся" от него
FROM tomcat:9-jre8-alpine
# Копируем из Build Context'а собранный web archive в каталог томката
COPY build/libs/docker.war /usr/local/tomcat/webapps/docker.war
# Меняем рабочий каталог на томкатовский
WORKDIR /usr/local/tomcat
# Открываем порт 8080 для контейнера, т.к. его слушает томкат
EXPOSE 8080
Ал енді суретті құрастыру командасын орындаймыз: docker build -t jrdocker ..
Docker-пен алғашқы танысу – 21
-t- бұл тег, яғни жиналған кескінді қалай атауға болады. Соңындағы нүкте ағымдағы каталогты (докер файлы орналасқан каталог және пәрменді қай жерден іске қосқанымыз) ішіне қосатынымызды білдіреді Build context. Build context- бұл докер файлын жасау кезінде қолжетімді болатын файлдардың контексті. Көріп отырғаныңыздай, осының арқасында біз жиналған соғыс файлын біздің суретке, веб-server каталогына көшіре алдық. Енді суретімізді іске қосайық:docker run -d --rm -p 8888:8080 jrdocker
Docker-пен алғашқы танысу – 22
Сервердің іске қосылғанын түсіну үшін контейнердегі журналды қарауға болады. Журналды контейнерді оның идентификаторы немесе аты бойынша көрсете отырып, docker logs пәрмені арқылы алуға болады. Мысалы:
Docker-пен алғашқы танысу – 23
Біз әрқашан жұмыс істеп тұрған контейнерге аты бойынша пәрменмен бара алатынымызды ұмытпаңыз: winpty docker exec -it NameКонтейнера sh Енді тек қосылу ғана қалды. Бұрын біз EXPOSE параметрін көрсеткен болатынбыз , яғни контейнер ішінен 8080 портына кіруге рұқсат бердік. Контейнердің өзін іске қосқан кезде біз -p ( кіріс порттары ) тегін көрсеттік, осылайша контейнердегі 8080 портын корреляциялаймыз (Tomcat веб-serverі). қосылымдарды күтіп тұр) докер демоны бар машинадағы 8888 портымен. Естеріңізде болса, біз докер демонын тікелей емес, докер-машин арқылы іске қостық. Сондықтан, біз тағы да docker-machine ls пәрменін пайдаланып докерлік машиналарымыздағы деректерді сұраймыз және контейнердегі serverге хабарласамыз:
Docker-ке алғашқы кіріспе - 24
Осылайша, сіз және мен Docker контейнерінде веб-қосымшаны іске қостық! ) Мен мынаны да атап өткім келеді. Қол жеткізу проблемалары туындаған жағдайда, Docker машинасы ең алдымен Virtual BOx виртуалды машинасы екенін есте ұстаған жөн. Виртуалды машинаның желі параметрлерінде ақаулар болуы мүмкін. Жұмыс істейтін VMBox конфигурациясы келесідей болуы мүмкін:
Docker-пен алғашқы танысу – 25
Docker-пен алғашқы танысу – 26

Қабаттар

Біз кескіндердің докер-файлдардан жасалғанын және докер-файлдардың пәрмендер жиынтығы екенін анықтадық. Сондай-ақ біз докер файлының ата-анасы бар екенін анықтадық. Және бұл суреттердің өлшемі әртүрлі. Бір қызығы, сіз докер тарихы пәрмені арқылы кескіннің қалай салынғанын көре аласыз . Мысалы:
Docker-пен алғашқы танысу – 27
Мәні бойынша әрбір сурет бейнелер жиынтығы екенін түсіну үшін мұны айту маңызды. Әрбір кескінді өзгерту (докер файлындағы әрбір жаңа пәрмен) өз идентификаторы бар жаңа қабатты жасайды. Қабаттар туралы қосымша ақпаратты « Docker: кескіндер мен қабаттар » құжаттамасынан оқуға болады . Мен сондай-ақ Хабре туралы мақаланы оқуды ұсынамын: « Суреттердегі Docker кескіндері мен контейнерлері ».

Қорытынды

Бұл қысқа шолу сізді контейнерлеуге қызықтыру үшін жеткілікті болды деп үміттенемін. Төменде пайдалы болуы мүмкін қосымша материалдарға сілтемелер берілген: #Вячеслав
Пікірлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION