Dockerga Kirish
Docker nima?
Docker - bu dasturni ishga tushirish uchun zarur bo'lgan barcha narsalarni (kod, kutubxonalar(library), runtime, tizim sozlamalari(system setting) va depencylar) o'z ichiga olgan yengil(lightweight), stand-alone(mustaqil) paketlarni yaratish, deploy qilish va boshqarish imkonini beruvchi tooldir. Bunday paketlar konteynerlar(container) deb ataladi.
Har bir konteyner alohida kernel(yadro) va operatsion tizimga bog'liq bo'lmasdan, o'z protsessor(CPU), xotira(memory), block I/O, va tarmoq resurslari bilan deploy qilingan. Docker va virtual mashinalarni solishtirish eng oson bo'lishi mumkin bo'lsa-da, ular resurslarni almashish yoki ajratish usullari bilan farqlanadi.
Docker - konteynerlar deb ataladigan paketlarda dasturiy ta'minotni etkazib berish uchun operatsion tizim darajasidagi virtualizatsiyadan foydalanadigan service sifatidagi platformalar(platforms as a service (PaaS)) mahsulotlari. Konteynerlar bir-biridan ajratilgan(izolatsiya qilingan) va o'zlarining dasturiy ta'minoti, kutubxonalari va konfiguratsiya fayllarini birlashtiradi; ular bir-biri bilan aniq belgilangan kanallar orqali muloqot qilishlari mumkin. Barcha konteynerlar bitta operatsion tizim kerneli tomonidan boshqariladi va shuning uchun virtual mashinaga qaraganda kamroq resurslardan foydalanadi.
Docker imagelari
Bu bir nechta layerlardan tashkil topgan fayl bo'lib, Docker konteynerida kodni bajarish(execute) uchun foydalaniladi. Ular docker konteynerlarini yaratish uchun ishlatiladigan ko'rsatmalar to'plamidir. Docker Image - bu dasturni ishga tushirish uchun zarur bo'lgan barcha narsalarni o'z ichiga olgan executable packet. Ushbu image konteyner qanday yaratilishi kerakligi haqida ma'lumot beradi, qaysi dasturiy komponentlar va qanday ishlashini aniqlaydi. Docker Container - bu dasturni ishga tushirish uchun zarur bo'lgan barcha depencylar(bog'liqliklar) bilan dastur kodini birlashtirgan virtual muhit.
Har bir Docker konteyneri imagedan yaratilgan. Imagelarni Docker registridan (masalan, rasmiy Docker Hub) tortib(pull) olasiz va ulardan konteynerlar yaratish uchun foydalanasiz. Bitta image ko'plab konteynerlarni yaratishi mumkin. Masalan, veb-server konteynerini o'rnatish uchun eng so'nggi(latest) nginx imagesidan foydalanishingiz mumkin.
Docker Konteynerlar
Docker konteyneri imagening runtime instancedir. Dasturlarga ilovalarni(application) kutubxonalar(library) va boshqa bog'liqliklar(depencylar) kabi barcha kerakli qismlar bilan paketlash imkonini beradi. Konteynerlar ilova uchun zarur bo'lgan to'liq to'plamni o'z ichiga oladi, shuning uchun dastur izolyatsiya qilingan tarzda ishga tushirilishi mumkin. Misol uchun, deylik, NGINX SERVER bilan Ubuntu OS image mavjud bo'lsa, bu image docker run buyrug'i bilan ishga tushirilganda, konteyner yaratiladi va NGINX SERVER Ubuntu OS da ishlaydi.
Dockerfilelar
Dockerfile DSL (Domain Specific Language) dan foydalanadi va Docker imageni yaratish bo'yicha ko'rsatmalarni(instruction) o'z ichiga oladi. Dockerfile imageni tezda yaratish jarayonlarini belgilaydi. Ilovangizni yaratishda siz Docker faylini tartibda yaratishingiz kerak, chunki Docker dasturi barcha ko'rsatmalarni yuqoridan pastgacha bajaradi.
Dockerfile - Bu matn hujjati bo'lib, u bajarilganda Docker imageni yig'ishga yordam beradigan kerakli buyruqlarni o'z ichiga oladi. Docker image Docker fayli yordamida yaratilgan. Dockerfile - bu imagening manba kodi. Dockerfile yozilgach, administrator fayl ichidagi buyruqlar asosida image yaratish uchun docker build
buyrug'idan foydalanadi. Dockerfile ichidagi buyruqlar va ma'lumotlar izchil va barqaror joylashtirishni ta'minlash uchun maxsus dasturiy ta'minot versiyalari va bog'liqliklardan(dependency) foydalanish uchun sozlanishi mumkin.
Dockerfile imagelarni yaratish uchun quyidagi buyruqlardan foydalaniladi:
ADD
- fayllarni hostdagi manbadan belgilangan manzildagi konteynerning fayl tizimiga nusxalash.CMD
- konteyner ichida ma'lum bir buyruqni bajarish.ENTRYPOINT
- image bilan konteyner yaratilgan har safar foydalanish uchun standart dasturni o'rnatish.ENV
- environment o'zgaruvchilarini o'rnatish.EXPOSE
- konteyner va tashqi dunyo o'rtasida tarmoq ulanishini yoqish uchun ma'lum bir portni ko'rsatish.FROM
- build jarayonini boshlash uchun ishlatiladigan asosiy imageni aniqlang.MAINTAINER
- image yaratuvchining to'liq ismi va elektron pochta manzilini aniqlang.RUN
- Dockerfilelar uchun markaziy executing directive.USER
- konteynerni ishga tushiradigan UID (foydalanuvchi nomi) ni o'rnating.VOLUME
- konteynerdan host mashinasidagi jildga kirishni yoqish.WORKDIR
- CMD bilan belgilangan buyruq bajariladigan yo'lni(path) o'rnatish.
Har bir buyruqni ishlatish shart emas. Quyida faqat MAINTAINER
, FROM
va RUN
buyruqlaridan foydalangan holda ishlaydigan Dockerfile misoli keltirilgan:
MAINTAINER Samid Dastanbayev
FROM ubuntu:latest
RUN apt-get -y update && apt-get -y upgrade && apt-get install -y build-essential
Dokcer Hub
Docker Hub - bu repositoriyalar servisi va u cloudga asoslangan service bo'lib, odamlar Docker konteyner imagelarini push qilishadi, shuningdek Docker konteyner imagelarini Docker Hub-dan istalgan vaqtda yoki istalgan joyda internet orqali olishadi. Umuman olganda, bu imagelarni topish va qayta ishlatishni osonlashtiradi. U Docker imagelarini saqlash va almashish mumkin bo'lgan private yoki public registr sifatida imagelaringizni push qilish kabi xususiyatlarni taqdim etadi
Asosan DevOps jamoasi Docker Hub-dan foydalanadi. Bu open source tool va barcha operatsion tizimlar uchun bepul. Bu biz imagelarni saqlaydigan va kerak bo'lganda imagelarni pull qilib tortib oladigan xotiraga o'xshaydi. Biror kishi Docker Hub-dan imagelarni pull/push-ni xohlasa, u Docker haqida asosiy bilimga ega bo'lishi kerak.
Docker Engine
Konteynerlarni joylashtiradigan(deploy qiladigan) dastur Docker Engine deb ataladi. Docker Engine - bu client-serverga asoslangan dastur. Docker engine 3 ta asosiy komponentdan iborat:
- Server: U Docker-da Docker imagelari, konteynerlari, tarmoqlari va volumelarini yaratish va boshqarish uchun javobgardir. Bu daemon process deb ataladi.
- REST API: U ilovalarning Server bilan qanday ishlashi mumkinligini belgilaydi va unga nima qilishni buyuradi.
- Client Client bu docker command-line interfeysi (CLI) bo'lib, u bizga docker buyruqlari yordamida Docker bilan o'zaro ishlash imkonini beradi.
Docker Swarm
Docker Docker Swarm
deb nomlangan clusterni yaratish uchun serverlarni birlashtirishni osonlashtiradi. Swarm manageri yoki leaderini yaratganingizdan so'ng va leaderga nodelarni biriktirganingizdan so'ng, konteynerni deploy qilishni kengaytirishingiz mumkin. Leader kerakli holatni(stateni) saqlab qolish uchun vazifalarni(task) qo'shish yoki olib tashlash orqali clusterni avtomatik ravishda moslashtiradi. Node - bu Swarm-da ishtirok etadigan Docker enginening yagona nusxasi. Swarm menejeri Swarmga taqdim etilishi mumkin bo'lgan servicelarni ochish uchun kirish yukini muvozanatlashdan foydalanadi.