JavaRush /Java блогу /Random-KY /Докер менен биринчи таанышуу
Viacheslav
Деңгээл

Докер менен биринчи таанышуу

Группада жарыяланган
Контейнеризация практикада көп колдонулган механизм. Мисалы, сиз headhunterде издегениңизде, бүгүнкү күнгө карата Докер жөнүндө айтылган 477 бош орун табасыз. Ошондуктан, бул эмне менен таанышуу жаман идея эмес. Бул кыска карап чыгуу биринчи таасирди түзүүгө жардам берет деп үмүттөнөм. Ооба, ал аны Udemy боюнча курстар сыяктуу кошумча материалдар менен камсыз кылат. Dockerге биринчи киришүү - 1

Киришүү

Бул кыска кароодо мен контейнерлештирүү сыяктуу темага токтолгум келет. Жана сиз контейнерлөө деген эмне экенин түшүнүү менен башташыңыз керек. Википедияга ылайык, " Контейнерлештирүү " бул операциялык тутум деңгээлиндеги виртуалдаштыруу (б.а. аппараттык ЭМЕС) мында операциялык тутумдун өзөгү бир эмес , бир нече обочолонгон колдонуучу мейкиндик инстанцияларын сактайт. " Колдонуучу мейкиндиги " - бул колдонуучунун программалары үчүн сакталган операциялык системанын виртуалдык эстутум дарек мейкиндиги. Колдонуучунун мейкиндик инстанциялары (адатта контейнерлер деп аталат) колдонуучунун көз карашы боюнча бир операциялык системанын инстанциясына толугу менен окшош. Ядро контейнердин толук изоляциясын камсыздайт, андыктан ар түрдүү контейнерлерден алынган программалар бири-бирине таасир эте алbyte. Көрсө, контейнерлештирүү бул программалык камсыздоону виртуалдаштыруу, башкача айтканда, операциялык системанын өзөгү жооптуу болгон операциялык системанын деңгээлиндеги виртуалдаштыруу. Бул ыкманын мүнөздүү өзгөчөлүктөрүнүн бири бардык контейнерлер хосттун операциялык системасы сыяктуу (башкача айтканда, контейнерлер жайгашкан) жалпы ядрону колдонушат. Бул виртуалдык жабдыкты эмуляциялоо жана операциялык системанын толук кандуу нускасын ишке киргизүү боюнча ашыкча чыгымдардан арылууга мүмкүндүк берет. Бул "жеңил" виртуалдаштыруу деп айта алабыз. Ядро – бул ОСтун борбордук бөлүгү, ал тиркемелерди компьютердик ресурстарга, мисалы, процессордун убактысы, эстутум, тышкы аппараттык камсыздоо жана тышкы киргизүү жана чыгаруу түзүлүштөрүнө макулдашылган кирүү мүмкүнчүлүгүн берет. Ядро, адатта, файл тутумун жана тармактык протокол кызматтарын да камсыз кылат. Жалпысынан алганда, бул бүт системанын жүрөгү болуп саналат. Кошумча маалымат алуу үчүн " Контейнер жөнүндө жалпы маалымат " деген материалды карап чыгуу пайдалуу болушу мүмкүн . Жана дагы бир нече сөз киришүү толук болушу үчүн. Эми биз операциялык системанын өзөгү бар экенин түшүндүк. Бул колдонуучу мейкиндик учурлары үчүн изоляцияны камсыз кылат. Бул контекстте сиз " круппалар " деген терминге туш болушуңуз мүмкүн. Бул сизге жетишүүгө мүмкүндүк берген Linux ядросунун механизминин аталышы. Демек, контейнерлештирүү жолу Linux системаларынан башталган деп айта алабыз. Бирок, Windows 10 менен баштап, контейнерлештирүү үчүн колдоо да пайда болду. Виртуалдаштыруу менен иштөө үчүн компьютериңиздин BIOSунда виртуалдаштырууну колдоону конфигурациялашыңыз керек. Муну кантип жасоо компьютерден көз каранды. Мисалы, мындай көрүнүшү мүмкүн:
Dockerге биринчи киришүү - 2
Windows'до сиз муну ар кандай жолдор менен текшере аласыз. Мисалы, сиз Microsoft веб-сайтынан атайын утorтаны жүктөп алсаңыз болот: Аппараттык камсыздоонун жардамы менен виртуалдаштырууну аныктоо куралы . Дагы бир маанилүү түшүнүк - Hypervisor жөнүндө айтып кетүү керек. Гипервизор – бул виртуалдык машинанын монитору, бир эле компьютерде бир нече операциялык системалардын параллелдүү иштешин камсыз кылуучу программа. Гипервизор операциялык тутумдардын бири-биринен обочолонушун камсыздайт жана иштеп жаткан ОС арасында ресурстарды бөлүшөт. Мындай гипервизорлордун бири Oracle VirtualBox болуп саналат .
Dockerге биринчи киришүү - 3

Докер

Демек, виртуалдаштыруу деген эмне экени түшүнүктүү. Бирок аны кантип колдонуу керек? Бул жерде Докер бизге жардамга келет. Docker - бул контейнердик чөйрөлөрдө тиркемелерди жайгаштырууну жана башкарууну автоматташтыруу үчүн программалык камсыздоо. Докердин Docker Enginge сыяктуу концепция менен берилгендигинен баштоо керек. Ал эми сиз расмий Docker веб-сайтынан жана " Docker Обзору " бөлүмүнөн башташыңыз керек.
Dockerге биринчи киришүү - 4
Документте докер төмөнкүлөрдөн турат деп айтылат:
  • Докер serverи Docker Daemon процесси (dockerd) деп аталат.
  • Команда сап интерфейси, ошондой эле CLI (докер) катары белгилүү.
  • Программалар димон менен кантип "сүйлөшө аларын" жана ага эмне кылуу керектигин айтып берерин сүрөттөгөн REST API.
Андан ары кирүүдөн мурун, докерди орнотобуз, башкача айтканда, докер демонун орнотобуз. Docker веб-сайтында " Windows үчүн Docker " орнотуу боюнча нускамалар бар. Кызыгы, Dockerдин өзүнүн системалык талаптары бар. Эгер сизде мага окшоп эски Windows болсо, мисалы Windows 7, анда Docker Toolbox колдонушуңуз керек.
Dockerге биринчи киришүү - 5

Docker Toolbox

Системалык талаптарга жооп бербеген эски машиналарга Docker орнотуу. Вебсайтта мындай дейт: "Legacy Desktop Solution". Келгиле, " Docker Toolbox " барагына өтүп, аны жүктөп алалы. Бул топтомдун салмагы болжол менен 211 мегаbyte. Биз аны демейки катары орнотобуз, башкача айтканда, желектерди иретке келтирбестен, бардыгына жумшактык менен макул болобуз. Орнотуудан кийин баары жакшы экенин текшеребиз. Келечекте биздин майданыбыз командалык линия болот. Мен Windows буйрук сабын колдонбоону сунуштайм, анткени аны менен ачык эмес көйгөйлөр болушу мүмкүн. Баш кабыгын колдонуу жакшы. Windows'до аны алуунун эң сунушталган жолу - git versionсын башкаруу тутумун орнотуу , ал дагы эле пайдалуу болот. Анткени аны менен бирге "байланган" бизге керектүү баш болот. Бул карап чыгуу үчүн мен git bash колдоном. Ошондой эле CYGWIN менен bash орното аласыз . Келгиле, bash же git bash иштетели. Докер машинасы деп да белгилүү болгон Докер машинасын орнотконубузду текшерип көрөлү: docker-machine -version Бул Docker Machine деген эмне? 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. Boot2Docker сүрөтүнөн VirtualBoxта жаңы виртуалдык машина түзүлдү. Түзүлгөндөн кийин, биз VirtualBoxту ишке киргизе алабыз (VirtualBox Docker Toolbox менен орнотулгандыктан) жана докер машинасы үчүн түзүлгөн виртуалдык машинаны көрө алабыз:
Dockerге биринчи киришүү - 8
Түзүлгөндөн кийин, биз докер машинасына туташуу үчүн конфигурацияланышы керек болгон чөйрө өзгөрмөлөрүн алуу үчүн “ docker-machine env ” буйругун аткарууну сунуштайбыз :
Докерге биринчи киришүү - 9
Бул буйрукту докер-машинанын жардамы менен аткаргандан кийин, биз алыскы докерлештирилген хостко туташабыз (бул учурда Virtual Box'до жайгашкан виртуалдык) жана докер буйруктарын алыскы хостто аткарып жаткандай локалдык түрдө аткара алабыз. Текшерүү үчүн биз " docker info " буйругун иштетсек болот. Эгер докердик машина менен байланыш түзүлбөсө, биз ката алабыз. Ал эми баары жакшы болсо, докер машинасындагы докер жөнүндө маалымат. Азыр Docker жалпысынан кантип иштээрин жана аны кантип колдонууну түшүнүүгө убакыт келди.
Dockerге биринчи киришүү - 10

Докер контейнерлери

Ошентип, бизде докер бар. Бул докер деген эмне? Докердин documentтери жана " Баштоо " бөлүмү муну түшүнүүгө жардам берет . Бул бөлүмдүн кириш бөлүгү Docker түшүнүктөрү менен тааныштырат . Анда Docker бул контейнерлерде тиркемелерди иштеп чыгуу, оңдоо жана иштетүү үчүн платформа экени айтылат. Ошондуктан, Docker үчүн негизги нерсе - бул контейнерлер. Докердин логотибин карасаңыз да, бул жонуна контейнерлерди кармаган кит. Бирок контейнер деген эмне? Кийинки " Сүрөттөр жана контейнерлер " бөлүмүндө контейнер бул Сүрөттүн иштеп жаткан нускасы деп айтылат. Ал эми Image - бул колдонмо үчүн зарыл болгон нерселердин баарын камтыган "пакет" (code, чөйрө, китепканалар, орнотуулар ж.б.). Эми өзүбүз аракет кылып көрөлү. Docker веб-сайтында " Docker үлгүлөрү " деп аталган бөлүм бар, анын ичинде " Жаңыдан баштагандар үчүн Docker ". Бул жердеги мисалдар мага кызыктуураак көрүнөт. Ошентип, биз күтүлбөгөн жерден Alpine Linux менен таанышкыбыз келди жана муну Docker контейнерлери аркылуу жасай алабыз. Сүрөттү алуу үчүн биз аны "тартышыбыз" же "жүрүшүбүз" керек. Ошондуктан, биз docker pull буйругун аткарабыз :docker pull apline
Докерге биринчи киришүү - 11
Көрүнүп тургандай, биз бир жерден жүктөп жатабыз. Демейки боюнча, Docker өзүнүн репозиторийине https://hub.docker.com тармагын карайт . Сүрөттү ийгorктүү алгандан кийин, биз docker images буйругун иштетип, жеткorктүү сүрөттөрдүн тизмесин текшере алабыз :
Докерге биринчи киришүү - 12
Азыр бизде аплайн сүрөтү бар. Контейнер сүрөттүн иштеп жаткан мисалы болгондуктан, келгиле, ушул сүрөттү ишке киргизели. Келиңиз, команданы колдонуп контейнерди ишке киргизели docker run alpine. Биз көрүп тургандай, эч нерсе болгон жок. Эгерде биз бардык активдүү контейнерлерди көрсөтүү буйругун аткарсак docker ps, биз эч нерсе албайбыз. Бирок биз аткарсак, docker ps -aбардык контейнерлерди көрөбүз:
Докер менен биринчи таанышуу - 13
Кеп, биз Dockerди интерактивдүү режимде ишке киргизген жокпуз. Ошондуктан ал буйрукту аткарып, токтоду. Терминалды ачуу буйругу болгон. Келгиле, ошол эле нерсени кылалы, бирок интерактивдүү режимде ( -it желек менен ):
Докерге биринчи киришүү - 14
Көрүнүп тургандай, бир катаны жеңип, ишаратты колдонуп, биз контейнерге жеттик жана анда иштей алабыз! Контейнердин иштөөсүн токтотпостон чыгуу үчүн, басыңыз Ctrl + p + q. Азыр иштетсек docker ps, биз бир активдүү контейнерди көрөбүз. Иштеп жаткан контейнерге кирүү үчүн, docker exec буйругун иштетиңиз :
Докер менен биринчи таанышуу - 15
Мунун баары кандай болорун эң сонун сүрөттөп алуу үчүн Docker үлгүсүнүн сүрөттөмөсүн окууну сунуштайм: “ 1.0 Биринчи контейнериңизди иштетүү ”. Мага жагат, анткени ал жерде баары абдан жеткorктүү жана түшүнүктүү жазылган. Кыскача айтканда, биз докер-машинанын жардамы менен Docker Daemon иштеген виртуалдык машинага туташтырдык. REST API аркылуу CLI колдонуп, биз альп сүрөтүн ишке киргизүүнү суранабыз. Docker аны таап, ошондуктан аны жүктөп алbyte. Docker жаңы контейнер жаратат жана бул контейнерде биз көрсөткөн буйрукту аткарат. Мунун баары, албетте, жакшы. Бирок мунун баары бизге эмне үчүн керек? Бул жерде биз докер сүрөттү кантип жаратаарын аныкташыбыз керек. Жана аларды докер файлынын негизинде жаратат.
Докерге биринчи киришүү - 16

Dockerfile

Dockerfile шилтемесинде айтылгандай , докер файлы сүрөттү алуу үчүн бардык буйруктарды камтыган текст файлы. Чынында, биз алган бардык сүрөттөр (жогоруда келтирилген мисалдан Альп да) докер файлынан түзүлгөн. Келгиле, Java тиркемеси менен имиджибизди түзөлү. Жана алгач бул Java колдонмосу керек. Мен Gradle куруу тутумун колдонууну сунуштайм, ал жөнүндө сиз бул кыскача серепте окуй аласыз: “ Gradle үчүн кыскача киришүү ”. " Gradle Build init плагин " долбоорун түзүүгө жардам берет . Келгиле, Gradle аркылуу жаңы Java тиркемесин түзөлү: gradle init --type java-application Бул буйрук Java долбоорунун шаблонун түзөт. Бул өз алдынча колдонмо, бирок биз веб тиркеме түзгүбүз келет. Колдонмо жана AppTest класстарын алып салалы (алар Gradle Build Init Plugin тарабынан автоматтык түрдө түзүлгөн). Веб тиркемесин тез түзүү үчүн биз Gradleдин окуу куралын колдонобуз: “ Java веб тиркемелерин түзүү ”. Окуу куралына ылайык, келгиле: Бул жерде сак болушуңуз керек. Ар дайымкыдай эле, мисалдарда каталар болушу мүмкүн. Бул жерде:
Докерге биринчи киришүү - 17
Эми аны сынап көрүү үчүн, " Gretty плагинди кошуу жана колдонмону иштетүү " бөлүмүндө көрсөтүлгөндөй, build.gradle сайтына gretty плагинди кошолу :
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 билдирүүсү менен башталат. Бул биздин образыбызды жараткан ата-эне образы деп айта алабыз. Ата-эненин сүрөтүн тандоо биз үчүн абдан оңой. Веб колдонмого web server керек. Мисалы, биз Tomcat web serverин колдоно алабыз. Биз расмий Docker репозиторийине барабыз, ал docker hub деп аталат . Бизге керектүү сүрөт бар же жок экенин билүү үчүн ал жерден карайбыз:
Докер менен биринчи таанышуу - 19
Ошондой эле tomcat сүрөтү деп аталат түшүнүү керек. Бирок анын аталышынан тышкары теги бар. Tag version сыяктуу. Ар кандай versionлардагы Tomcat сүрөттөрү Tomcat'тын кайсы versionсы колдонулганы, jreнин кайсы versionсы жана кайсы негизги сүрөтү менен айырмаланат. Мисалы, биз сүрөттү ала алабыз docker pull tomcat:9-jre8-alpine Ал tomcat 9 versionсын, jre 8 versionсын жана негиз катары альп сүрөтүн колдонот. Бул биздин сүрөттүн көлөмүн азайтуу үчүн маанилүү болушу мүмкүн:
Докер менен биринчи таанышуу - 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 ..
Докер менен биринчи таанышуу - 21
-t- бул тег, башкача айтканда, чогулган сүрөттү эмне деп аташ керек. Аягындагы чекит учурдагы каталогду (докер файлы жайгашкан каталогду жана биз буйрукту иштеткен каталогду) Build context. Build context- бул докер файлын түзүүдө жеткorктүү болгон файлдардын контексти. Көрүнүп тургандай, мунун аркасында биз чогултулган согуш файлын биздин сүрөтүбүзгө, веб-server каталогуна көчүрө алдык. Эми сүрөтүбүздү иштетели:docker run -d --rm -p 8888:8080 jrdocker
Докер менен биринчи таанышуу - 22
Сервер иштей баштаганын түшүнүү үчүн контейнерден журналды карасаңыз болот. Журналды контейнерди ID же аты боюнча көрсөтүү менен докер журналдары буйругу аркылуу алса болот. Мисалы:
Докер менен биринчи таанышуу - 23
Ооба, биз ар дайым буйрук менен аты менен иштеп жаткан контейнерге бара аларыбызды унутпагыла: winpty docker exec -it NameКонтейнера sh Эми гана туташуу калды. Мурда биз EXPOSE , башкача айтканда, контейнердин ичинен 8080 портуна кирүүгө уруксат бергенбиз. Контейнердин өзүн ишке киргизгенде, биз -p ( incoming ports ) тэгин көрсөтүп, контейнердеги 8080 портун корреляция кылдык (Tomcat web serverи). ал жерде байланыштарды күтүп жатат) докер демону бар машинадагы 8888 порту менен. Эсибизде, биз докер демонун түз эмес, докер-машин аркылуу ишке киргиздик. Ошондуктан, биз дагы бир жолу docker-machine ls буйругун колдонуп, докер машиналарыбыз боюнча маалыматтарды сурап, контейнердеги server менен байланышабыз:
Dockerге биринчи киришүү - 24
Ошентип, сиз жана мен жаңы эле Docker контейнеринде веб тиркемени ишке киргиздик! ) Мен темендегулерду да белгилегим келет. Кирүү көйгөйлөрү болгон учурда, Docker машинасы биринчи кезекте Virtual BOx виртуалдык машинасы экенин унутпашыңыз керек. Виртуалдык машинанын тармак жөндөөлөрүндө көйгөйлөр болушу мүмкүн. Иштеп жаткан VMBox конфигурациясы мындай көрүнүшү мүмкүн:
Докер менен биринчи таанышуу - 25
Докер менен биринчи таанышуу - 26

катмарлар

Сүрөттөр докер-файлдардан түзүлөөрүн жана докер файлдары буйруктардын жыйындысы экенин түшүндүк. Биз ошондой эле докер файлынын ата-энеси бар экенин түшүндүк. Ал эми сүрөттөрдүн өлчөмү ар кандай болот. Кызыктуусу, сиз докер тарых буйругун колдонуп, сүрөттүн кантип курулганын көрө аласыз . Мисалы:
Докер менен биринчи таанышуу - 27
Бул сөздүн мааниси боюнча, ар бир сүрөттөлүш сүрөттөрдүн жыйындысы экенин түшүнүү үчүн маанилүү. Ар бир сүрөттү өзгөртүү (докер файлындагы ар бир жаңы буйрук) өзүнүн идентификаторуна ээ болгон жаңы катмарды түзөт. Катмарлар тууралуу көбүрөөк маалыматты " Докер: Сүрөттөр жана катмарлар " documentациясынан окуй аласыз . Мен ошондой эле Хабредеги макаланы окууну сунуштайм: " Сүрөттөрдөгү докер сүрөттөрү жана контейнерлери ."

Корутунду

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