Бараг бүх startup компаниуд энэ 2 tool-ыг ашигладаг байх. Startup гэлтгүй томууд нь ч бас ашигладаг байх л даа.
Ямар тохиолдолд ашиглавал зүгээр вэ гэдгийг хальт тайлбарлах гэж оролдъё.
Ямар нэгэн систем хөгжүүлээд дууссаныхаа дараа, бид нар серверрүүгээ кодоо deploy хийдэг. Тэр үед янз бүрийн л асуудалтай тулгарч байсан байлгүй.
Яагаад хөгжүүлж байхад асуудал гараагүй хэрнээ, яг production сервер рүүгээ deploy хийх үед асуудал гарав?
Яагаад гэвэл, хөгжүүлж байгаа орчин(development environment) чинь бүтээгдхүүн болж ажиллах орчин(production environment)-оос чинь өөр байгаа болохоор.
Ихэнх тохиолдолд, Vagrant болон Docker-ыг ашиглахгүйгээр, production-тай яг адилхан орчин үүсгэхэд хэцүү. Ихэнх сервер-үүд Linux based, харин хөгжүүлэгчид ихэвчлэн Mac OS X эсвэл Windows ашигладаг. Mac OS X-ын хувьд UNIX based болохоор, Windows-ыг бодвол арай дээр ч гэсэн, 100% ижилхэн орчин үүсгэхэд бас л хүндрэл гарна.
Ижилхэн орчин гэдгээр би, яг адилхан OS version, яг адилхан PHP version, яг адилхан Ruby version, яг адилхан MySQL version тэй байхыг илэрхийлж байгаа шүү.
MySQL-ын жижиг version-ын өөрчлөлт хүртэл, системээс чинь хамаараад, өөр ажиллах тохиолдол үүсч болно.
Vagrant
Веб хуудас: https://www.vagrantup.com/
Энэ tool нь VirtualBox ашиглан, virtual machine үүсгэн, тэрэн дээр өөрийн чинь хүссэн орчинг бүрдүүлдэг tool юм.
Ашиглахад их энгийн. Vagrantfile дотор, ямар virtual machine үүсгэмээр байгаа, ямар OS ашигламаар байгаа, OS-ээ initialize хийсний дараа юу юу суулгамаар байгаагаа бичиж өгөөд л болоо. Vagrantfile-аа үүсгэсэнийхээ дараа дараах 2 мөр коммандыг бичихэд л хангалттай.
vagrant up // Virtual Machine-ийг initialize хийх vagrant ssh // SSH-ээр Virtual Machine-рүүгээ орох
Vagrant-ын веб хуудас руу нь ороод харвал, Vagrantfile хэрхэн үүсгэх талаар, их дэлгэрэнгүй тайлбарласан байгаа.
TIP: Synced Folders үүсгэхдээ NFS ашиглавал, мэдэгдэхүйцээр хурдан ажиллана.
Docker
Веб хуудас: https://www.docker.com/
Зорилгын хувьд бол Vagrant-тай бараг төстэй. Тэгэхдээ Docker нь олон Linux based VM үүсгэх үед kernel-ээ share хийдэг юм. Хэрвээ чи Linux ашигладаг бол, чиний ашиглаж байгаа Linux-ын kernel-ийг шинээр үүсгэх OS-ынхээ kernel-ын оронд ашиглана гэсэн үг. Mac OS X болон, Windows-ын хувьд kernel share хийх боломжгүй тул, эхлээд VirtualBox-оор Linux OS-тэй virtual machine үүсгээд, тэрэн дээрээ container үүсгээд явна. Kernel-ээ share хийж байгаа болохоор, Vagrant-ыг бодвол арай хөнгөхөн ажиллана. Тэгэхдээ Mac OS X болон Windows дээр ашиглах гэж байгаа бол, Vagrant-аас ямар ч ялгаагүй. Харин олон container үүсгэх гэж байгаа бол, Docker-нь хамаагүй илүү байх.
Эцэст нь
2-уулаа сурахад нээх хүнд зүйл биш болохоор, завтай үедээ 2-ууланг нь туршиж үзэж байгаад сурсан нь дээр. Манай компаний хувьд, Vagrant-уудаа Dockerize хийж байгаа. Тэгэхдээ “No Silver Bullet”. 2-ууланг нь сурч байгаад, хэрэгцээндээ тохируулж алийг нь ашиглахаа шийдвэл зүгээр.
Docker ярьж байснаа Linux Container яриад явчихав уу даа. Зарим хүмүүс толгой нь эргэж байгаа даа.
Linux Container гэдэг нь kernel-ээ share-лэж санах ой хэмнэдэг технологи
Docker гэдэг нь түүнийг хялбар удирддаг багаж. Мөн үү?
@Хүрэлхуяг
Зөв үг ашигласан үгүйг мэдэхгүй юм. Container гэдгээр, шинээр үүсгэсэн орчингоо илэрхийлсэн юм. Vagrant-ын virtual machine гэсэн үг. Гэхдээ Docker-ын хувьд virtual machine үүсгэдэггүй болохоор container гэчихлээ.
Docker гэдэг нь тэдгээр container-уудыг удирдах багаж.
Дээр их хэрэгтэй зүйл ярьжээ. Дээр нь нэмж хэлэхэд, зохиолчын өөрийнх нь хэлснээр дээрх 2 хэрэгсэл нь үнэхээр л development болон deployment хийхэд ашиглаж болох хэрэгслүүд. Гэхдээ vagrant нь голдуу хөгжүүлэлт хийхэд харин docker нь deploy хийхэд ашиглагддаг мэт санагдсан. Энэ хоёрын ялгаар жишээгээр тайлбарлавал хялбар байх. Та 2 вэбсайт хийсэн гэж бодъё. Хоёулаа PHP 5 ашигладаг, мөн түүнчлэн FFMPEG, RUBY хэл ашигладаг байг. За тэгвэл энэ сайтуудаа LINUX server дээр тавьж ажиллуулахын тулд та сервэр дээр PHP 5, FFMPEG, RUBY зэргийг суулгаж бас бус тохиргоо хийнэ биз. Мөн тайны сайтын хэмжээ 15MB гэж үзье.
Vagrant нь цэвэр виртуал машин үүсгэж ажилдаг. Тэгэхлээр таны 2 сайт тус бүр нь LINUX OSX IMAGE (15GB) + PHP 5 (70MB) + FFMPEG (5MB) + RUBY (90MB) = 15.2 GB хэмжээтэй болж байгаа юм. Сервэр дээр 2 виртуаль машин ажиллана.
Харин Docker нь одоогоор зөвхөн LINUX үйлдлийн систем дээр CONTAINER үүсгэх боломжтой. Windows – ийн хувьд эхлээд LINUX в.машин үүсгээд тэрэн дотроо container үүсгэдэг. Тэгвэл таны 2 сайт тус бүр ердөө PHP 5 + FFMPEG + RUBY = 165MB хэмжээтэй болж байгаа юм. Учир нь CONTAINER гэдэг LINUX-ийн CONTROL GROUP буюу NAMESPACING хэмээх зүйлийг ашиглан аливаа 2 процессийг тухайн машин дээр дангаараа байгаа мэт орчинг үүсгэдэг. Дан ганц процесс гэлтгүй тухайн машины нөөц болох сүлжээ, файлын систем зэргийг дурын байдлаар нэгтгэж, тусгаарлах боломжтой. Тиймээс DOCKER нь өөрөө LINUX дээр ажиллаад бүх CONTAINER-ууд нь нэг ижил KERNEL хэрэглэдэг юм.
Заза, арай их зүйл биччих вүү дээ ..
Docker гэдэг зүйлтэй одоо л анх танилцаж байна. Webserver, database server хоёроо тус тусад нь container болгоод холбочиход аль нэг дээр нь асуудал үүсэхэд бүтнээр нь солихгүй зөвхөн асуудалтай хэсгийг нь засварлаад явчихдаг нь дажгүй юм. Мөн кодеруудад ч их амар юм шиг байна. Production environment дээрээ л development хийх юм байна гэж ойлголоо. Modular зохион байгуулалттай учраас шинэ module холбоход ч их хялбархан юм шиг байна. Жишээ нь хэд хэдэн webserver ажиллуулаад урд талд нь proxy сервер container хэлбэрээр нэмж холбоод л load balancer хийж болох юм. Энэ мэт их олон давуу талууд гарах юм байна. Сайн судалж өөрийн болгох л хэрэгтэй зэвсэг байна.