JavaRush /Java blogi /Random-UZ /Docker bilan birinchi tanishuv
Viacheslav
Daraja

Docker bilan birinchi tanishuv

Guruhda nashr etilgan
Konteynerlash ko'pincha amaliyotda qo'llaniladigan mexanizmdir. Misol uchun, siz headhunter-da qidirganingizda, bugungi kunda Docker haqida 477 ta bo'sh ish o'rinlarini topasiz. Shuning uchun, bu nima ekanligi bilan tanishish yomon fikr bo'lmaydi. Umid qilamanki, bu qisqa sharh birinchi fikrni shakllantirishga yordam beradi. Xo'sh, u buni Udemy kurslari kabi qo'shimcha materiallar bilan qo'llab-quvvatlaydi. Docker-ga birinchi kirish - 1

Kirish

Ushbu qisqa sharhda men konteynerlashtirish kabi mavzuga to'xtalib o'tmoqchiman. Va siz konteynerizatsiya nima ekanligini tushunishdan boshlashingiz kerak. Vikipediyaga ko'ra, " Containerization " - bu operatsion tizim darajasidagi (ya'ni apparat EMAS ) virtualizatsiya bo'lib, unda operatsion tizim yadrosi faqat bitta o'rniga bir nechta izolyatsiya qilingan foydalanuvchi maydoni misollarini saqlaydi. " Foydalanuvchi maydoni " - bu foydalanuvchi dasturlari uchun ajratilgan operatsion tizimning virtual xotirasi manzil maydoni. Foydalanuvchi maydoni misollari (odatda konteynerlar deb ataladi) foydalanuvchi nuqtai nazaridan bitta operatsion tizim misoli bilan butunlay bir xil. Yadro to'liq konteyner izolyatsiyasini ta'minlaydi, shuning uchun turli konteynerlardagi dasturlar bir-biriga ta'sir qila olmaydi. Ma'lum bo'lishicha, konteynerlashtirish bu dasturiy ta'minotni virtualizatsiya qilish, ya'ni operatsion tizim yadrosi javobgar bo'lgan operatsion tizim darajasida virtualizatsiya. Ushbu yondashuvning xarakterli xususiyatlaridan biri shundaki, barcha konteynerlar xost operatsion tizimi (ya'ni, konteynerlar joylashgan) kabi umumiy yadrodan foydalanadi. Bu virtual uskunani taqlid qilish va operatsion tizimning to'liq namunasini ishga tushirish uchun ortiqcha xarajatlardan xalos bo'lishga imkon beradi. Aytishimiz mumkinki, bu "engil" virtualizatsiya. Yadro - bu OTning markaziy qismi bo'lib, ilovalarga kompyuter resurslariga, masalan, protsessor vaqti, xotira, tashqi apparat va tashqi kiritish va chiqarish qurilmalariga muvofiqlashtirilgan kirishni ta'minlaydi. Yadro odatda fayl tizimi va tarmoq protokoli xizmatlarini ham taqdim etadi. Umuman olganda, bu butun tizimning yuragi. Qo'shimcha ma'lumot uchun " Konteynerlar haqida umumiy ma'lumot " materialini ko'rib chiqish foydali bo'lishi mumkin . Va kirishni to'liq qilish uchun yana bir necha so'z. Endi biz operatsion tizim yadroga ega ekanligini tushundik. U foydalanuvchi maydoni misollari uchun izolyatsiyani ta'minlaydi. Shu nuqtai nazardan, siz " guruhlar " atamasini uchratishingiz mumkin . Bu Linux yadro mexanizmining nomi, bu sizga bunga erishish imkonini beradi. Shuning uchun konteynerlashtirish yo'li Linux tizimlaridan boshlangan deb aytishimiz mumkin. Biroq, Windows 10 dan boshlab, konteynerlashtirishni qo'llab-quvvatlash ham paydo bo'ldi. Virtualizatsiya bilan ishlash uchun kompyuteringizning BIOS-da virtualizatsiya yordamini sozlashingiz kerak. Buni qanday qilish kompyuterga bog'liq. Masalan, u quyidagicha ko'rinishi mumkin:
Docker-ga birinchi kirish - 2
Windows-da buni turli yo'llar bilan tekshirishingiz mumkin. Masalan, Microsoft veb-saytidan maxsus yordam dasturini yuklab olishingiz mumkin: Uskuna yordamida virtualizatsiyani aniqlash vositasi . Xo'sh, yana bir muhim tushunchani eslatib o'tish kerak - Hypervisor. Gipervisor - virtual mashina monitori, bir kompyuterda bir nechta operatsion tizimlarning parallel ishlashini ta'minlash uchun dastur. Gipervisor operatsion tizimlarning bir-biridan ajratilishini ta'minlaydi va ishlaydigan OTlar o'rtasida resurslarni taqsimlaydi. Shunday gipervisorlardan biri Oracle VirtualBox hisoblanadi .
Docker-ga birinchi kirish - 3

Docker

Shunday qilib, virtualizatsiya nima ekanligi aniq. Lekin undan qanday foydalanish kerak? Va bu erda Docker bizga yordamga keladi. Docker - bu konteynerlangan muhitda ilovalarni joylashtirish va boshqarishni avtomatlashtirish uchun dasturiy ta'minot. Docker Docker Enginge kabi tushuncha bilan ifodalanganligidan boshlash kerak. Va siz rasmiy Docker veb-saytidan va " Docker umumiy ko'rinishi " bo'limidan boshlashingiz kerak.
Docker-ga birinchi kirish - 4
Hujjatlarda aytilishicha, docker quyidagilardan iborat:
  • Docker serveri Docker Daemon jarayoni (dockerd) deb ataladi.
  • Buyruqlar qatori interfeysi, CLI (docker) nomi bilan ham tanilgan.
  • Dasturlar deamon bilan qanday "suhbatlashishi" va unga nima qilish kerakligini aytib beradigan REST API.
Keyinchalik sho'ng'ishdan oldin dockerni o'rnatamiz, ya'ni docker demonini o'rnatamiz. Docker veb-saytida " Windows uchun Docker " ni o'rnatish bo'yicha ko'rsatmalar mavjud. Qizig'i shundaki, Docker o'zining tizim talablariga ega. Va agar sizda men kabi eski Windows bo'lsa, masalan Windows 7, u holda Docker Toolbox dan foydalanishingiz kerak.
Docker-ga birinchi kirish - 5

Docker asboblar to'plami

Docker-ni tizim talablariga javob bermaydigan eski mashinalarga o'rnatish uchun. Veb-sayt shunday deydi, "Legacy Desktop Solution". Keling, " Docker Toolbox " sahifasiga o'tamiz va uni yuklab olamiz. Ushbu to'plam taxminan 211 megabaytni tashkil qiladi. Biz uni sukut bo'yicha o'rnatamiz, ya'ni bayroqlarni o'zgartirmasdan hamma narsaga muloyimlik bilan rozi bo'lamiz. O'rnatishdan so'ng biz hamma narsa yaxshi ekanligini tekshiramiz. Kelajakda bizning jang maydonimiz qo'mondonlik chizig'i bo'ladi. Men Windows buyruq satridan foydalanmaslikni maslahat beraman, chunki u bilan noaniq muammolar bo'lishi mumkin. Bash shell dan foydalanish yaxshidir. Windows-da uni olishning eng tavsiya etilgan usuli git versiyasini boshqarish tizimini o'rnatishdir , u hali ham foydali bo'ladi. Chunki u bilan "to'plangan" bizga kerak bo'lgan bash bo'ladi. Ushbu ko'rib chiqish uchun men git bash-dan foydalanaman. Bashni CYGWIN bilan ham o'rnatishingiz mumkin . Keling, bash yoki git bash-ni ishga tushiramiz. Keling, Docker Machine sifatida ham tanilgan Docker Machine-ni o'rnatganimizga ishonch hosil qilaylik: docker-machine -version Bu Docker Machine nima? Docker Machine dokerlashtirilgan xostlarni boshqarish uchun yordamchi dasturdir (bular Docker Engine o'rnatilgan xostlardir). Agar Docket Toolbox-ni o'rnatganimizdan so'ng darhol docker mashinalarini buyrug'i yordamida ko'rsak docker-machine ls, biz bo'sh ro'yxatni ko'ramiz:
Docker-ga birinchi kirish - 6
Keling, yangi mashina yarataylik. Buning uchun biz yaratish buyrug'ini bajarishimiz kerak : docker-machine create -- driver virtualbox javarush: Biz docker mashinasini yaratish jurnalini ko'ramiz:
Docker-ga birinchi kirish - 7
Bu erda bizni qiziqtirgan narsa quyidagilar. Boot2Docker nima? Bu Docker Engine-ni ishga tushirish uchun minimalist Linux distributividir (biz Docker Linux virtualizatsiya vositalari tufayli ishlashini tushunamiz va Windows-da zarur mexanizm faqat Windows 10-dan boshlab paydo bo'ldi). Ushbu tarqatish " Tiny Core Linux " distributiviga asoslangan . VirtualBox VM haqida ham aytib o'tilgan. Buning sababi, biz aniqladik --driver virtualbox. VirtualBox-da Boot2Docker tasviridan yangi virtual mashina yaratildi. Yaratgandan so'ng, biz VirtualBox-ni ishga tushirishimiz mumkin (chunki VirtualBox Docker Toolbox bilan o'rnatilgan) va docker mashinasi uchun yaratilgan virtual mashinani ko'rishimiz mumkin:
Docker-ga birinchi kirish - 8
Yaratgandan so'ng, bizdan docker -mashinaga ulanish uchun sozlanishi kerak bo'lgan muhit o'zgaruvchilarini olish uchun " docker-machine env " buyrug'ini ishga tushirish so'raladi :
Docker-ga birinchi kirish - 9
Ushbu buyruqni docker-machine yordamida bajarganimizdan so'ng, biz masofaviy dokerlashtirilgan xostga ulanamiz (bu holda Virtual Box-da joylashgan virtual) va docker buyruqlarini xuddi masofaviy xostda bajarayotgandek lokal ravishda bajarishimiz mumkin. Tekshirish uchun biz " docker info " buyrug'ini ishga tushirishimiz mumkin. Agar docker mashinasiga ulanish o'rnatilmagan bo'lsa, biz xatoga duch kelamiz. Va agar hammasi yaxshi bo'lsa, docker mashinasida docker haqida ma'lumot. Endi Docker qanday ishlashini va undan qanday foydalanishni tushunish vaqti keldi.
Docker-ga birinchi kirish - 10

Docker konteynerlari

Shunday qilib, bizda docker bor. Bu docker nima? Docker hujjatlari va " Ishga tushirish " bo'limi buni tushunishimizga yordam beradi . Ushbu bo'limning kirish qismida Docker tushunchalari keltirilgan . Unda aytilishicha, Docker konteynerlarda ilovalarni ishlab chiqish, disk raskadrovka qilish va ishga tushirish uchun platforma hisoblanadi. Shuning uchun Docker uchun asosiy narsa konteynerlardir. Docker logotipiga qarasangiz ham, bu konteynerlarni orqa tomonida ushlab turadigan kit. Ammo konteyner nima? Keyingi " Rasmlar va konteynerlar " bo'limida konteyner Tasvirning ishlaydigan namunasi ekanligi aytiladi. Rasm esa dastur uchun zarur bo'lgan barcha narsalarni (kod, muhit, kutubxonalar, sozlamalar va boshqalar) o'z ichiga olgan "paket" dir. Endi o'zimiz sinab ko'raylik. Docker veb-saytida " Docker namunalari " deb nomlangan bo'lim mavjud bo'lib , unda " Yangi boshlanuvchilar uchun Docker " mavjud . Bu erdagi misollar menga qiziqroq ko'rinadi. Shunday qilib, biz to'satdan Alpine Linux bilan tanishmoqchi bo'ldik va buni Docker konteynerlari yordamida amalga oshirishimiz mumkin. Tasvirni olish uchun biz uni "tortib olishimiz" yoki "tortib olishimiz" kerak. Shuning uchun biz docker pull buyrug'ini bajaramiz :docker pull apline
Docker-ga birinchi kirish - 11
Ko'rib turganimizdek, biz biron bir joydan yuklab olamiz. Odatiy bo'lib, Docker o'zining https://hub.docker.com tarmog'idagi omboriga qaraydi . Rasmni muvaffaqiyatli olgandan so'ng, biz docker images buyrug'ini ishga tushirish orqali mavjud tasvirlar ro'yxatini tekshirishimiz mumkin :
Docker-ga birinchi kirish - 12
Endi bizda apline tasviri bor. Konteyner tasvirning ishlaydigan namunasi bo'lgani uchun, keling, aynan shu tasvirni ishga tushiramiz. Buyruq yordamida konteynerni ishga tushiramiz docker run alpine. Ko'rib turganimizdek, hech narsa sodir bo'lmadi. Agar biz barcha faol konteynerlarni ko'rsatish buyrug'ini bajarsak docker ps, biz ham hech narsa olmaymiz. Ammo agar biz bajarsak, docker ps -abiz barcha konteynerlarni ko'ramiz:
Docker bilan birinchi tanishish - 13
Gap shundaki, biz Docker-ni interaktiv rejimda ishga tushirmadik. Shuning uchun u buyruqni bajardi va to'xtadi. Buyruq terminalni ochish edi. Keling, xuddi shu narsani qilaylik, lekin interaktiv rejimda ( -it bayrog'i bilan ):
Docker-ga birinchi kirish - 14
Ko'rib turganingizdek, bitta xatoni engib, maslahatdan foydalanib, biz konteynerga etib keldik va unda ishlashimiz mumkin! Idishning ishlashini to'xtatmasdan chiqish uchun tugmani bosishingiz mumkin Ctrl + p + q. Agar biz hozir ishga tushirsak docker ps, biz bitta faol konteynerni ko'ramiz. Ishlayotgan konteynerga kirish uchun docker exec buyrug'ini bajaring :
Docker bilan birinchi tanishish - 15
Bularning barchasi qanday sodir bo'lishini juda yaxshi ta'riflash uchun Docker namunasining tavsifini o'qishni tavsiya qilaman: " 1.0 Birinchi konteyneringizni ishga tushirish ". Menga yoqadi, chunki u erda hamma narsa juda tushunarli va tushunarli tarzda yozilgan. Qisqacha aytganda, biz docker-machine yordamida Docker Daemon bilan ishlaydigan virtual mashinaga ulanganmiz. REST API orqali CLI-dan foydalanib, biz alp tog'lari tasvirini ishga tushirishni so'raymiz. Docker uni topadi va shuning uchun uni yuklab olmaydi. Docker yangi konteyner yaratadi va biz ushbu konteynerda ko'rsatgan buyruqni bajaradi. Va bularning barchasi, albatta, yaxshi. Lekin bularning barchasi bizga nima uchun kerak? Va bu erda biz docker tasvirni qanday yaratishini aniqlashimiz kerak. Va u ularni docker fayli asosida yaratadi.
Docker-ga birinchi kirish - 16

Docker fayli

Dockerfile ma'lumotnomasida ta'kidlanganidek , dockerfile - bu tasvirni olish uchun barcha buyruqlarni o'z ichiga olgan matnli fayl. Aslida, biz olgan barcha tasvirlar (hatto yuqoridagi misoldan Alp tog'lari ham) doker faylidan yaratilgan. Keling, Java ilovasi yordamida rasmimizni yarataylik. Va birinchi navbatda bizga ushbu Java ilovasi kerak. Men ushbu qisqa sharhda ko'proq o'qishingiz mumkin bo'lgan Gradle qurish tizimidan foydalanishni taklif qilaman: " Gradle haqida qisqacha kirish ". " Gradle Build init plagin " loyihasini yaratishda bizga yordam beradi . Gradle yordamida yangi Java ilovasini yaratamiz: gradle init --type java-application Bu buyruq shablonli Java loyihasini yaratadi. Bu mustaqil dastur, lekin biz veb-ilova yaratmoqchimiz. Keling, App va AppTest sinflarini olib tashlaymiz (ular Gradle Build Init Plugin tomonidan avtomatik ravishda yaratilgan). Tezda veb-ilovani yaratish uchun biz Gradle-dan o'quv qo'llanmasidan foydalanamiz: “ Java veb-ilovalarini yaratish ”. Qo'llanmaga ko'ra, keling: Bu erda ehtiyot bo'lish kerak. Har doimgidek, misollarda xatolar bo'lishi mumkin. Mana:
Docker-ga birinchi kirish - 17
Endi uni sinab ko'rish uchun " Gretty plaginini qo'shing va ilovani ishga tushiring " bo'limida ko'rsatilganidek, build.gradle saytiga gretty plaginini qo'shamiz :
plugins {
    id 'war'
    id 'org.gretty' version '2.2.0'
}
HelloServletQizig'i shundaki, Gretti yuqorida tavsiflangan xatolikni ko'rmaydi . Bu ilova turli muhitlarda turlicha harakat qilishini isbotlaydi. Gretty oddiy mustaqil server xatoga yo'l qo'yadigan joyda ishlashi mumkin. Qolgan narsa dasturning to'g'ri ishlashini tekshirishdir. Keling, qilaylik:gradle appRun
Docker bilan birinchi tanishish - 18
gradle warAgar hamma narsa yaxshi bo'lsa, kengaytma urushi (veb arxiv) bilan arxivni yig'ish buyrug'idan foydalaning . Odatiy bo'lib, gradle uni \build\libs. Endi biz docker faylimizni yozishga tayyormiz. " Dockerfile ma'lumotnomasi " yordamida biz Dockerfile yaratamiz. Keling, Java loyihamizning ildizida (qurilish skripti bilan bir joyda) "Dockerfile" nomli fayl yarataylik. Keling, uni tahrirlash uchun ochamiz. Ushbu faylning o'ziga xos formati mavjud bo'lib, " Dockerfile havolasi: Format " bo'limida tasvirlangan. Har qanday docker fayli "asosiy tasvir"ni ko'rsatuvchi FROM bayonoti bilan boshlanadi. Aytishimiz mumkinki, bu biz o'z imidjimizni yaratadigan ota-ona tasviridir. Ota-ona tasvirini tanlash biz uchun juda oson. Veb-ilovaga veb-server kerak. Masalan, Tomcat veb-serveridan foydalanishimiz mumkin. Biz rasmiy Docker omboriga boramiz, u docker hub deb ataladi . Bizga kerakli rasm bor yoki yo'qligini bilish uchun u erga qaraymiz:
Docker bilan birinchi tanishish - 19
Tomcat tasviri chaqirilishini ham tushunish kerak. Ammo nomdan tashqari uning tegi ham bor. Teg versiyaga o'xshaydi. Tomcat-ning turli versiyalardagi tasvirlari Tomcat-ning qaysi versiyasida, jre-ning qaysi versiyasida va qaysi asosiy tasvirda farqlanadi. Misol uchun, biz tasvirni olishimiz mumkin docker pull tomcat:9-jre8-alpine U tomcatning 9-versiyasi, jre-versiyasi 8 va alp tog'lari tasvirini asos sifatida ishlatadi. Bu bizning rasmimiz hajmini kamaytirish uchun muhim bo'lishi mumkin:
Docker-ga birinchi kirish - 20
Ko'rib turganimizdek, farq juda katta. Agar biz o'z rasmimizni tomcata alpine asosida qursak, biz 600 megabaytdan emas, atigi 100 megabaytdan boshlaymiz. Shunga ko'ra, avval yaratilgan dockerfaylga quyidagi tarkibni qo'shamiz:
# Базовый образ, "наследуемся" от него
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
Va endi tasvirni yaratish buyrug'ini bajaramiz: docker build -t jrdocker ..
Docker bilan birinchi tanishish - 21
-t- bu teg, ya'ni yig'ilgan tasvirni nima deb atash kerak. Oxiridagi nuqta joriy katalogni (dockerfile joylashgan va biz buyruqni ishga tushirgan katalog) ga qo'shishimizni anglatadi Build context. Build context- bu docker faylini yaratishda mavjud bo'lgan fayllar konteksti. Ko'rib turganingizdek, shu tufayli biz yig'ilgan urush faylini o'z rasmimizga, veb-server katalogiga ko'chirishga muvaffaq bo'ldik. Endi rasmimizni ishga tushiramiz:docker run -d --rm -p 8888:8080 jrdocker
Docker bilan birinchi tanishish - 22
Server ishga tushganligini tushunish uchun konteynerdagi jurnalga qarashingiz mumkin. Jurnal konteynerni identifikatori yoki nomi bilan belgilab, docker logs buyrug'i yordamida olinishi mumkin. Masalan:
Docker bilan birinchi tanishish - 23
Shuni unutmangki, biz har doim ishlaydigan konteynerga buyruq bilan o'tishimiz mumkin: winpty docker exec -it NameКонтейнера sh Endi faqat ulanish qoladi. Ilgari biz EXPOSE ni ko'rsatdik , ya'ni konteyner ichidan 8080 portiga kirishga ruxsat berdik. Konteynerning o'zini ishga tushirganimizda biz -p ( kiruvchi portlar ) tegini belgiladik va shu bilan konteynerdagi (Tomcat veb-serveri) 8080 portini korrelyatsiya qildik. u erda ulanishlarni kutmoqda) docker demoniga ega mashinadagi 8888 port bilan. Esda tutganimizdek, biz docker demonini to'g'ridan-to'g'ri emas, balki docker-machine orqali ishga tushirdik. Shunday qilib, keling, docker-machine ls buyrug'i yordamida docker-mashinalarimiz haqida yana bir bor ma'lumotlarni so'raymiz va konteynerdagi server bilan bog'lanamiz:
Docker-ga birinchi kirish - 24
Shunday qilib, siz va men Docker konteynerida veb-ilovani ishga tushirdik! ) Men quyidagilarni ham qayd etmoqchiman. Kirish bilan bog'liq muammolar bo'lsa, Docker mashinasi birinchi navbatda Virtual BOx virtual mashinasi ekanligini unutmasligingiz kerak. Virtual mashinaning tarmoq sozlamalari bilan bog'liq muammolar bo'lishi mumkin. Ishlaydigan VMBox konfiguratsiyasi quyidagicha ko'rinishi mumkin:
Docker bilan birinchi tanishish - 25
Docker bilan birinchi tanishish - 26

Qatlamlar

Biz allaqachon tasvirlar docker fayllardan yaratilganligini va docker fayllari buyruqlar to'plami ekanligini aniqladik. Shuningdek, biz docker faylining ota-onasi borligini aniqladik. Va tasvirlarning o'lchamlari boshqacha. Qizig'i shundaki, siz docker history buyrug'i yordamida tasvirning qanday qurilganligi tarixini ko'rishingiz mumkin . Masalan:
Docker bilan birinchi tanishish - 27
Mohiyatan har bir tasvir tasvirlar to'plami ekanligini tushunish uchun buni aytish muhimdir. Har bir tasvirni o'zgartirish (doker faylidagi har bir yangi buyruq) o'z identifikatoriga ega bo'lgan yangi qatlamni yaratadi. Qatlamlar haqida ko'proq " Docker: Rasmlar va qatlamlar " hujjatida o'qishingiz mumkin . Shuningdek, men Habré haqidagi maqolani o'qishni tavsiya qilaman: " Docker tasvirlari va rasmlardagi konteynerlar ".

Xulosa

Umid qilamanki, bu qisqacha sharh sizni konteynerlashtirishga qiziqtirish uchun etarli bo'ldi. Quyida foydali bo'lishi mumkin bo'lgan qo'shimcha materiallarga havolalar mavjud: #Viacheslav
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION