Internet Windows Android
Kengaytirish

Docker asosidagi misol yechimi. Dockerning asosiy xususiyatlari bilan tanishtirish

Docker tasviri va konteyner boshqaruvi buyruqlari uchun havola.

Shartlar

Rasm ma'lum bir operatsion tizimga asoslangan statik tuzilishdir.

Idish tasvirning ishlaydigan namunasidir.

Docker ishga tushirish huquqlari

Docker konteynerlarini o'z foydalanuvchingiz ostida (sudosiz) ishga tushirish uchun tegishli guruhga qo'shishingiz kerak:

Sudo usermod -aG docker YOU_USER

Docker xizmati

Docker xizmatini boshqarish "a:

Sudo xizmati docker ishga tushirish | to'xtatish | qayta ishga tushirish | status sudo qayta ishga tushirish docker # taxallus

Tasvirlar

Mavjud terilar ro'yxati:

Docker rasmlari

Rasmni (yoki butun omborni) rasmiy registrdan (tasvirlar ombori) yuklab oling:

Docker pull ubuntu: 14.04

Rasm ma'lumotlarini ko'rish:

Docker ubuntu-ni tekshiradi

Rasmni oʻchirish:

Docker CONTAINER_ID IMAGE_NAMEni topshirdi

Konteynerlar

Diqqat!

Docker konteynerini ishga tushirgandan so'ng, xizmatlar/demonlar (masalan, SSH, Supervisor va boshqalar) avtomatik ravishda ishga tushmaydi! Xatoni tuzatish uchun bir necha soat vaqt sarfladim: " ssh_exchange_identification: o'qing: ulanish tengdosh tomonidan qayta tiklandi"konteynerga SSH orqali ulanishga urinayotganda. Ammo shunchaki sshd demoni ishga tushmagani ma'lum bo'ldi. Konteynerni ishga tushirgandan so'ng kerakli demonlar yoki supervayzerni qo'lda ishga tushirishingiz kerak bo'ladi:

Docker exec CONTAINER_ID bash -c "service ssh start"

Barcha konteynerlar ro'yxati (boshlangan va to'xtatilgan):

Docker ps -a

Konteynerlarni olib tashlang:

Docker rm CONTAINER_ID CONTAINER_ID

Barcha konteynerlarni olib tashlang:

Docker rm $ (docker ps -aq)

Interaktiv rejimda Ubuntu 14.04 bilan Docker konteynerini yarating va ishga tushiring (ushbu konteyner qobig‘ini oching):

Docker run -it ubuntu bash docker run [options] image [buyruq] -i Interaktiv rejim, STDINni ochiq tuting -t Ajrating / yaratadi stdin va stdout-ni biriktiruvchi psevdo-TTY --name ID o‘rniga konteyner nomi -w Ishchi katalogni belgilang ( --workdir) -e Konteynerdagi muhit o'zgaruvchisini o'rnating -u Foydalanuvchi: konteyner ishga tushirilishi kerak bo'lgan guruh -v Xost tizimining fayli yoki katalogini konteynerga o'rnating -p Port(lar)ni yo'naltiring konteyner -<порт хост-системы>:<порт контейнера>(--publish =) --entrypoint ENTRYPOINT Dockerfile-dan standart buyruqni almashtiring

Eslatma

Konteynerni to'xtatmasdan TTYni ajratish uchun Ctr + P + Ctrl + Q tugmalarini bosing.

SSH portini yo'naltirish bilan demon rejimida Docker konteynerini yarating va ishga tushiring:

Docker run -itd -p 127.0.0.1:221:22 ubuntu

Konteyner yarating va ishga tushiring, so'ngra to'xtatgandan so'ng ushbu konteynerni o'chiring (disklarni tuzatish uchun foydalidir):

Docker run -i -t --rm ubuntu bash

To'xtatilgan konteynerni interaktiv tarzda ishga tushiring:

Docker start -i CONTAINER_ID

Demonizatsiya qilingan konteynerga ulaning:

Docker CONTAINER_ID ni biriktiradi

Docker buyruqlari

Foydalanish: docker COMMAND docker daemon [--help | ...] docker [--help | -v | --version] Konteynerlar uchun o'zini o'zi etarli ish vaqti. Variantlar: --config = ~ / .docker Mijoz konfiguratsiya fayllarining joylashuvi -D, --debug = noto'g'ri Nosozliklarni tuzatish rejimini yoqish --disable-legacy-registry = noto'g'ri Eski registrlarga murojaat qilmang -H, --host = Daemon soketi ( s) -h ga ulanish uchun, --help = noto'g'ri Chop etishdan foydalanish -l, --log-level = info Jurnalga yozish darajasini o'rnatish --tls = noto'g'ri TLS dan foydalaning; --tlsverify --tlscacert = ~ / .docker / ca.pem tomonidan nazarda tutilgan Ishonch sertifikatlari faqat shu CA tomonidan imzolangan --tlscert = ~ / .docker / cert.pem TLS sertifikat fayliga yo'l --tlskey = ~ / .docker / key.pem TLS kalit fayliga yo'l --tlsverify = noto'g'ri TLS dan foydalaning va masofaviy -v ni tekshiring, --version = noto'g'ri. Versiya ma'lumotlarini chop eting va chiqing Buyruqlar: biriktiring Ishlayotgan konteyner qurishga biriktiring Dockerfile topshirig'idan rasm yarating konteynerdan olingan yangi rasm "s o'zgarishlar cp Konteyner va mahalliy fayl tizimi o'rtasida fayllar/papkalarni nusxalash Yangi konteyner yaratish diff Konteynerdagi o'zgarishlarni tekshirish" fayl tizimi hodisalari Serverdan real vaqt hodisalarini olish Ishlayotgan konteynerda buyruqni ishga tushirish eksport konteyner fayl tizimini tar arxivi tarixi sifatida eksport qilish Tasvirlar tarixini koʻrsatish Rasmlar roʻyxatini import qilish Fayl tizimi tasvirini yaratish uchun tarballdan tarkibni import qilish Tizim boʻylab maʼlumotni tekshirish Konteyner yoki rasmda past darajadagi maʼlumotlarni qaytarish o'ldirish, ishlaydigan konteynerni o'ldirish l oad tar arxividan rasm yuklash yoki STDIN login Docker registriga roʻyxatdan oʻtish yoki tizimga kirish Docker registr jurnallaridan chiqish Konteyner tarmogʻi jurnallarini olish Docker tarmoqlarini boshqarish Docker tarmoqlarini pauza qilish Konteyner portidagi barcha jarayonlarni toʻxtatib turish Portlar roʻyxati yoki CONTAINER ps uchun maxsus xaritalash konteynerlar ro‘yxatini tortib olish Ro‘yxatga olish kitobidan rasm yoki omborni tortib olish Rasm yoki omborni registr nomiga o‘zgartirish Konteyner nomini o‘zgartirish Konteynerni qayta ishga tushirish rm Bir yoki bir nechta konteynerni olib tashlash rmi Bir yoki bir nechta tasvirni olib tashlash Ishga tushirish yangi konteynerda saqlash buyrug'i Tasvir(lar)ni tar arxiv qidiruviga saqlash Tasvirlarni boshlash uchun Docker Hub-dan izlash Bir yoki bir nechta to'xtatilgan konteynerlar statistikasini ishga tushirish Konteyner(lar)ning jonli oqimini ko'rsatish resursdan foydalanish statistikasini to'xtatish Ishlayotgan konteyner tegini to'xtatish Tasvirni ombor tepasiga teglash Konteynerning ishlayotgan jarayonlarini ko‘rsatish To‘xtatib turish Konteyner hajmidagi barcha jarayonlarni to‘xtatib qo‘yish Docker hajmlarini kutish. Agar konteyner toʻxtasa, uning chiqish kodini chop eting, buyruq haqida qoʻshimcha maʼlumot olish uchun “docker COMMAND --help” ni ishga tushiring.

Bir necha oy davomida men veb-loyihalarni ishlab chiqish/etkazib berishni tuzish uchun docker-dan foydalanmoqdaman. Men "Habrahabr" o'quvchilariga docker haqidagi kirish maqolasining tarjimasini taklif qilaman - "Dockerni tushunish".

Docker nima?

Docker - bu ilovalarni ishlab chiqish, yetkazib berish va ishlatish uchun ochiq platforma. Docker ilovalaringizni tezroq ishga tushirish uchun mo'ljallangan. Docker yordamida siz ilovangizni infratuzilmangizdan ajratib olishingiz va infratuzilmani boshqariladigan ilova sifatida ko'rishingiz mumkin. Docker kodingizni tezroq joylashtirishga, tezroq sinovdan o‘tkazishga, ilovalarni tezroq joylashtirishga va kod yozish va ishga tushirilgan kod o‘rtasidagi vaqtni qisqartirishga yordam beradi. Docker buni ilovalaringizni boshqarish va joylashtirishda yordam berish uchun jarayonlar va yordamchi dasturlardan foydalangan holda engil konteyner virtualizatsiya tizimi yordamida amalga oshiradi.

Asosan, docker konteynerda xavfsiz tarzda xavfsiz tarzda deyarli har qanday dasturni ishga tushirishga imkon beradi. Xavfsiz izolyatsiya bir vaqtning o'zida bir xil xostda bir nechta konteynerlarni ishlatish imkonini beradi. Qo'shimcha gipervisor yukisiz ishlaydigan konteynerning engil tabiati sizning uskunangizdan ko'proq foydalanish imkonini beradi.

Konteyner virtualizatsiya platformasi va vositalari quyidagi hollarda foydali bo'lishi mumkin:

  • ilovangizni (shuningdek, ishlatilgan komponentlarni) docker konteynerlariga joylashtirish;
  • ushbu konteynerlarni ishlab chiqish va sinovdan o'tkazish uchun jamoalaringizga tarqatish va yetkazib berish;
  • ushbu konteynerlarni ma'lumotlar markazlarida ham, bulutlarda ham ishlab chiqarishlaringizga yuklash.

Dockerdan nima uchun foydalanishim mumkin?

Ilovalaringizni tezda yuklang

Docker sizning rivojlanish tsiklingizni tashkil qilish uchun juda yaxshi. Docker ishlab chiquvchilarga ilovalar va xizmatlar bilan mahalliy konteynerlardan foydalanish imkonini beradi. Bu keyinchalik uzluksiz integratsiya va joylashtirish ish jarayoni bilan integratsiyalashish imkonini beradi.

Misol uchun, ishlab chiquvchilaringiz kodni mahalliy sifatida yozadilar va o'zlarining ishlanmalar to'plamini (docker tasvirlari to'plami) tengdoshlari bilan baham ko'radilar. Ular tayyor bo'lgach, ular kod va konteynerlarni sinov joyiga yuboradilar va kerakli testlarni o'tkazadilar. Sinov maydonidan ular kod va tasvirlarni ishlab chiqarishga yuborishlari mumkin.

O'rnatish va ochish osonroq

Konteynerga asoslangan docker platformasi foydali yukingizni portlashni osonlashtiradi. Docker konteynerlari mahalliy kompyuteringizda ham haqiqiy, ham ma'lumotlar markazidagi virtual mashinada va bulutda ishlashi mumkin.

Dockerning portativligi va engilligi ish yukingizni dinamik ravishda boshqarishni osonlashtiradi. Ilova yoki xizmatlarni joylashtirish yoki joylashtirish uchun dockerdan foydalanishingiz mumkin. Docker tezligi buni real vaqtda amalga oshirish imkonini beradi.

Yuqori yuklar va ko'proq foydali yuklar

Docker engil va tezdir. U gipervisorga asoslangan virtual mashinalarga mustahkam va tejamkor alternativani taqdim etadi. Bu, ayniqsa, o'z bulutingizni yoki xizmat sifatida platformani yaratish kabi yuqori yuk muhitlarida foydalidir. Ammo mavjud resurslardan ko'proq foydalanmoqchi bo'lsangiz, u kichik va o'rta ilovalar uchun foydalidir.

Dockerning asosiy komponentlari

Docker ikkita asosiy komponentga ega:
  • Docker: ochiq manbali virtualizatsiya platformasi;
  • Docker Hub: Docker konteynerlarini tarqatish va boshqarish uchun xizmat sifatidagi platformamiz.
Eslatma! Docker Apache 2.0 litsenziyasi ostida tarqatiladi.

Docker arxitekturasi

Docker mijoz-server arxitekturasidan foydalanadi. Docker mijozi sizning konteynerlaringizni yaratish, ishga tushirish va tarqatish yukini o'z zimmasiga oladigan Docker demoni bilan bog'lanadi. Mijoz ham, server ham bitta tizimda ishlashi mumkin, siz mijozni masofaviy docker demoniga ulashingiz mumkin. Mijoz va server soket yoki RESTful API orqali muloqot qiladi.

Docker demoni

Diagrammada ko'rsatilganidek, demon asosiy kompyuterda ishga tushiriladi. Foydalanuvchi server bilan bevosita muloqot qilmaydi, lekin buning uchun mijozdan foydalanadi.

Docker mijozi

Docker mijozi, docker dasturi Docker uchun asosiy interfeysdir. U foydalanuvchidan buyruqlar oladi va docker demoni bilan o'zaro aloqada bo'ladi.

Docker ichida

Docker nimadan iboratligini tushunish uchun siz uchta komponent haqida bilishingiz kerak:
  • tasvirlar
  • ro'yxatga olish (registrlar)
  • konteynerlar

Tasvirlar

Docker tasviri faqat o'qish uchun mo'ljallangan shablondir. Masalan, rasmda Apache bilan Ubuntu operatsion tizimi va undagi dastur bo'lishi mumkin. Tasvirlar konteyner yaratish uchun ishlatiladi. Docker yangi tasvirlarni yaratishni, mavjudlarini yangilashni osonlashtiradi yoki siz boshqa odamlar tomonidan yaratilgan rasmlarni yuklab olishingiz mumkin. Tasvirlar docker qurilishining tarkibiy qismidir.

Registr

Docker registrida tasvirlar saqlanadi. Rasmlarni yuklab olishingiz yoki yuklashingiz mumkin bo'lgan davlat va xususiy registrlar mavjud. Umumiy Docker registri Docker Hub hisoblanadi. Tasvirlarning katta to'plami mavjud. Ma'lumki, tasvirlarni siz yaratishingiz mumkin yoki siz boshqalar tomonidan yaratilgan tasvirlardan foydalanishingiz mumkin. Registrlar tarqatish komponentlari hisoblanadi.

Konteynerlar

Konteynerlar katalogga o'xshaydi. Konteynerlar ilovani ishga tushirish uchun kerak bo'lgan hamma narsani o'z ichiga oladi. Har bir konteyner rasmdan yaratilgan. Konteynerlarni yaratish, ishga tushirish, to'xtatish, ko'chirish yoki o'chirish mumkin. Har bir konteyner izolyatsiya qilingan va dastur uchun xavfsiz platforma hisoblanadi. Konteynerlar ishning tarkibiy qismidir.

Xo'sh, Docker qanday ishlaydi?

Hozircha biz buni bilamiz:
  • biz ilovalarimiz joylashgan tasvirlarni yaratishimiz mumkin;
  • ilovalarni ishga tushirish uchun tasvirlardan konteynerlar yaratishimiz mumkin;
  • biz tasvirlarni Docker Hub yoki boshqa tasvir registrlari orqali tarqatishimiz mumkin.
Keling, ushbu komponentlar bir-biriga qanday mos kelishini ko'rib chiqaylik.

Tasvir qanday ishlaydi?

Biz allaqachon bilamizki, rasm faqat o'qish uchun mo'ljallangan shablon bo'lib, undan konteyner yaratiladi. Har bir tasvir darajalar to'plamidan iborat. Docker ushbu qatlamlarni bitta rasmga birlashtirish uchun union fayl tizimidan foydalanadi. Birlashma fayl tizimi turli fayl tizimlaridagi (turli filiallar) fayllar va kataloglarni shaffof tarzda bir-biriga yopishib, izchil fayl tizimini yaratishga imkon beradi.

Dockerning engil bo'lishining sabablaridan biri bu kabi qatlamlardan foydalanishdir. Rasmni o'zgartirganda, masalan, ilovani yangilang, yangi qatlam yaratiladi. Shunday qilib, butun tasvirni almashtirmasdan yoki uni qayta tiklamasdan, chunki siz virtual mashina bilan bog'lanishingiz mumkin, faqat daraja qo'shiladi yoki yangilanadi. Va siz butunlay yangi tasvirni tarqatishingiz shart emas, faqat yangilanish tarqatiladi, bu esa tasvirlarni tarqatishni oson va tezroq qiladi.

Har bir ko'rinishning markazida asosiy ko'rinish mavjud. Masalan, ubuntu, Ubuntu asosiy tasviri yoki Fedora, Fedora asosiy tasviri. Yangi tasvirlarni yaratish uchun asos sifatida tasvirlardan ham foydalanishingiz mumkin. Misol uchun, agar sizda apache tasviri bo'lsa, uni veb-ilovalaringiz uchun asosiy tasvir sifatida ishlatishingiz mumkin.

Eslatma! Docker odatda rasmlarni Docker Hub registridan oladi.

Ushbu asosiy tasvirlardan Docker tasvirlari yaratilishi mumkin, biz ushbu tasvirlarni yaratish uchun tavsif bosqichlarini ko'rsatmalar deb ataymiz. Har bir ko'rsatma yangi tasvir yoki darajani yaratadi. Ko'rsatmalar quyidagicha bo'ladi:

  • ishga tushirish buyrug'i
  • fayl yoki katalog qo'shish
  • muhit o'zgaruvchisini yaratish
  • ushbu rasmning konteyneri ishga tushirilganda nima ishga tushishini belgilash

Ushbu ko'rsatmalar Docker faylida saqlanadi. Tasvirni yaratganingizda Docker ushbu Docker faylini o'qiydi, ushbu ko'rsatmalarga amal qiladi va yakuniy tasvirni qaytaradi.

Docker registrlari qanday ishlaydi?

Ro'yxatga olish kitobi docker tasvirlari uchun ombordir. Tasvirni yaratganingizdan so'ng, uni umumiy Docker Hub reestriga yoki shaxsiy reestringizga nashr qilishingiz mumkin.

Docker mijozi yordamida siz allaqachon chop etilgan rasmlarni qidirishingiz va konteynerlar yaratish uchun ularni dockerdan kompyuteringizga yuklab olishingiz mumkin.

Docker Hub umumiy va shaxsiy tasvirlar omborini taqdim etadi. Ommaviy omborlardan rasmlarni qidirish va yuklab olish hamma uchun mavjud. Shaxsiy omborlarning mazmuni qidiruv natijalariga kiritilmagan. Va faqat siz va sizning foydalanuvchilaringiz ushbu tasvirlarni qabul qilishingiz va ulardan konteyner yaratishingiz mumkin.

Konteyner qanday ishlaydi?

Konteyner operatsion tizim, foydalanuvchi fayllari va metama'lumotlardan iborat. Ma'lumki, har bir konteyner tasvirdan yaratilgan. Ushbu rasm dockerga konteynerda nima borligini, qaysi jarayonni ishga tushirishni, konteyner qachon ishga tushirilishini va boshqa konfiguratsiya ma'lumotlarini aytadi. Docker tasviri faqat o‘qish uchun mo‘ljallangan. Docker konteynerni ishga tushirganda, u rasmning tepasida (yuqorida aytib o'tilganidek, birlashma fayl tizimidan foydalangan holda) dastur ishlashi mumkin bo'lgan o'qish / yozish qatlamini yaratadi.

Konteyner ishga tushganda nima bo'ladi?

Docker dasturi yoki RESTful API yordamida docker mijozi docker demoniga konteynerni ishga tushirishni aytadi.

$ sudo docker run -i -t ubuntu / bin / bash

Keling, ushbu buyruq bilan shug'ullanamiz. Mijoz yangi konteyner ishga tushirilishini aytadigan ishga tushirish opsiyasi bilan docker buyrug'idan foydalanishni boshlaydi. Konteynerni ishga tushirish uchun minimal talablar quyidagi atributlardir:

  • konteyner yaratish uchun qaysi rasmdan foydalanish kerak. Bizning holatda, ubuntu
  • konteyner ishga tushirilganda ishlatmoqchi bo'lgan buyruq. Bizning holatda / bin / bash

Ushbu buyruqni bajarganimizda kaput ostida nima sodir bo'ladi?

Docker, tartibda quyidagilarni bajaradi:

  • ubuntu tasvirini yuklaydi: docker mahalliy kompyuterda ubuntu tasvirining mavjudligini tekshiradi va agar bo'lmasa, uni Docker Hub'dan yuklab oladi. Agar rasm mavjud bo'lsa, u holda konteyner yaratish uchun foydalanadi;
  • konteyner yaratadi: tasvir qabul qilinganda, docker undan konteyner yaratish uchun foydalanadi;
  • fayl tizimini ishga tushiradi va faqat o'qish darajasini o'rnatadi: konteyner fayl tizimida yaratiladi va rasmga faqat o'qish darajasi qo'shiladi;
  • tarmoq/ko'prikni ishga tushiradi: dockerga xost-mashina bilan aloqa qilish imkonini beruvchi tarmoq interfeysini yaratadi;
  • IP manzilni sozlash: manzilni topadi va o'rnatadi;
  • Belgilangan jarayonni boshlaydi: ilovangizni ishga tushiradi;
  • Ilovangiz natijasini qayta ishlaydi va chiqaradi: ilovangiz qanday ishlashini kuzatishingiz uchun ilovangizning standart kirish, chiqish va xato oqimini ulaydi va qayd qiladi.
Endi sizda ishlaydigan konteyner bor. Siz konteyneringizni boshqarishingiz, ilovangiz bilan ishlashingiz mumkin. Ilovani to'xtatishga qaror qilganingizda, idishni olib tashlang.

Ishlatilgan texnologiyalar

Docker Go'da yozilgan va yuqoridagi funksiyalarni amalga oshirish uchun Linux yadrosining ba'zi xususiyatlaridan foydalanadi.

Nom maydonlari

Docker biz konteynerlar deb ataladigan izolyatsiyalangan ish joylarini tashkil qilish uchun nomlar maydoni texnologiyasidan foydalanadi. Biz konteynerni ishga tushirganimizda, docker ushbu konteyner uchun nomlar bo'shliqlari to'plamini yaratadi.

Bu izolyatsiyalangan qatlamni yaratadi, konteynerning har bir tomoni o'z nom maydonida ishlaydi va tashqi tizimga kirish imkoniga ega emas.

Docker foydalanadigan ba'zi nomlar ro'yxati:

  • pid: jarayonni izolyatsiya qilish;
  • tarmoq: tarmoq interfeyslarini boshqarish;
  • ipc: IPC resurslarini boshqarish uchun. (ICP: InterProccess Communication);
  • mnt: o'rnatish nuqtalarini boshqarish;
  • UTC: yadro izolyatsiyasi va versiya ishlab chiqarishni boshqarish uchun (UTC: Unix timesharing tizimi).

Nazorat guruhlari

Docker shuningdek, cgroups texnologiyasidan yoki nazorat guruhlaridan foydalanadi. Ilovani alohida ishga tushirishning kaliti dasturni faqat siz taqdim qilmoqchi bo'lgan resurslar bilan ta'minlashdir. Bu konteynerlarning yaxshi qo'shni bo'lishini ta'minlaydi. Boshqaruv guruhlari mavjud apparat resurslarini almashish imkonini beradi va agar kerak bo'lsa, chegaralar va cheklovlarni o'rnatadi. Masalan, konteyner uchun mavjud xotira hajmini cheklang.

Union fayl tizimi

Union File Sysem yoki UnionFS - bu qatlamlar yaratish orqali ishlaydigan fayl tizimi bo'lib, uni juda engil va tez qiladi. Docker konteyner qurilgan bloklarni yaratish uchun UnionFS-dan foydalanadi. Docker bir nechta UnionFS lazzatlaridan foydalanishi mumkin, jumladan: AUFS, btrfs, vfs va DeviceMapper.

Konteyner formatlari

Docker ushbu komponentlarni biz konteyner formati deb ataydigan paketga birlashtiradi. Standart format libcontainer. Docker LXC yordamida an'anaviy Linux konteyner formatini ham qo'llab-quvvatlaydi. Docker kelajakda boshqa konteyner formatlarini qo'llab-quvvatlashi mumkin. Masalan, BSD Jails yoki Solaris Zones bilan integratsiya.

Biz mavzuga bir necha bor to'xtalib o'tdik va ularni qurish uchun ko'plab tizimlarni ko'rib chiqdik. Bugun biz Docker konteynerlari bilan yana bir ajoyib tizimni taqdim etamiz.

Keling, seriyaning keyingi maqolalarida foydali bo'ladigan asosiy funktsiyalarni tavsiflashdan boshlaylik va Docker arxitekturasini qisqacha eslaylik. Docker mijoz-server arxitekturasidan foydalanadi va u yordamida serverga kiradigan mijoz-docker yordam dasturidan iborat. RESTful API, va Linux operatsion tizimidagi demon (1-rasmga qarang). Docker Linux bo'lmagan operatsion tizimlarda ishlayotgan bo'lsa-da, ular ushbu maqolada ko'rib chiqilmaydi.

Docker-ning asosiy komponentlari:
    • Konteynerlar- ilovalar bajariladigan operatsion tizim texnologiyalari yordamida izolyatsiya qilingan foydalanuvchi muhitlari. Eng oddiy usul Docker konteynerini rasmdan ishga tushirilgan dastur sifatida belgilashdir. Aytgancha, aynan shu narsa Docker mafkuraviy jihatdan, masalan, LXC dan farq qiladi ( Linux konteynerlari), ular bir xil Linux yadro texnologiyalaridan foydalanishsa ham. Docker loyihasini ishlab chiquvchilari bitta konteyner bitta dastur degan tamoyilga sodiqdirlar.
    • Tasvirlar- faqat o'qish uchun mo'ljallangan dastur shablonlari. Mavjud tasvirlar ustiga yangi darajalar qo'shilishi mumkin, ular birgalikda fayl tizimini ifodalaydi, oldingi darajani o'zgartiradi yoki to'ldiradi. Odatda, yangi rasm allaqachon ishlayotgan konteynerni mavjud bo'lgan yangi tasvirga saqlash yoki yordamchi dastur uchun maxsus ko'rsatmalar yordamida yaratiladi. Fayl tizimi darajasida konteynerning turli darajalarini ajratish uchun, AUFS, btrfs, vfs va Device Mapper... Agar siz Docker bilan birgalikda foydalanmoqchi bo'lsangiz SELinux, keyin talab qilinadi Qurilma xaritasi.
    • Registrlar omborlarni o'z ichiga olgan ( ombori) tasvirlar, - tarmoq tasvirlarini saqlash joylari. Ular ham xususiy, ham davlat bo'lishi mumkin. Eng mashhur ro'yxatga olish kitobi.

GNU / Linux operatsion tizimlari konteynerlarni ajratish uchun standart Linux yadro texnologiyalaridan foydalanadi, masalan:
  • Nom maydonlari ( Linux nom maydonlari).
  • Nazorat guruhlari ( Guruhlar).
  • Imtiyozlarni boshqarish vositalari ( Linux imkoniyatlari).
  • Qo'shimcha, majburiy xavfsizlik tizimlari, masalan AppArmor yoki SELinux.

Keling, sanab o'tilgan texnologiyalarni biroz batafsilroq ko'rib chiqaylik.

Nazorat guruhi mexanizmi (Guruhlar) tizim resurslarini taqsimlash, ustuvorlashtirish va boshqarishni nozik sozlash vositasini taqdim etadi. Boshqaruv guruhlari Linux yadrosida amalga oshiriladi. Zamonaviy taqsimotlarda nazorat guruhini boshqarish orqali amalga oshiriladi systemd, ammo kutubxona yordamida boshqarish mumkinligicha qolmoqda libcgroup va kommunal xizmatlar cgconfig... Asosiy guruh ierarxiyasi (shuningdek, boshqaruvchilar deb ataladi) quyida keltirilgan:

  • blkio- kiritish-chiqarish operatsiyalari va blokirovka qurilmalariga kirish chegaralarini belgilaydi;
  • Markaziy protsessor- jarayonni rejalashtiruvchidan foydalanib, protsessor vaqtini vazifalar o'rtasida taqsimlaydi;
  • cpuacct- CPU resurslaridan foydalanish bo'yicha avtomatik hisobotlarni yaratadi. Tekshirish moslamasi bilan birgalikda ishlaydi Markaziy protsessor yuqorida tavsiflangan;
  • cpuset- vazifalarga ma'lum protsessorlar va xotira tugunlarini belgilaydi;
  • qurilmalar- vazifalarning muayyan qurilmalarga kirishini tartibga soladi;
  • muzlatgich- vazifalarni to'xtatadi yoki davom ettiradi;
  • xotira- nazorat guruhining vazifalari bo'yicha xotiradan foydalanish bo'yicha limitlarni o'rnatadi va hisobotlarni yaratadi;
  • net_cls- sinf identifikatori bilan tarmoq paketlarini teglashni amalga oshiradi ( tasniflangan). Bu transport boshqaruvchisiga ( tc buyrug'i) va xavfsizlik devori ( iptables) trafikni qayta ishlashda ushbu teglarni hisobga olish;
  • perf_event- yordamchi dastur yordamida nazorat guruhlarini kuzatish imkonini beradi perf;
  • bigtlb- katta virtual xotira sahifalaridan foydalanish va ularga cheklovlar qo'llash imkonini beradi.

Nom maydonlari, o'z navbatida, ular resurslarni taqsimlashni emas, balki yadro ma'lumotlar tuzilmalariga kirishni nazorat qiladi. Aslida, bu jarayonlarning bir-biridan ajratilishi va parallel ravishda "bir xil" bo'lish qobiliyatini anglatadi, lekin jarayonlar, foydalanuvchilar va tarmoq interfeyslari ierarxiyasining bir-biriga mos kelmasligi. Agar so'ralsa, turli xizmatlar hatto o'zlariga ega bo'lishi mumkin orqaga qaytish interfeyslari.

Docker tomonidan ishlatiladigan nom maydonlariga misollar:
  • PID, jarayon identifikatori- jarayonlar ierarxiyasini izolyatsiya qilish.
  • NET, tarmoq- tarmoq interfeyslarini izolyatsiyalash.
  • Kompyuter, Interprocess Communication- jarayonlar o'rtasidagi o'zaro ta'sirni boshqarish.
  • MNT, tog'- o'rnatish nuqtalarini boshqarish.
  • UTS, Unix Timesharing tizimi- yadro va versiya identifikatorlarini izolyatsiya qilish.

Mexanizm deb ataladi Imkoniyatlar ildiz foydalanuvchining imtiyozlarini kichik imtiyozlar guruhlariga bo'lish va ularni alohida belgilash imkonini beradi. Ushbu funktsiya GNU / Linuxda versiyadan beri paydo bo'lgan yadrolari 2.2. Dastlab, konteynerlar cheklangan imtiyozlar to'plami bilan boshlanadi.

Docker buyrug'i parametrlarini yoqishingiz va o'chirib qo'yishingiz mumkin:
  • o'rnatish operatsiyalari;
  • rozetkalarga kirish;
  • Fayl tizimida ba'zi operatsiyalarni bajarish, masalan, fayllarning atributlarini yoki egasini o'zgartirish.

Man sahifasidan foydalanib, imtiyozlar haqida ko'proq bilib olishingiz mumkin. IMKONIYATLAR (7).

Docker o'rnatilmoqda

Keling, misol sifatida CentOS yordamida Docker-ni o'rnatishni ko'rib chiqaylik. CentOS bilan ishlashda sizda tanlov bor: u-ning so'nggi versiyasidan foydalaning oldingi oqim yoki Red Hat qo'shimchalari bilan CentOS loyihasi tomonidan yaratilgan versiya. O'zgarishlarning tavsifi sahifada mavjud.

Asosan, bu Red Hat ishlab chiquvchilari tomonidan taklif qilingan, ammo asosiy kodga hali qabul qilinmagan yangi yuqori oqim versiyalaridagi tuzatishlarning teskari ko'chirilishi. Ushbu yozish paytidagi eng sezilarli farq shundaki, yangi versiyalarda docker xizmati uch qismga bo'lingan: demon docker, containerd va runc... Red Hat hali bu o'zgarishni barqaror deb hisoblamaydi va 1.10 bajariladigan monolit versiyasini jo'natadi.

O'rnatish uchun ombor sozlamalari yuqori oqim versiyalari, shuningdek, boshqa tarqatish va operatsion tizimlarga o'rnatish bo'yicha ko'rsatmalar rasmiy veb-saytdagi o'rnatish qo'llanmasida keltirilgan. Xususan, CentOS 7 ombori sozlamalari:

# cat /etc/yum.repos.d/docker.repo nomi = Docker Repository baseurl = https: //yum.dockerproject.org/repo/main/centos/7 yoqilgan = 1 gpgcheck = 1 gpgkey = https: // yum .dockerproject.org / gpg

# mushuk /etc/yum.repos.d/docker.repo

nom = ombor

baseurl = https: / / yum .dockerproject .org / repo / main / centos / 7

yoqilgan = 1

gpgcheck = 1 gpgkey = https: / / yum .dockerproject .org / gpg

Kerakli paketlarni o'rnating va xizmatni ishga tushiring va yoqing:

# yum install -y docker-engine # systemctl start docker.service # systemctl enable docker.service

# yum install -y docker-engine

# systemctl docker.service dasturini ishga tushiring

# systemctl docker.service ni yoqing

Xizmat holatini tekshirish:

# systemctl holati docker.service

# systemctl holati docker.service

Docker va atrof-muhit haqidagi tizim ma'lumotlarini ham ko'rishingiz mumkin:

# docker ma'lumoti

Agar siz shunga o'xshash buyruqni ishlatsangiz va Docker-ni CentOS omborlaridan o'rnatsangiz, dasturiy ta'minotning eski versiyasidan foydalanish tufayli kichik farqlarni ko'rasiz. Chiqishdan docker ma'lumotlari ma'lumotlarni saqlash uchun haydovchi sifatida nima ishlatilishini bilib olamiz Qurilma xaritasi, va saqlash sifatida - fayl / var / lib / docker /:

# ls -lh / var / lib / docker / devicemapper / devicemapper / data -rw -------. 1 ta ildiz ildizi 100G 27 dekabr 12:00 / var / lib / docker / devicemapper / devicemapper / data

# ls -lh / var / lib / docker / devicemapper / devicemapper / data

Rw - - - -. 1 ta ildiz ildizi 100G 27 dekabr 12:00 / var / lib / / devicemapper / devicemapper / data

Demonni ishga tushirish opsiyalari, odatda, CentOS-da bo'lgani kabi, saqlanadi / etc / sysconfig /... Bunday holda, docker faylining nomi. Tegishli chiziq / etc / sysconfig / docker variantlarni tavsiflash:

OPTIONS = "- selinux yoqilgan --log-driver = jurnalda"

Agar siz docker buyrug'ini root bo'lmagan foydalanuvchi yoki docker guruhining a'zosi sifatida ishlatgan bo'lsangiz, quyidagi kabi xatoni ko'rasiz:

$ docker MySQL qidiruvi

$ mysql-ni qidiring

Ogohlantirish: demondan standart roʻyxatga olish kitobining soʻnggi nuqtasini ololmadi (Docker demoniga ulanib boʻlmadi. Docker demoni shu xostda ishlayaptimi?). Tizim standartidan foydalanish: https: // indeks. docker.io/v1/

Docker demoniga ulanib bo‘lmadi. Docker demoni ushbu xostda ishlayaptimi?

E'tibor bering, foydalanuvchini docker guruhiga qo'shish, bu foydalanuvchini ildiz guruhiga qo'shish bilan barobar.

RHEL/CentOS ishlab chiquvchilari Docker daemon xavfsizligiga yuqori oqimdagi Docker dasturchilarining o'zlariga qaraganda biroz boshqacha yondashuvga ega. Red Hat-ning yondashuvi haqida ko'proq ma'lumot olish uchun RHEL dasturchisi Den Uolshning maqolasiga qarang.

Agar siz Docker-ning "standart" xatti-harakatlarini CentOS omborlaridan o'rnatishni istasangiz (ya'ni rasmiy hujjatlarda tasvirlangan), u holda siz docker guruhini yaratishingiz va demonni ishga tushirish variantlarini qo'shishingiz kerak:

OPTIONS = "- selinux yoqilgan --log-driver = jurnal ↵ --group = docker"

OPTIONS = "--selinux-enabled --log-driver = jurnal ↵ --group = docker"

Keyin biz xizmatni qayta ishga tushiramiz va docker soket fayli root emas, balki docker guruhiga tegishli ekanligini tekshiramiz:

# ls -l /var/run/docker.sock

Rasmlar va Docker teglarini topish

Keling, Docker Hub-da konteyner topishga harakat qilaylik.

$ docker qidiruvi haproksi

$ Haproxy qidiruvi


Ushbu chiqishda biz bir qator HA proksi tasvirlarining ro'yxatini oldik. Ro'yxatdagi eng yuqori element rasmiy ombordagi HA proksi-serveridir. Bunday tasvirlar nomda hech qanday belgi yo'qligi bilan ajralib turadi «/» foydalanuvchi ombori nomini konteyner nomidan ajratish. Rasmiyning orqasidagi misol ochiq foydalanuvchi omborlaridan ikkita haproksi tasvirni ko'rsatadi eeacms va million12.

Quyidagi ikkitasi kabi rasmlarni Docker Hub’da ro‘yxatdan o‘tish orqali o‘zingiz yaratishingiz mumkin. Rasmiylar Docker, Inc homiyligidagi maxsus guruh tomonidan qo'llab-quvvatlanadi. Rasmiy omborning xususiyatlari:

  • Bular eng yaxshi amaliyotlar va eng yaxshi amaliyotlarga asoslangan foydalanish uchun tavsiya etilgan rasmlardir.
  • Ular ko'proq moslashtirish uchun boshlang'ich nuqta bo'lishi mumkin bo'lgan asosiy tasvirlardir. Masalan, Ubuntu, CentOS yoki kutubxonalar va ishlab chiqish muhitlarining asosiy tasvirlari.
  • Ruxsat etilgan zaifliklarga ega dasturiy ta'minotning so'nggi versiyalarini o'z ichiga oladi.
  • Bu mahsulotlarning rasmiy tarqatish kanali. Faqat rasmiy rasmlarni qidirish uchun siz variantdan foydalanishingiz mumkin – “Rasmiydir = rost” filtri buyruqlar docker qidiruvi.

Buyruq chiqishidagi yulduzcha docker qidiruvi tasvirning mashhurligiga mos keladi. Bu tugmaning analogidir Kabi ijtimoiy tarmoqlarda yoki boshqa foydalanuvchilar uchun xatcho'plar. Avtomatlashtirilgan tasvir Docker Hub yordamida maxsus skriptdan avtomatik ravishda qurilganligini anglatadi. Odatda, siz avtomatik ravishda to'plangan rasmlarga ustunlik berishingiz kerak, chunki uning mazmuni tegishli fayl bilan tanishish orqali tekshirilishi mumkin.

Rasmiy HA proksi tasvirini yuklab oling:

$ docker pull haproxy Standart tegdan foydalanish: eng yangi

Rasmning to'liq nomi quyidagicha ko'rinishi mumkin:

[foydalanuvchi nomi] rasm nomi [: teg]

Buyruq yordamida yuklab olingan rasmlar ro'yxatini ko'rishingiz mumkin docker tasvirlari:

Konteynerlarni ishga tushirish

Konteynerni ishga tushirish uchun rasmni yuklab olish shart emas. Agar mavjud bo'lsa, u avtomatik ravishda yuklanadi. Keling, Ubuntu bilan konteynerni ishga tushirishga harakat qilaylik. Biz omborni ro'yxatga kiritmaymiz va Canonical tomonidan qo'llab-quvvatlanadigan so'nggi rasmiy rasmni yuklab olamiz.

$ docker run -it ubuntu [elektron pochta himoyalangan]:/#

$ run - bu ubuntu

root @ d7402d1f7c54: / #

Jamoadan tashqari yugur, biz ikkita variantni aniqladik: -i- konteyner interaktiv tarzda ishlashi kerak va -t- psevdo-terminalni ajratib ko'rsatish kerak. Natijadan ko'rinib turibdiki, biz konteynerda root foydalanuvchi huquqlariga egamiz va konteyner identifikatori xost nomi sifatida ko'rsatiladi. Ikkinchisi barcha konteynerlar uchun to'g'ri kelmasligi mumkin va konteyner ishlab chiqaruvchisiga bog'liq. Keling, bu haqiqatan ham Ubuntu muhiti ekanligini tekshirib ko'raylik:

[elektron pochta himoyalangan]: / # cat / etc / * reliz | grep DISTRIB_DESCRIPTION DISTRIB_DESCRIPTION = "Ubuntu 16.04.1 LTS"

root @ d7402d1f7c54: / # mushuk / etc / * chiqarish | grep DISTRIB_DESCRIPTION

DISTRIB_DESCRIPTION = "Ubuntu 16.04.1 LTS"

Nomni bekor qilish buyrug'i -a bunday maqsadlar uchun u ishlamaydi, chunki konteyner xost yadrosi bilan ishlaydi.

Variantlardan biri, qo'shimcha ravishda, qulaylik uchun murojaat qilish mumkin bo'lgan noyob konteyner nomi bo'lishi mumkin Konteyner identifikatori. Sifatida beriladi -Ism<имя>. Agar parametr o'tkazib yuborilsa, nom avtomatik ravishda yaratiladi.

Avtomatik ravishda yaratilgan konteyner nomlari semantik yukni ko'tarmaydi, ammo qiziq fakt sifatida shuni ta'kidlash mumkinki, nomlar tasodifiy ravishda sifatdosh va taniqli olim, ixtirochi yoki xaker nomidan yaratilgan. Jeneratör kodida har bir nom uchun siz berilgan raqam nima uchun ma'lum bo'lganligining qisqacha tavsifini topishingiz mumkin.

Buyruq yordamida ishlaydigan konteynerlar ro'yxatini ko'rishingiz mumkin. Buning uchun ikkinchi terminalni oching:

Biroq, agar biz buyruqni bersak, MySQL tasviridan yaratilgan konteynerni topa olmaymiz. Variantdan foydalanamiz -a Bu faqat ishlaydigan konteynerlarni emas, balki barcha konteynerlarni ko'rsatadi:

Shubhasiz, konteynerni ishga tushirishda kerakli parametrlar ko'rsatilmagan. Konteynerni ishga tushirish uchun zarur bo'lgan muhit o'zgaruvchilari tavsifi uchun Docker Hub-dagi rasmiy MySQL tasviriga qarang. Variantdan foydalanib yana urinib ko'raylik -e konteynerdagi muhit o'zgaruvchilarini o'rnatadigan:

$ docker run --name mysql-test ↵ -e MYSQL_ROOT_PASSWORD = docker -d mysql

Oxirgi parametr - biz konteyner ichida bajarmoqchi bo'lgan buyruq. Bunday holda, bu buyruq tarjimonidir. Bash... Variantlar -bu maqsadi bo'yicha buyruqda ilgari ishlatilganlarga o'xshash docker yugurish.

Aslida, bu buyruqni konteynerga ishga tushirgandan so'ng mysql-test yana bir jarayon qo'shiladi - bash... Buni pstree buyrug'i yordamida aniq ko'rish mumkin. Buyruqning qisqartirilgan chiqishi docker exec:

Docker ichida faqat Linux, va eksperimental ravishda FreeBSD. Linuxda mahalliy va FreeBSD da eksperimental ravishda ishlaydi. MacOSX ostida, Windows - virtual mashina orqali.

Docker ikki tomonlama izolyatsiyalangan. Docker konteyneri ichidagi narsalarni operatsion tizimdan ajratish va operatsion tizimni Docker ichidagi narsalardan ajratish. Izolyatsiya barcha fayllarni, portlarni, ustuvorliklarni izolyatsiya qilishni anglatadi.

Bu deyarli virtual mashina. Deyarli, lekin unchalik emas.

"Tobelik jahannami" degan narsa bor. Kompyuterda o'rnatilgan har qanday dastur qaramlikni tortadi(konfiguratsiya fayllari, odatda aktiv deb ataladigan statik fayllar, yordamchi utilitalar/xizmatlar, kutubxonalar va boshqalar). Ushbu kutubxonalar / kommunal xizmatlar / xizmatlarning bir qatori bir-biriga mos kelmaydigan. Va bu kutubxonalar / kommunal xizmatlar / xizmatlarning har biri o'ziga xos bog'liqliklarga ega ekanligini hisobga olsak, vaziyat yanada yomonroq.

Misol uchun, biz odatda faqat Ubuntu 14.04 da (va Debian 7 da ko'rinadi) kompilyatsiya qiladigan Yandex.Cocaine-dan foydalanamiz. Lekin CentOS 6, 7, Debian 8, FreeBSD 9, 10, Ubuntu 15, 16 va boshqalar ostida emas - uni kompilyatsiya qilish mumkin emas... Biz Docker-da ushbu operatsion tizimlarda ishlaymiz.

Boshqa tomondan, va shu bilan birga, siz boshqa, zamonaviyroq dasturiy ta'minotni o'rnatishingiz kerak. Va ayni paytda kattaroq. Va biz hatto Linuxning jiddiy turli xil versiyalari haqida gapirmayapmiz. Misol uchun, ba'zi dasturlar kamida Ubuntu 14.10, boshqalari esa kamida Linux 14.04 talab qiladi.

Docker - bu operatsion tizimning individual versiyasi bilan individual muhitda bitta dastur. Puf idishlari hisobiga, agar siz butun yo'l davomida bitta ildizdan foydalansangiz, keyin Docker konteynerining o'lchami ikkilik fayl hajmidan bir necha kilobayt kattaroqdir, Docker ostida ishga tushirish.

Shunday qilib, bizda xuddi bizning operatsion tizimimizda ishlaydigan ikkilik fayl mavjud.

Siz aytishingiz mumkin - ha, ha, bu uzoq vaqtdan beri ma'lum virtual mashina. Lekin yo'q, unday emas. Bu konteynerlar deb ataladigan narsalar. Bu virtual mashinaning hidiga o'xshamaydi. Windows va MacOSXdan tashqari, Bu erda virtual mashinasiz ishlash faqat eksperimental ravishda mumkin va bu operatsion tizimlarda norma Docker-dan to'liq virtual mashina ichida foydalanish hisoblanadi.

Ammo Docker VM'lari faqat ishlab chiqish uchun ishlatiladi. Docker virtual mashinalari ishlab chiqarishda ishlash uchun ishlatilmaydi.

Docker operatsion tizim konteynerlaridan foydalanadi. Linuxda LXC, FreeBSD da Jails. Konteyner - bu operatsion tizimning asosiy qismidan ajratilgan operatsion tizim maydoni. Konteynerning o'z katalog daraxti (shu jumladan tizim / dev, / bin, / sbin va boshqalar), o'z tarmoq portlari va boshqalar mavjud.

Ammo u to'liq virtualizatsiyadan foydalanmaydi. Bu resurslarni sezilarli darajada tejaydi. 100 ta to'liq virtual mashinani ishga tushiring u hatto kuchli serverda ham ishlamaydi. Lekin 100 ta Docker konteynerini hatto kuchsiz uy mashinasida ham ishlatish mumkin.

To'g'ri, to'liq bo'lmagan virtualizatsiyadan foydalanish konteynerlar ichidagi operatsion tizimlardan foydalanishni cheklaydi. Qoida tariqasida, shunday Linux yoki FreeBSD ning maxsus tayyorlangan versiyalari... Bu maxsus o'qitilgan. Windows - printsipial jihatdan, konteynerda ishlash mumkin emas.

Konteynerlar Dockerdan oldin ham mavjud edi. Docker, to'g'ridan-to'g'ri aytganda, shunchaki juda qulay vositalar to'plami konteyner virtualizatsiyasini boshqarish uchun birlashtiring. Lekin juda qulay.

Nima uchun u ishlatiladi?

Dropbox, Facebook va boshqa gigantlarning barcha turlari o'z xizmatlarida 1 million xil dasturlarni ishga tushirgan yigitlar bunga duch kelishdi. hamma joyda bir xil operatsion tizim sozlamalarini kafolatlash mumkin emas. Va bu juda muhim.

Shu darajada haqiqiy serverda mukammal yozilgan va sinovdan o'tgan dastur oldindan aytib bo'lmaydigan tarzda harakat qila boshlaydi.

Shu sababli, ushbu aqlli yigitlardan biri yangi kontseptsiyani tug'dirdi - serverlardagi har bir dastur o'zining shaxsiy muhitida, individual operatsion tizim sozlamalari bilan ishlaydi.

Bundan tashqari - dastlab dasturiy ta'minot ishlab chiqaruvchisi dasturni Docker konteynerida sinab ko'radi, muayyan sozlamalar bilan. VA bir xil (yoki bir xil sozlamalar bilan) Docker konteynerida dastur serverga jo'naydi.

Bu ishlab chiqish muhiti va ish vaqti muhitining ancha katta identifikatsiyasini kafolatlash imkonini beradi.

Bundan oldin odamlar azob chekishdi, ayyor montajchilar bilan kelishdi ...

Keyinchalik OSdagi muhitni tartibga solishga urinishlarga tupurdi- va endi kontseptsiya quyidagicha - dasturlarni serverlarga o'rnatish individual moslashtirilgan operatsion tizimlari bilan birgalikda- ya'ni konteynerlar ichida. 1 konteyner = 1 OS sozlamalari = 1 ta dastur ichida.

Boshqa so'z bilan:

  • Nosozliklarni tuzatish uchun Docker konteyneridan foydalanish kerak.
  • Xuddi shu Docker konteyneri serverda ishlatilishi kerak.

Bu sozlamalar bilan bezovta qilmaslik imkonini beradi. "server uchun" mahalliy sifatida ishlab chiqaruvchining mashinasida. Bu sizga ishlab chiquvchining mashinasida to'liq rivojlanish imkonini beradi bir vaqtning o'zida turli xil dasturlar bu talab qiladi mos kelmaydigan operatsion tizim sozlamalari... Bu sizga serverdagi dastur ishlab chiquvchining mashinasida bo'lgani kabi harakat qilishiga ko'proq kafolatlar berishga imkon beradi. Bu Linux ostida qulay "shaffof" sinov bilan Windows / MacOSX uchun ishlab chiqish imkonini beradi.

Docker yaratish/sozlash uchun qo'llaniladi Linux uchun faqat server dasturi(FreeBSD ostida eksperimental). Smartfonlar uchun emas. Va agar ish stollari mavjud bo'lsa, unda faqat GUI bo'lmagan dasturiy ta'minot.

Docker ruxsat berganicha Ishlab chiquvchilar va administratorlarning ishini soddalashtiring va natija sifatini bir zarbada yaxshilang- endi Docker-da faol. Docker yordamida yaratilgan ilovalarni joylashtirishni boshqarish uchun juda ko'p asboblar tog'i ixtiro qilingan. Agar ilgari 1000 ta serverda 10 000 ta dasturni ishga tushirish uchun sizga kamida 3 ta yuqori malakali devop kerak edi. qanday qilib tavsiflangan buni qo'g'irchoq, tuz, oshpaz, Ansible-da qilish va hatto undan keyin ham kafolatlar yo'q edi, barchasi oylar davomida sinovdan o'tkazildi. Endi Docker yordamida hatto bitta malakali ishlab chiqaruvchi ham o'n minglab serverlarda millionlab dasturlarni ishga tushirishi mumkin. Bularning barchasi odatdagidek boshlanishiga katta kafolat bilan.

Ishlab chiquvchi Docker-da konteynerlarni tayyorlaydi va keyin ularni administratorga o'tkazadi, degan noto'g'ri taassurot paydo bo'lishi mumkin.
To'g'ri metodologiya hali ham boshqacha:

Ishlab chiquvchi o'zining barcha natijalarini CI tizimiga yuboradi (odatda git orqali)
Har bir yangi majburiyat uchun CI sinov uchun rasm yaratish uchun Docker-dan foydalanadi.
Agar sinovlar o'tsa, xuddi shu Docker tasviri ishlab chiqarishga qo'yish uchun yuboriladi.
Yoki biroz boshqacha tarzda, ishlab chiqarishda manbalar kerak bo'lmagan kompilyatsiya qilingan tizimlarda: Docker-da kompilyatsiya muhiti o'rnatiladi va sinov uchun ikkinchi rasm allaqachon yuborilgan kompilyatsiya qilingan mahsulot bilan joylashtiriladi. ishlab chiqarish.

Ya'ni, ishni to'g'ri tashkil etish bilan ishlab chiquvchi tasvir qanday bo'lishiga ta'sir qila olmaydi / ta'sir qilmasligi kerak.
Ammo sinov muhitida (serverda ishlaydi, katta guruhlardagi ishlab chiquvchiga kira olmaydi) va ishlab chiqarishda u shunchaki ishlatiladi. bir xil tasvir.

Asosiy g'oya shundaki, biz sinovdan o'tkazgan narsamiz ishlab chiqarish serverida ishlayotganimizdir. Yakkama-yakka, shu jumladan bir xil fayllar (bir xil emas, aynan bir xil).

Docker - bu ilovalarni ishga tushirish uchun kerak bo'lgan hamma narsani ta'minlash uchun konteynerlardan foydalanadigan mashhur vosita. Docker konteynerlaridan foydalangan holda, ilovangiz qaysi mashinada ishlayotgan bo'lsangiz ham xuddi shunday ishlashiga ishonch hosil qilishingiz mumkin.

Ushbu qo'llanmada siz konteynerlar va Docker tasvirlarini ulash, konteynerlarni qanday o'rnatish, ishga tushirish, to'xtatish va o'chirish haqida bilib olasiz.

Umumiy koʻrinish

Docker tasviri konteynerlarni yaratish uchun ishlatiladigan qandaydir shablon sifatida qarash mumkin. Tasvirlar odatda ildiz fayl tizimidan boshlanadi, unga turli o'zgarishlar va ularning mos keladigan ishga tushirish parametrlari so'ngra yuqoridagi qatlamlarga qo'shiladi. Oddiy Linux distributivlaridan farqli o'laroq, Docker tasviri odatda dasturni ishga tushirish uchun zarur bo'lgan qismlarni o'z ichiga oladi. Rasmlarda statuslar yo'q va ular o'zgarmaydi. Ular Docker konteynerlarining boshlang'ich nuqtasi, asosi desak to'g'riroq bo'lar edi.

Tasvirlar docker run buyrug'iga kirganingizdan so'ng jonlanadi - u darhol tasvir ustiga yangi o'qish / yozish qatlamini qo'shish orqali konteyner yaratadi. Faqat o'qish uchun mo'ljallangan darajalarning bu birikmasi (uning ustiga o'qish-yozish darajasi qo'shiladi) birlashtirilgan fayl tizimlarini kaskadlovchi fayl tizimi sifatida ham tanilgan UnionFS. Har safar ishlaydigan konteynerdagi mavjud faylga o'zgartirish kiritilganda, fayl faqat o'qish uchun mo'ljallangan maydondan o'zgarishlar qo'llaniladigan o'qish-yozish darajasiga ko'chiriladi. Va endi asl fayl o'qish / yozish versiyasi tomonidan yashiringan, ammo u o'chirilmaydi. O'qish / yozish darajasidagi bunday o'zgarishlar faqat ushbu alohida konteynerda mavjud. Konteyner o'chirilganda, barcha o'zgarishlar ham yo'qoladi (agar ular saqlanmasa).

Konteynerlar bilan ishlash

Har safar docker run buyrug'idan foydalanganda siz ko'rsatgan rasmdan yangi konteyner yaratiladi. Keyinchalik aniq misollar quyida muhokama qilinadi.

1-qadam: ikkita konteyner yaratish

Quyidagi docker run buyrug'i Ubuntu tasvirini asos sifatida ishlatadigan yangi konteyner yaratadi. -t kaliti terminalni ta'minlaydi va -i kaliti u bilan o'zaro ta'sir qilish imkoniyatini beradi. Konteynerga kirish uchun siz standart bash buyrug'idan foydalanishingiz mumkin. Ya'ni, siz quyidagilarni kiritishingiz mumkin:

$ docker run -ti ubuntu

$ docker run -i -t ubuntu: 14.04 / bin / bash

(ikkinchi holatda, siz konteyner ichida / bin / bash buyrug'ini ishga tushirasiz va siz o'zingizni avtomatik ravishda konteyner ichida topasiz)

Buyruqning satri siz konteyner ichida superuser sifatida ekanligingizni tasdiqlaydi. @ belgisidan so'ng siz bo'lgan konteyner identifikatorini ko'rasiz:

[elektron pochta himoyalangan]:/#

Endi, / tmp katalogini tahrirlash uchun echo buyrug'idan foydalaning va keyin o'zgarishlar cat buyrug'i yordamida yozilganligini tekshiring:

Echo "Misol1"> /tmp/Misol1.txt mushuk /tmp/Misol1.txt

Ekranda siz quyidagilarni ko'rishingiz kerak:

Endi konteynerdan chiqing:

Berilgan buyruq bajarilgandan so'ng va siz buyruq qatoridan chiqqaningizdan so'ng, Docker konteyneri ishlashni to'xtatdi. Agar siz docker ps buyrug'idan foydalansangiz, buni ko'rishingiz mumkin:

Ishlayotgan konteynerlar orasida siz yuqorida ishlatilgan konteynerni ko'rmaysiz:

KONTEYNER identifikatori tasvir buyrug'i yaratilgan STATUS PORTLAR NOMLARI

Biroq, ishlayotgan va to'xtatilgan barcha konteynerlarni ko'rish uchun -a kalitini qo'shishingiz mumkin va keyin sizga avval ishlagan konteyner ko'rsatiladi:

$ docker ps -a KONTEYNER ID TASVIR BUYRUQ YARATILGAN STATUS PORTLAR NOMI 11cc47339ee1 ubuntu "/ bin / bash" 9 daqiqa oldin Chiqish (127) 10 soniya oldin small_sinoussi

Konteyner yaratilganda uning identifikatori va avtomatik ravishda yaratilgan nomi bo'ladi. Bunday holda, 11cc47339ee1 - konteyner identifikatori va small_sinoussi - yaratilgan nom. Ps -a buyrug'i ushbu ma'lumotlarni, shuningdek, konteyner yaratilgan tasvirni (bu holda ubuntu), konteyner qachon yaratilganini (9 daqiqa oldin) va unda qanday buyruq bajarilganligini ("/ bin /) ko'rsatadi. bash"). Siz konteyner holatini ham ko'rishingiz mumkin (siz uni 10 soniya oldin tark etgansiz) Agar konteyner hali ham ishlayotgan bo'lsa, siz "Yuqoriga" holatini va u allaqachon ishlayotgan vaqtni ko'rasiz.

Endi konteyner yaratish uchun yana buyruqni kiritishingiz mumkin:

$ docker run -ti ubuntu

Buyruq o'tgan safargidek ko'rinishiga qaramay, u butunlay yangi konteyner yaratadi - u boshqa identifikatsiya raqamiga ega bo'ladi va agar siz avval tahrir qilgan Example1 faylining mazmunini ko'rib chiqmoqchi bo'lsangiz, siz toping.

[elektron pochta himoyalangan]: / # mushuk / tmp / 1-misol

Chiqish quyidagicha bo'ladi:

Cat: / tmp / Misol 1: Bunday fayl yoki katalog yo'q

Sizga ma'lumotlar yo'qolgandek tuyulishi mumkin, ammo, albatta, unday emas. Tizimda ikkala konteyner (jumladan, to'g'ri faylga ega birinchisi) mavjudligiga ishonch hosil qilish uchun ikkinchi konteynerdan chiqing.

[elektron pochta himoyalangan]: / # exit $ docker ps -a

Chiqish quyidagicha bo'ladi:

KONTEYNER identifikatori tasvir buyrug'i yaratilgan STATUS PORTLAR NOMSLARI 6e4341887b69 ubuntu "/ bin / bash" Taxminan bir daqiqa oldin Chiqib ketgan (1) 6 soniya oldin kickass_borg 11cc47339ee1 ubuntu "/ bin / bash" 15 daqiqa oldin kichik (11 daqiqa oldin)

2-qadam: birinchi konteynerni qayta ishga tushirish

Yaratilgan konteynerni qayta ishga tushirish uchun siz ikkita -ai kaliti bilan start buyrug'idan foydalanishingiz kerak. Oxirida siz ishlamoqchi bo'lgan konteynerning identifikatsiya raqamini yoki uning nomini yozishingiz kerak. Natijada sizning buyruqingiz quyidagicha ko'rinadi:

Docker start -ai 11cc47339ee1

Endi siz konteyner ichidagi bash qobig'iga qaytdingiz va maqolaning boshida yaratgan fayl hali ham shu yerda ekanligini tekshirishingiz mumkin:

Cat /tmp/Example1.txt

Ekranda siz quyidagilarni ko'rasiz:

Endi konteynerdan chiqishingiz mumkin:

Shunday qilib, konteynerni to'xtatib, keyin qayta ishga tushirsangiz ham, konteyner ichidagi barcha o'zgarishlar saqlanadi. Ma'lumotlar faqat konteynerning o'zi o'chirilganda o'chiriladi. Bundan tashqari, yuqoridagi misol shuni ko'rsatadiki, o'zgarishlar bitta alohida konteynerga ta'sir qiladi (va barcha konteynerlar bir vaqtning o'zida emas).

3-qadam: ikkala idishni ham olib tashlash

Oxirgi qadam, ushbu qo'llanmaga rioya qilish orqali yaratgan ikkita konteynerni o'chirishdir. Buning uchun siz docker rm buyrug'idan foydalanishingiz kerak. Biroq, u faqat to'xtatilgan idishlarga ta'sir qiladi. Buyruqdan so'ng siz identifikatsiya raqamini yoki bir yoki bir nechta konteyner nomini ko'rsatishingiz kerak. Masalan, ilgari yaratilgan konteynerlarni o'chirish uchun siz quyidagi buyruqni kiritishingiz kerak:

Docker rm 6e4341887b69 small_sinoussi

Ekranda quyidagilar ko'rsatiladi:

6e4341887b69 small_sinoussi

Endi ikkala konteyner ham olib tashlandi.

Xulosa

Ushbu qo'llanmada siz Docker-da ishlashning asosiy buyruqlari va konteynerlarni qanday yaratish, to'xtatish, qayta ishga tushirish va o'chirish haqida bilib oldingiz.