Докерийг ойлгох

Би вэб төслүүдийг боловсруулах/хүргэх үйл явцыг зохион байгуулахын тулд хэдэн сарын турш Docker ашиглаж байна. Би Хабрахабрын уншигчдад докерын тухай танилцуулга өгүүллийн орчуулгыг санал болгож байна. "Домкерийг ойлгох".

Докер гэж юу вэ?

Docker бол програмуудыг хөгжүүлэх, хүргэх, ажиллуулах нээлттэй платформ юм. Docker нь таны програмуудыг илүү хурдан хүргэх зорилготой юм. Docker-ийн тусламжтайгаар та програмаа дэд бүтцээсээ салгаж, дэд бүтцийг удирддаг програм гэж үзэх боломжтой. Docker нь танд кодоо хурдан илгээх, илүү хурдан турших, программуудыг илүү хурдан тээвэрлэх, код бичих болон ажиллах код хоорондын хугацааг багасгахад тусалдаг. Docker үүнийг хөнгөн чингэлэг виртуалчлалын платформоор дамжуулан, програмаа удирдах, байршуулахад тань туслах процессууд болон хэрэгслүүдийг ашиглан хийдэг.

Үндсэндээ докер нь саванд аюулгүй тусгаарлагдсан бараг бүх програмыг ажиллуулах боломжийг олгодог. Аюулгүй тусгаарлалт нь олон контейнерийг нэг хост дээр нэгэн зэрэг ажиллуулах боломжийг олгодог. Гипервизорын нэмэлт ачаалалгүйгээр ажилладаг савны хөнгөн шинж чанар нь техник хангамжаасаа илүү ихийг авах боломжийг олгодог.

Контейнер виртуалчлалын платформ болон хэрэгслүүд нь дараах тохиолдолд хэрэг болно.

  • өөрийн програмыг (мөн таны ашигладаг бүрэлдэхүүн хэсгүүдийг) докерын саванд хийх;
  • эдгээр савыг боловсруулж, турших зорилгоор өөрийн багуудад түгээх, хүргэх;
  • эдгээр савыг өөрийн үйлдвэрлэлийн сайтууд дээр, дата төв болон үүлэн дээр байрлуулах.

Би юунд docker ашиглаж болох вэ?

Програмаа хурдан нийтлээрэй

Докер нь хөгжлийн мөчлөгийг зохион байгуулахад маш сайн. Докер нь хөгжүүлэгчдэд програм, үйлчилгээ бүхий локал контейнер ажиллуулах боломжийг олгодог. Энэ нь таныг тасралтгүй нэгтгэх, байршуулах ажлын урсгалтай нэгтгэх боломжийг олгодог.

Жишээлбэл, танай хөгжүүлэгчид дотооддоо код бичиж, хөгжүүлэлтийн стекийг (Docker зургийн багц) хамтран ажиллагсадтайгаа хуваалцдаг. Тэд бэлэн болмогц тэд код болон савыг туршилтын талбай руу түлхэж, шаардлагатай туршилтуудыг явуулдаг. Туршилтын талбайгаас тэд код болон дүрсийг үйлдвэрлэл рүү илгээх боломжтой.

Тавих, задлахад хялбар

Докерийн контейнерт суурилсан платформ нь ачаагаа зөөвөрлөхөд хялбар болгодог. Docker контейнерууд нь таны локал машин дээр, бодит эсвэл виртуал машин дээр дата төвд эсвэл үүлэн дээр ажиллах боломжтой.

Докерын зөөврийн болон хөнгөн шинж чанар нь таны ажлын ачааллыг динамикаар удирдахад хялбар болгодог. Та өөрийн аппликейшн эсвэл үйлчилгээгээ байрлуулах эсвэл хаахын тулд docker ашиглаж болно. Докерын хурд нь үүнийг бодит цаг хугацаанд хийх боломжийг олгодог.

Илүү их ачаалал, илүү их ачаалалтай

Docker нь хөнгөн бөгөөд хурдан юм. Энэ нь гипервизорт суурилсан виртуал машинуудын уян хатан, зардал багатай хувилбараар хангадаг. Энэ нь ялангуяа ачаалал ихтэй орчинд, жишээлбэл, өөрийн клоуд эсвэл платформыг үйлчилгээ үүсгэх үед ашигтай байдаг. Гэхдээ энэ нь танд байгаа нөөцөөсөө илүү ихийг авахыг хүсч байгаа үед жижиг, дунд хэмжээний програмуудад бас хэрэгтэй.

Докерын үндсэн бүрэлдэхүүн хэсгүүд

Docker нь хоёр үндсэн бүрэлдэхүүн хэсгээс бүрдэнэ.

  • Docker: нээлттэй эхийн виртуалчлалын платформ;
  • Docker Hub: Манай платформ нь Docker контейнеруудыг түгээх, удирдах үйлчилгээ юм.

Анхаар! Docker-ийг Apache 2.0 лицензийн дагуу түгээдэг.

Докерын архитектур

Docker нь үйлчлүүлэгч-серверийн архитектурыг ашигладаг. Docker клиент нь таны контейнерийг үүсгэх, ажиллуулах, түгээх ачааг үүрдэг Docker демонтой харилцдаг. Үйлчлүүлэгч болон сервер хоёулаа нэг систем дээр ажиллах боломжтой бөгөөд та клиентийг алсын докер демонтой холбож болно. Үйлчлүүлэгч болон сервер нь сокет эсвэл RESTful API-ээр холбогддог.

Докерийг ойлгох

Докер демон

Диаграммд үзүүлснээр демон нь хост машин дээр ажилладаг. Хэрэглэгч сервертэй шууд харьцдаггүй, харин үүний тулд үйлчлүүлэгчийг ашигладаг.

Docker үйлчлүүлэгч

Docker клиент, docker програм нь Docker-ийн үндсэн интерфейс юм. Энэ нь хэрэглэгчээс тушаал хүлээн авч, докер демонтой харилцдаг.

Докер дотор

Докер юунаас бүрддэгийг ойлгохын тулд та гурван бүрэлдэхүүн хэсгийн талаар мэдэх хэрэгтэй.

  • зургууд
  • бүртгэл
  • савнууд

Зураг

Docker дүрс нь зөвхөн унших боломжтой загвар юм. Жишээлбэл, зураг нь Apache бүхий Ubuntu үйлдлийн систем болон түүн дээрх програмыг агуулж болно. Контейнер үүсгэхийн тулд зургийг ашигладаг. Docker нь шинэ зураг үүсгэх, одоо байгаа зургуудыг шинэчлэх, эсвэл та бусад хүмүүсийн бүтээсэн зургуудыг татахад хялбар болгодог. Зураг нь докерын бүтцийн бүрэлдэхүүн хэсэг юм.

Бүртгэл

Docker бүртгэл нь зургийг хадгалдаг. Зургийг татаж авах эсвэл байршуулах боломжтой нийтийн болон хувийн бүртгэлүүд байдаг. Нийтийн Docker бүртгэл нь Докерын төв. Тэнд хадгалагдсан зургийн асар том цуглуулга байдаг. Таны мэдэж байгаагаар зургийг та өөрөө бүтээж болно эсвэл бусдын бүтээсэн зургийг ашиглаж болно. Бүртгэл нь түгээлтийн бүрэлдэхүүн хэсэг юм.

Контейнер

Контейнер нь лавлахтай төстэй. Контейнер нь програмыг ажиллуулахад шаардлагатай бүх зүйлийг агуулдаг. Контейнер бүрийг зургаас бүтээдэг. Контейнерийг үүсгэх, эхлүүлэх, зогсоох, шилжүүлэх эсвэл устгах боломжтой. Контейнер бүр нь тусгаарлагдсан бөгөөд програмын аюулгүй платформоор хангадаг. Контейнер нь ажлын бүрэлдэхүүн хэсэг юм.

Тэгэхээр Docker хэрхэн ажилладаг вэ?

Одоогоор бид үүнийг мэдэж байна:

  • бид өөрсдийн програмууд байрладаг зургуудыг үүсгэж болно;
  • бид зурагнаас програмуудыг ажиллуулахын тулд контейнер үүсгэж болно;
  • Бид Docker Hub эсвэл өөр зургийн бүртгэлээр дамжуулан зургийг түгээх боломжтой.

Эдгээр бүрэлдэхүүн хэсгүүд хоорондоо хэрхэн нийцэж байгааг харцгаая.

Зураг хэрхэн ажилладаг вэ?

Зураг нь зөвхөн унших боломжтой загвар бөгөөд үүнээс контейнер бүтээдэг гэдгийг бид аль хэдийн мэддэг болсон. Зураг бүр нь хэд хэдэн түвшингээс бүрдэнэ. Docker ашигладаг холбооны файлын систем Эдгээр түвшинг нэг зураг болгон нэгтгэх. Холбооны файлын систем нь өөр өөр файлын системүүдийн (өөр өөр салбар) файлууд болон лавлахуудыг ил тод давхцуулж, уялдаа холбоотой файлын системийг бий болгодог.

Докер яагаад хөнгөн байдгийн нэг шалтгаан нь ийм давхарга ашигладагтай холбоотой юм. Програмаа шинэчлэх гэх мэт зургийг өөрчлөхөд шинэ давхарга үүсдэг. Тиймээс, виртуал машинтай холбоотой байж болох тул зургийг бүхэлд нь солих эсвэл дахин бүтээхгүйгээр зөвхөн давхаргыг нэмж эсвэл шинэчилнэ. Мөн та шинэ зургийг бүхэлд нь тараах шаардлагагүй, зөвхөн шинэчлэлтийг тарааж, зургийг түгээхэд хялбар, хурдан болгодог.

Зураг бүрийн гол цөм нь үндсэн дүр төрх юм. Жишээлбэл, Ubuntu-ийн үндсэн дүрс болох ubuntu, эсвэл Fedora түгээлтийн үндсэн дүрс болох fedora. Та мөн зургийг шинэ зураг үүсгэх суурь болгон ашиглаж болно. Жишээлбэл, хэрэв танд apache зураг байгаа бол та үүнийг вэб програмынхаа үндсэн зураг болгон ашиглаж болно.

Анхаар! Docker ихэвчлэн Docker Hub бүртгэлээс зураг авдаг.

Эдгээр үндсэн зургуудаас Docker дүрсийг үүсгэж болно; бид эдгээр зургийг үүсгэх алхмуудыг зааврууд гэж нэрлэдэг. Заавар бүр нь шинэ дүр төрх эсвэл түвшинг бий болгодог. Заавар нь дараах байдалтай байна.

  • командыг ажиллуулах
  • файл эсвэл директор нэмэх
  • орчны хувьсагчийг бий болгох
  • Энэ зургийн савыг ажиллуулах үед юу ажиллуулах тухай зааварчилгаа

Эдгээр зааврыг файлд хадгална Dockerfile. Докер үүнийг уншдаг Dockerfile, та зургийг бүтээхдээ эдгээр зааврыг гүйцэтгэж, эцсийн зургийг буцаана.

Докерийн бүртгэл хэрхэн ажилладаг вэ?

Бүртгэл нь докерын зургийн агуулах юм. Зургийг үүсгэсний дараа та үүнийг нийтийн Docker Hub бүртгэл эсвэл хувийн бүртгэлдээ нийтлэх боломжтой.

Докер клиентийн тусламжтайгаар та аль хэдийн хэвлэгдсэн зургуудыг хайж, тэдгээрийг докер машиндаа татаж аваад контейнер үүсгэх боломжтой.

Docker Hub нь нийтийн болон хувийн зургийн агуулахаар хангадаг. Нийтийн агуулахаас зураг хайх, татаж авах нь хүн бүрт боломжтой. Хувийн хадгалалтын агуулгыг хайлтын үр дүнд оруулаагүй болно. Зөвхөн та болон таны хэрэглэгчид эдгээр зургийг хүлээн авч, тэдгээрээс контейнер үүсгэх боломжтой.

Контейнер хэрхэн ажилладаг вэ?

Контейнер нь үйлдлийн систем, хэрэглэгчийн файл, мета өгөгдлөөс бүрдэнэ. Бидний мэдэж байгаагаар сав бүрийг зургаас бүтээдэг. Энэ зураг нь контейнерт юу байгаа, ямар процессыг эхлүүлэх, контейнер хэзээ эхлэх болон бусад тохиргооны өгөгдлийг заадаг. Docker дүрс нь зөвхөн унших боломжтой. Докер нь контейнерийг эхлүүлэх үед зургийн дээд талд (өмнө дурдсан нэгдлийн файлын системийг ашиглан) програм ажиллах боломжтой унших/бичих давхарга үүсгэдэг.

Контейнер эхлэхэд юу болох вэ?

Эсвэл програмыг ашиглана уу docker, эсвэл RESTful API-г ашиглан докерын үйлчлүүлэгч докерын демонд контейнерийг эхлүүлэхийг хэлдэг.

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

Энэ тушаалыг харцгаая. Үйлчлүүлэгчийг тушаалыг ашиглан ажиллуулна docker, сонголттой run, энэ нь шинэ чингэлэг ашиглалтанд оруулна гэсэн. Контейнер ажиллуулахад тавигдах хамгийн бага шаардлага нь дараах шинж чанарууд юм.

  • савыг үүсгэхийн тулд ямар зургийг ашиглах. Манай тохиолдолд ubuntu
  • савыг эхлүүлэх үед ажиллуулахыг хүссэн тушаал. Манай тохиолдолд /bin/bash

Бид энэ тушаалыг ажиллуулахад бүрээсний доор юу болох вэ?

Докер дарааллаар нь дараахь зүйлийг хийдэг.

  • ubuntu зургийг татаж авах: докер зураг бэлэн эсэхийг шалгадаг ubuntu локал машин дээр, хэрэв байхгүй бол эндээс татаж аваарай Докерын төв. Хэрэв зураг байгаа бол энэ нь савыг бий болгоход ашигладаг;
  • сав үүсгэдэг: зургийг хүлээн авах үед докер үүнийг контейнер үүсгэхийн тулд ашигладаг;
  • файлын системийг эхлүүлж, зөвхөн унших түвшнийг холбодог: контейнер нь файлын системд үүсгэгдэж, зураг нь зөвхөн унших түвшинд нэмэгддэг;
  • сүлжээ/гүүрийг эхлүүлнэ: докер нь хост машинтай холбогдох боломжийг олгодог сүлжээний интерфейсийг бий болгодог;
  • IP хаягийг тохируулах: хаягийг олж тогтоох;
  • Заасан үйл явцыг эхлүүлнэ: таны програмыг эхлүүлэх;
  • Таны аппликешны үр дүнг боловсруулж, гаргадаг: нь таны програмын стандарт оролт, гаралт, алдааны урсгалыг холбож бүртгэснээр таны програм хэрхэн ажиллаж байгааг хянах боломжтой.

Та одоо ажиллаж байгаа савтай байна. Та контейнерээ удирдаж, програмтайгаа харилцах боломжтой. Та програмыг зогсоохоор шийдсэн бол савыг устгана уу.

Ашигласан технологиуд

Docker нь Go дээр бичигдсэн бөгөөд дээрх функцийг хэрэгжүүлэхийн тулд Линуксийн цөмийн зарим функцуудыг ашигладаг.

Нэрийн орон зай

Docker технологи ашигладаг namespaces Бид контейнер гэж нэрлэдэг тусгаарлагдсан ажлын байрыг зохион байгуулах. Бид контейнерыг эхлүүлэхэд докер нь тухайн контейнерт нэрийн зайны багц үүсгэдэг.

Энэ нь тусгаарлагдсан давхарга үүсгэдэг бөгөөд контейнерийн тал бүр нь өөрийн нэрийн орон зайд ажилладаг бөгөөд гадаад системд хандах боломжгүй байдаг.

Докерын ашигладаг зарим нэрийн орон зайн жагсаалт:

  • пид: үйл явцыг тусгаарлах;
  • цэвэр: сүлжээний интерфейсийг удирдах;
  • ipc: IPC нөөцийг удирдах. (ICP: InterProccess Communication);
  • mnt: холбох цэгүүдийг удирдах;
  • utc: цөмийг тусгаарлах, хувилбар үүсгэхийг удирдах (UTC: Unix timesharing system).

Хяналтын бүлгүүд

Docker мөн технологийг ашигладаг cgroups эсвэл хяналтын бүлгүүд. Аппликешныг тусад нь ажиллуулах гол зүйл бол програмыг зөвхөн таны өгөхийг хүссэн нөөцөөр хангах явдал юм. Энэ нь савнууд сайн хөрш байх болно гэдгийг баталгаажуулдаг. Хяналтын бүлгүүд нь танд байгаа техник хангамжийн нөөцийг хуваалцах, шаардлагатай бол хязгаарлалт, хязгаарлалт тогтоох боломжийг олгодог. Жишээлбэл, контейнерийн санах ойн хэмжээг хязгаарлах.

Холбооны файлын систем

Union File Sysem буюу UnionFS нь давхарга үүсгэх замаар ажилладаг файлын систем бөгөөд үүнийг маш хөнгөн бөгөөд хурдан болгодог. Docker нь UnionFS-ийг ашиглан контейнерийг бүтээх блокуудыг үүсгэдэг. Docker нь UnionFS-ийн хэд хэдэн хувилбаруудыг ашиглаж болно: AUFS, btrfs, vfs болон DeviceMapper.

Контейнер форматууд

Docker эдгээр бүрэлдэхүүн хэсгүүдийг бид контейнер формат гэж нэрлэдэг боодол болгон нэгтгэдэг. Анхдагч форматыг дууддаг libcontainer. Docker нь Линукс дээрх уламжлалт контейнер форматыг дэмждэг LXC. Ирээдүйд Docker бусад контейнер форматуудыг дэмжиж магадгүй. Жишээлбэл, BSD Jails эсвэл Solaris Zones-тэй нэгтгэх.

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх