VM эсвэл Docker?

Танд VM биш Docker хэрэгтэй гэдгийг яаж ойлгох вэ? Та яг юуг тусгаарлахыг хүсч байгаагаа тодорхойлох хэрэгтэй. Хэрэв та баталгаатай нөөц, виртуал техник хангамж бүхий системийг тусгаарлахыг хүсвэл VM дээр сонголт хийх ёстой. Хэрэв та ажиллаж байгаа програмуудыг тусдаа системийн процесс болгон тусгаарлах шаардлагатай бол танд Docker хэрэгтэй болно.

Тэгэхээр Docker контейнер ба VM хоёрын ялгаа юу вэ?

Виртуал машин (VM) нь виртуал төхөөрөмжийн драйверууд, санах ойн удирдлага болон бусад бүрэлдэхүүн хэсгүүдийн хамт шинэ бие даасан үйлдлийн систем суулгасан бүх виртуал төхөөрөмжүүд болон виртуал хатуу диск бүхий виртуал компьютер юм. Өөрөөр хэлбэл, бид нэг компьютер дээр олон виртуал компьютер ажиллуулах боломжийг олгодог физик техник хангамжийн хийсвэрлэлийг олж авдаг.
Суурилуулсан VM нь янз бүрийн аргаар дискний зай эзэлнэ.

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

Сервер дээр олон виртуал машин байх тусам илүү их зай эзэлдэг бөгөөд таны програмыг ажиллуулахад шаардлагатай орчны байнгын дэмжлэгийг шаарддаг.

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

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

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

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

Контейнер бүрийг үндсэн шийдэл болох docker-compose.yml-д багтсан docker-compose төслийн файлаар дамжуулан тохируулах боломжтой. Тэнд та савны нэр, порт, танигч, нөөцийн хязгаар, бусад контейнер хоорондын хамаарал гэх мэт янз бүрийн параметрүүдийг тохируулах боломжтой. Хэрэв та тохиргоонд контейнерын нэрийг заагаагүй бол Docker шинэ контейнер үүсгэж, түүнд санамсаргүй байдлаар нэр өгөх болно.

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

Docker анх контейнерыг эхлүүлэхэд анхны унших/бичих давхарга хоосон байна. Өөрчлөлт гарах үед тэдгээрийг тухайн давхаргад хэрэглэнэ; жишээлбэл, хэрэв та файлыг өөрчлөхийг хүсвэл тухайн файлыг доорх зөвхөн унших давхаргаас унших-бичих давхарга руу хуулах болно.
Файлын зөвхөн унших боломжтой хувилбар хэвээр байх боловч одоо хуулбарын доор нуугдсан байна. Эзлэхүүнийг савны амьдралын мөчлөгөөс үл хамааран өгөгдлийг хадгалахад ашигладаг. Контейнер үүсгэх үед эзлэхүүнийг эхлүүлдэг.

Зураг нь савтай хэрхэн холбоотой вэ?

Зураг - сав бүрийн үндсэн элемент. Уг зураг нь төсөлд нэмсэн Dockerfile-ээс бүтээгдсэн бөгөөд зөвхөн унших боломжтой файлын системүүд (давхаргууд) нь бие биенийхээ дээр давхарлаж, бүлэглэгддэг; давхаргын дээд тоо 127 байна.

Зураг бүрийн гол хэсэгт FROM тушаалаар тодорхойлогдсон үндсэн дүрс байдаг - Dockerfile дүрсийг үүсгэх үед нэвтрэх цэг. Давхарга бүр нь зөвхөн уншигдах давхарга бөгөөд Dockerfile дээр бичигдсэн файлын системийг өөрчилдөг ганц тушаалаар илэрхийлэгддэг.
Эдгээр давхаргыг нэг зураг болгон нэгтгэхийн тулд Docker нь Advanced олон давхаргат Union файлын системийг (AuFS нь UnionFS дээр суурилагдсан) ашигладаг бөгөөд өөр өөр файлын давхаргын өөр өөр файл, лавлахуудыг ил тод давхцуулж, холбогдох файлын системийг бий болгодог.

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

Dockerfile нь дараах тушаалуудыг агуулж болно:

  • FROM - зураг үүсэх нэвтрэх цэг;
  • MAINTAINER - зургийн эзэмшигчийн нэр;
  • RUN - зураг угсрах явцад командын гүйцэтгэл;
  • ADD - хост файлыг шинэ зураг руу хуулах, хэрэв та URL файлыг зааж өгвөл Docker үүнийг заасан директор руу татаж авах болно;
  • ENV - орчны хувьсагч;
  • CMD - зураг дээр үндэслэн шинэ сав үүсгэж эхэлдэг;
  • ENTRYPOINT - Контейныг эхлүүлэх үед тушаалыг гүйцэтгэнэ.
  • WORKDIR нь CMD командыг гүйцэтгэх ажлын лавлах юм.
  • USER - Зургаас үүсгэсэн контейнерийн UID-г тохируулна.
  • VOLUME - Хост лавлахыг контейнерт суулгана.
  • EXPOSE нь контейнерт сонсогддог портуудын багц юм.

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

UnionFS — Linux болон FreeBSD-д зориулсан үйлчилгээний стек файлын систем (FS). Энэхүү FS нь бичих дээр хуулбарлах (Copy-On-Write, COW) механизмыг хэрэгжүүлдэг. UnionFS-ийн ажлын хэсэг нь давхарга бөгөөд давхарга бүрийг эхээс нь лавлах шатлал бүхий тусдаа бүрэн эрхт файлын систем гэж үзэх ёстой. UnionFS нь бусад файлын системд зориулсан нэгдмэл холболт үүсгэдэг бөгөөд өөр өөр файлын системүүдийн (салбар гэж нэрлэдэг) файлууд болон сангуудыг нэг холбосон файлын системд ил тод нэгтгэх боломжийг хэрэглэгчдэд ил тод болгох боломжийг олгодог.

Ижил зам бүхий лавлахуудын агуулгууд нь үүссэн файлын системийн нэг хавсарсан санд (ижил нэрийн талбарт) хамт харагдах болно.

UnionFS нь дараах зарчмууд дээр үндэслэн давхаргыг нэгтгэдэг.

  • давхаргын нэг нь дээд түвшний давхарга болж, хоёр дахь болон дараагийн давхаргууд нь доод түвшний давхарга болдог;
  • Давхаргын объектууд нь хэрэглэгчдэд "дээрээс доош" хандах боломжтой, өөрөөр хэлбэл. хэрэв хүссэн объект нь "дээд" давхаргад байгаа бол "доод" давхаргад ижил нэртэй объект байгаа эсэхээс үл хамааран буцаана; өөрөөр хэлбэл, "доод" давхаргын объектыг буцаана; хэрэв хүссэн объект тэнд ч байхгүй бол "Ийм файл эсвэл лавлах байхгүй" гэсэн алдаа гарч ирнэ;
  • Ажлын давхарга нь "дээд" давхарга бөгөөд өөрөөр хэлбэл, өгөгдлийг өөрчлөх хэрэглэгчийн бүх үйлдэл нь доод түвшний давхаргын агуулгад нөлөөлөхгүйгээр зөвхөн дээд түвшний давхаргад тусгагдсан байдаг.

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

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

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

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