Фаҳмидани Docker

Ман чанд моҳ боз Docker-ро барои сохтори раванди таҳия/интиқоли лоиҳаҳои веб истифода мебарам. Ман ба хонандагони Ҳабрахабр тарҷумаи мақолаи муқаддимавӣ дар бораи докерро пешниҳод мекунам - "Фаҳмиши докер".

Докер чист?

Docker як платформаи кушода барои таҳия, таҳвил ва истифодабарии замимаҳо мебошад. Docker барои зудтар расонидани барномаҳои шумо тарҳрезӣ шудааст. Бо docker, шумо метавонед барномаи худро аз инфрасохтори худ ҷудо кунед ва инфрасохторро ҳамчун барномаи идорашаванда баррасӣ кунед. Docker ба шумо кӯмак мекунад, ки коди худро зудтар интиқол диҳед, зудтар санҷед, барномаҳоро зудтар интиқол диҳед ва вақти байни навиштани код ва иҷроиши кодро кам кунед. Docker ин корро тавассути платформаи виртуализатсияи контейнерҳои сабук бо истифода аз равандҳо ва утилитҳо, ки ба шумо идора ва ҷойгиркунии барномаҳои шумо кӯмак мекунанд, анҷом медиҳад.

Дар асл, docker ба шумо имкон медиҳад, ки қариб ҳама гуна барномаҳоро, ки дар контейнер бехатар ҷудо карда шудаанд, иҷро кунед. Изолятсияи бехатар ба шумо имкон медиҳад, ки дар як вақт якчанд контейнерҳоро дар як ҳост иҷро кунед. Табиати сабуки контейнер, ки бе бори иловагии гипервизор кор мекунад, ба шумо имкон медиҳад, ки аз сахтафзори худ бештар истифода баред.

Платформа ва асбобҳои виртуализатсияи контейнер метавонанд дар ҳолатҳои зерин муфид бошанд:

  • бастабандии аризаи худ (ва ҷузъҳои истифодашавандаи шумо) ба контейнерҳои докер;
  • тақсим ва таҳвили ин контейнерҳо ба дастаҳои шумо барои таҳия ва озмоиш;
  • гузоштани ин контейнерҳо дар сайтҳои истеҳсолии шумо, ҳам дар марказҳои додаҳо ва ҳам дар абрҳо.

Ман docker-ро барои чӣ истифода бурда метавонам?

Барномаҳои худро зуд нашр кунед

Docker барои ташкили давраи рушд бузург аст. Docker ба таҳиягарон имкон медиҳад, ки контейнерҳои маҳаллиро бо барномаҳо ва хидматҳо идора кунанд. Ки баъдан ба шумо имкон медиҳад, ки бо раванди муттаҳидсозии пайваста ва ҷараёни кории ҷойгиркунӣ ҳамгиро шавед.

Масалан, таҳиягарони шумо кодро ба таври маҳаллӣ менависанд ва стеки таҳияи худро (маҷмӯи тасвирҳои Docker) бо ҳамкорон мубодила мекунанд. Вақте ки онҳо омодаанд, онҳо код ва контейнерҳоро ба макони озмоиш тела медиҳанд ва ҳама гуна санҷишҳои заруриро мегузаронанд. Аз сайти санҷиш, онҳо метавонанд код ва тасвирҳоро ба истеҳсолот фиристанд.

Гузоштан ва кушодан осонтар аст

Платформаи ба контейнер асосёфтаи докер интиқоли бори бори шуморо осон мекунад. Контейнерҳои Docker метавонанд дар мошини маҳаллии шумо, воқеӣ ё дар мошини виртуалӣ дар маркази додаҳо ё дар абр кор кунанд.

Қобилият ва табиати сабуки докер идора кардани сарбории кори шуморо осон мекунад. Шумо метавонед docker-ро барои ҷойгиркунӣ ё қатъ кардани барнома ё хидматҳои худ истифода баред. Суръати докер имкон медиҳад, ки ин дар вақти воқеӣ анҷом дода шавад.

Сарбории баландтар ва бори бештар

Docker сабук ва зуд аст. Он як алтернативаи устувор ва камхарҷро ба мошинҳои виртуалии гипервизорӣ таъмин мекунад. Он махсусан дар муҳити сербориш муфид аст, масалан, ҳангоми эҷоди абр ё платформаи худ ҳамчун хидмат. Аммо он инчунин барои барномаҳои хурд ва миёна муфид аст, вақте ки шумо мехоҳед аз захираҳои худ бештар истифода баред.

Унсурҳои асосии Docker

Docker аз ду ҷузъи асосӣ иборат аст:

  • Docker: платформаи виртуализатсияи кушодаасос;
  • Docker Hub: Платформаи мо ҳамчун хидмат барои паҳн ва идоракунии контейнерҳои Docker.

Шарҳ! Docker таҳти иҷозатномаи Apache 2.0 паҳн карда мешавад.

Меъмории Docker

Docker меъмории мизоҷ-серверро истифода мебарад. Мизоҷи Docker бо демони Docker муошират мекунад, ки бори эҷод, иҷро ва паҳн кардани контейнерҳои шуморо ба дӯш мегирад. Ҳам муштарӣ ва ҳам сервер метавонанд дар як система кор кунанд, шумо метавонед муштариро ба демони дурдасти докер пайваст кунед. Мизоҷ ва сервер тавассути розетка ё RESTful API муошират мекунанд.

Фаҳмидани Docker

Демони Докер

Тавре ки дар диаграмма нишон дода шудааст, демон дар мошини ҳост кор мекунад. Истифодабаранда мустақиман бо сервер ҳамкорӣ намекунад, балки муштариро барои ин истифода мебарад.

Мизоҷи Docker

Мизоҷи Docker, барномаи докер, интерфейси асосии Docker мебошад. Он аз корбар фармонҳоро қабул мекунад ва бо демони докер ҳамкорӣ мекунад.

Докер дар дохили

Барои фаҳмидани он ки докер аз чӣ иборат аст, шумо бояд дар бораи се ҷузъ донед:

  • тасвирҳо
  • феҳрист
  • контейнерҳо

Тасвирҳо

Тасвири Docker як қолаби танҳо барои хондан аст. Масалан, тасвир метавонад дорои системаи оператсионии Ubuntu бо Apache ва замима дар он бошад. Тасвирҳо барои сохтани контейнерҳо истифода мешаванд. Docker эҷод кардани тасвирҳои нав, навсозии тасвирҳои мавҷударо осон мекунад ё шумо метавонед тасвирҳои аз ҷониби одамони дигар офаридашударо зеркашӣ кунед. Тасвирҳо ҷузъҳои сохтани докер мебошанд.

Нишондиҳанда

Феҳристи Docker тасвирҳоро нигоҳ медорад. Феҳристҳои давлатӣ ва хусусӣ мавҷуданд, ки шумо метавонед аз онҳо тасвирҳоро зеркашӣ ё бор кунед. Феҳристи ҷамъиятии Docker аст Маркази докерӣ. Дар он ҷо маҷмӯи бузурги тасвирҳо мавҷуд аст. Тавре ки шумо медонед, тасвирҳоро шумо метавонед эҷод кунед ё шумо метавонед тасвирҳои аз ҷониби дигарон офаридашударо истифода баред. Реестрҳо ҷузъи паҳнкунӣ мебошанд.

Контейнерҳо

Контейнерҳо ба директорияҳо монанданд. Контейнерҳо ҳама чизро дар бар мегиранд, ки барнома барои кор кардан лозим аст. Ҳар як контейнер аз тасвир сохта шудааст. Контейнерҳоро сохтан, оғоз кардан, қатъ кардан, интиқол додан ё нест кардан мумкин аст. Ҳар як контейнер ҷудо карда шудааст ва платформаи бехатарро барои барнома таъмин мекунад. Контейнерҳо ҷузъҳои кор мебошанд.

Пас, Docker чӣ гуна кор мекунад?

То ҳол мо медонем, ки:

  • мо метавонем тасвирҳое созем, ки дар онҳо барномаҳои мо ҷойгиранд;
  • мо метавонем контейнерҳоро аз тасвирҳо барои иҷро кардани барномаҳо созем;
  • Мо метавонем тасвирҳоро тавассути Docker Hub ё дигар феҳристи тасвирҳо паҳн кунем.

Биёед бубинем, ки ин ҷузъҳо чӣ гуна ба ҳам мувофиқанд.

Тасвир чӣ гуна кор мекунад?

Мо аллакай медонем, ки тасвир як қолаби танҳо барои хондан аст, ки аз он контейнер сохта мешавад. Ҳар як тасвир аз маҷмӯи сатҳҳо иборат аст. Docker истифода мебарад системаи файлии иттифоқ ки ин сатҳҳоро дар як тасвир муттаҳид созад. Системаи файлии иттифоқӣ имкон медиҳад, ки файлҳо ва директорияҳои системаҳои файлии гуногун (шохаҳои гуногун) ба таври шаффоф ба ҳам мепайвандад ва системаи файлии мувофиқро эҷод кунад.

Яке аз сабабҳои сабук будани докер дар он аст, ки он қабатҳои монанди инҳоро истифода мебарад. Вақте ки шумо тасвирро тағир медиҳед, масалан, навсозии барнома, қабати нав сохта мешавад. Ҳамин тавр, бидуни иваз кардани тамоми тасвир ё аз нав сохтани он, тавре ки шумо шояд бо мошини виртуалӣ кор кунед, танҳо қабат илова карда мешавад ё нав карда мешавад. Ва ба шумо лозим нест, ки тамоми тасвири навро паҳн кунед, танҳо навсозӣ тақсим карда мешавад, ки паҳн кардани тасвирҳоро осонтар ва тезтар мекунад.

Дар маркази ҳар як тасвир як тасвири асосӣ аст. Масалан, ubuntu, тасвири асосии Ubuntu, ё fedora, тасвири асосии тақсимоти Fedora. Шумо инчунин метавонед тасвирҳоро ҳамчун асос барои эҷоди тасвирҳои нав истифода баред. Масалан, агар шумо тасвири apache дошта бошед, шумо метавонед онро ҳамчун тасвири асосӣ барои барномаҳои веби худ истифода баред.

Шарҳ! Docker одатан тасвирҳоро аз феҳристи Docker Hub мегирад.

Тасвирҳои Docker метавонанд аз ин тасвирҳои асосӣ эҷод карда шаванд; мо қадамҳоро барои сохтани ин тасвирҳо дастур медиҳем. Ҳар як дастур тасвир ё сатҳи нав эҷод мекунад. Дастурҳо инҳо хоҳанд буд:

  • фармонро иҷро кунед
  • илова кардани файл ё директория
  • эҷод кардани тағирёбандаи муҳити зист
  • дастурҳо оид ба чӣ кор кардан ҳангоми кушодани контейнери ин тасвир

Ин дастурҳо дар файл нигоҳ дошта мешаванд Dockerfile. Докер инро мехонад Dockerfile, вақте ки шумо тасвирро месозед, ин дастурҳоро иҷро мекунад ва тасвири ниҳоиро бармегардонад.

Феҳристи докер чӣ гуна кор мекунад?

Реестр як анбори тасвирҳои докер мебошад. Пас аз эҷод кардани тасвир, шумо метавонед онро дар феҳристи ҷамъиятии Docker Hub ё феҳристи шахсии худ нашр кунед.

Бо муштарии docker, шумо метавонед тасвирҳои аллакай нашршударо ҷустуҷӯ кунед ва онҳоро ба мошини докери худ зеркашӣ кунед, то контейнерҳо созед.

Docker Hub анбори тасвирҳои ҷамъиятӣ ва хусусиро таъмин мекунад. Ҷустуҷӯ ва зеркашии тасвирҳо аз анбори ҷамъиятӣ барои ҳама дастрас аст. Мундариҷаи анборҳои хусусӣ ба натиҷаҳои ҷустуҷӯ дохил карда намешаванд. Ва танҳо шумо ва корбарони шумо метавонед ин тасвирҳоро қабул кунед ва аз онҳо контейнерҳо созед.

Контейнер чӣ гуна кор мекунад?

Контейнер аз системаи амалиётӣ, файлҳои корбар ва метамаълумот иборат аст. Тавре ки мо медонем, ҳар як контейнер аз тасвир сохта шудааст. Ин тасвир ба докер мегӯяд, ки дар контейнер чӣ аст, кадом раванд бояд оғоз шавад, вақте ки контейнер оғоз мешавад ва дигар маълумоти конфигуратсия. Тасвири Docker танҳо барои хондан аст. Вақте ки docker контейнерро оғоз мекунад, он дар болои тасвир қабати хондан/навиштанро эҷод мекунад (бо истифода аз системаи файлии иттифоқ, тавре ки қаблан гуфта шуда буд), ки дар он барнома метавонад иҷро шавад.

Вақте ки контейнер оғоз меёбад, чӣ мешавад?

Ё бо истифода аз барнома docker, ё бо истифода аз RESTful API, муштарии докер ба демони докер мегӯяд, ки контейнерро оғоз кунад.

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

Биёед ин фармонро дида бароем. Мизоҷ бо истифода аз фармон оғоз мешавад docker, бо вариант run, ки дар он гуфта мешавад, ки контейнери нав ба кор андохта мешавад. Талаботи ҳадди ақал барои идора кардани контейнер ин атрибутҳо мебошанд:

  • Кадом тасвир барои сохтани контейнер истифода мешавад. Дар мавриди мо ubuntu
  • фармоне, ки шумо мехоҳед иҷро кунед, вақте ки контейнер оғоз мешавад. Дар мавриди мо /bin/bash

Вақте ки мо ин фармонро иҷро мекунем, дар зери сарпӯш чӣ мешавад?

Докер бо тартиби зерин амалҳои зеринро иҷро мекунад:

  • тасвири Ubuntu-ро зеркашӣ мекунад: docker мавҷудияти тасвирро тафтиш мекунад ubuntu дар мошини маҳаллӣ ва агар он дар он ҷо набошад, онро аз он зеркашӣ кунед Маркази докерӣ. Агар тасвир мавҷуд бошад, онро барои сохтани контейнер истифода мебарад;
  • контейнер эҷод мекунад: вақте ки тасвир гирифта мешавад, докер онро барои сохтани контейнер истифода мебарад;
  • системаи файлиро оғоз мекунад ва сатҳи танҳо барои хонданро насб мекунад: контейнер дар системаи файлӣ сохта мешавад ва тасвир ба сатҳи танҳо барои хондан илова карда мешавад;
  • шабака/пулро оғоз мекунад: интерфейси шабакавӣ эҷод мекунад, ки ба докер имкон медиҳад бо мошини ҳост муошират кунад;
  • Муқаррар кардани суроғаи IP: суроғаро ёфта муқаррар мекунад;
  • Раванди муайяншударо оғоз мекунад: аризаи шуморо оғоз мекунад;
  • Аз барномаи шумо натиҷаҳоро коркард ва истеҳсол мекунад: вуруд, баромад ва ҷараёни хатогиҳои стандартии барномаи шуморо пайваст ва сабт мекунад, то шумо метавонед пайгирӣ кунед, ки чӣ гуна иҷрои барномаи шумо.

Шумо ҳоло як контейнери корӣ доред. Шумо метавонед контейнери худро идора кунед, бо барномаи худ ҳамкорӣ кунед. Вақте ки шумо тасмим гирифтед, ки барномаро қатъ кунед, контейнерро нест кунед.

Технологияҳои истифодашуда

Docker дар Go навишта шудааст ва баъзе хусусиятҳои ядрои Linux-ро барои татбиқи функсияҳои дар боло зикршуда истифода мебарад.

Фазои номҳо

Docker технологияро истифода мебарад namespaces барои ташкили ҷойҳои кори ҷудошуда, ки мо онҳоро контейнерҳо меномем. Вақте ки мо контейнерро оғоз мекунем, docker маҷмӯи фазоҳои номҳоро барои ин контейнер эҷод мекунад.

Ин як қабати ҷудошуда эҷод мекунад, ки ҳар як ҷанбаи контейнер дар фазои номи худ кор мекунад ва ба системаи беруна дастрасӣ надорад.

Рӯйхати баъзе фазоҳои ном, ки докер истифода мебарад:

  • пид: ҷудо кардани раванд;
  • соф: барои идоракунии интерфейсҳои шабакавӣ;
  • ipc: барои идоракунии захираҳои IPC. (ICP: InterProccess Communication);
  • mnt: идора кардани нуқтаҳои васлкунӣ;
  • ЗҲҶ - Замони Ҳамоҳанги Ҷаҳон: барои ҷудо кардани ядро ​​ва назорати тавлиди версияи (UTC: Unix системаи timesharing).

Гурӯҳҳои назоратӣ

Docker инчунин технологияро истифода мебарад cgroups ё гурӯҳҳои назоратӣ. Калиди дар алоҳидагӣ кор кардани барнома таъмин кардани барнома танҳо бо захираҳое мебошад, ки шумо мехоҳед пешниҳод кунед. Ин кафолат медиҳад, ки контейнерҳо ҳамсояҳои хуб хоҳанд буд. Гурӯҳҳои назоратӣ ба шумо имкон медиҳанд, ки захираҳои сахтафзори мавҷударо мубодила кунед ва дар ҳолати зарурӣ маҳдудиятҳо ва маҳдудиятҳоро муқаррар кунед. Масалан, миқдори имконпазири хотираро барои контейнер маҳдуд кунед.

Системаи файлии иттифоқӣ

Union File Sysem ё UnionFS як системаи файлист, ки тавассути сохтани қабатҳо кор мекунад ва онро хеле сабук ва тез мекунад. Docker UnionFS-ро барои сохтани блокҳое, ки аз он контейнер сохта шудааст, истифода мебарад. Docker метавонад якчанд вариантҳои UnionFS-ро истифода барад, аз ҷумла: AUFS, btrfs, vfs ва DeviceMapper.

Форматҳои контейнер

Docker ин ҷузъҳоро ба як бастабанде муттаҳид мекунад, ки мо онро формати контейнер меномем. Формати пешфарз номида мешавад libcontainer. Docker инчунин формати анъанавии контейнерро дар Linux истифода мебарад LXC. Дар оянда, Docker метавонад форматҳои дигари контейнерро дастгирӣ кунад. Масалан, ҳамгироӣ бо зиндонҳои BSD ё Solaris Zones.

Манбаъ: will.com

Илова Эзоҳ