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.
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 .
Hujjatlarda aytilishicha, docker quyidagilardan iborat:
Keling, yangi mashina yarataylik. Buning uchun biz yaratish buyrug'ini bajarishimiz kerak :
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
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 :
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.
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 :
Endi bizda apline tasviri bor. Konteyner tasvirning ishlaydigan namunasi bo'lgani uchun, keling, aynan shu tasvirni ishga tushiramiz. Buyruq yordamida konteynerni ishga tushiramiz
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 ):
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
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.
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 :
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
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:
Server ishga tushganligini tushunish uchun konteynerdagi jurnalga qarashingiz mumkin. Jurnal konteynerni identifikatori yoki nomi bilan belgilab, docker logs buyrug'i yordamida olinishi mumkin. Masalan:
Shuni unutmangki, biz har doim ishlaydigan konteynerga buyruq bilan o'tishimiz mumkin:
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:
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 ".
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
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 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.
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-machine create -- driver virtualbox javarush
: Biz docker mashinasini yaratish jurnalini ko'ramiz:
--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 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 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 -a
biz barcha konteynerlarni ko'ramiz:
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 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:
- Keling, build.gradle qurish skriptini ochamiz va uni bo'limga muvofiq tuzatamiz: " Gradle qurish faylini qo'shish ".
- " JSP sahifalarini demo ilovaga qo'shish " bo'limida ko'rsatilganidek, src/main/webapp-ga sahifalarni qo'shamiz .
- Keling, " Loyihaga servlet va metama'lumotlar qo'shish
HelloServlet
" bo'limidagi tarkibga ega sinf qo'shamiz .
plugins {
id 'war'
id 'org.gretty' version '2.2.0'
}
HelloServlet
Qizig'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
gradle war
Agar 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 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:
# Базовый образ, "наследуемся" от него
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 .
.
-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
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:
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: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:- Dockerfiles yozish uchun eng yaxshi amaliyotlar
- Docker Machine yordamida masofaviy xostdagi konteyner
- Habré maqolasi " Docker. Boshlanish "
- Habré maqolasi " Docker tasvirlarini optimallashtirish ".
- Udemy: " Docker bilan ishlashni boshlash "
- Youtube: " A dan Z gacha Docker darslari "
- Docker dasturiy ta'minot xususiyatlari [GeekBrains]
GO TO FULL VERSION