Оё Docker бозича аст ё не? Ё ин ҳанӯз дуруст аст?

Салом хама!

Ман дар ҳақиқат мехоҳам рост ба мавзӯъ равам, аммо дар бораи саргузашти худ каме нақл кардан дурусттар мебуд:

даромад

Ман як барномасоз ҳастам, ки дар таҳияи замимаҳои як саҳифаи frontend, scala/java ва nodejs дар сервер таҷриба дорам.

Дар муддати хеле тӯлонӣ (ҳатман як ҷуфт ё се сол) ман фикр мекардам, ки Docker манна аз осмон аст ва дар маҷмӯъ асбоби хеле олӣ аст ва комилан ҳар як таҳиякунанда бояд аз он истифода барад. Ва аз ин бармеояд, ки ҳар як таҳиягар бояд Docker-ро дар мошини маҳаллии худ насб кунад. Дар бораи андешаи ман чӣ гуфтан мумкин аст, ба ҷойҳои холӣ нигаред, ки дар ҳамон hh ҷойгир карда шудаанд. Ҳар як сония як ёдгории докерро дар бар мегирад ва агар шумо соҳиби он бошед, ин бартарии рақобатии шумо хоҳад буд 😉

Дар роҳ ман бо бисёр одамон вохӯрдам, ки муносибати онҳо ба Докер ва экосистемаи он гуногун аст. Баъзеҳо гуфтанд, ки ин як чизи мувофиқест, ки фаъолияти кросс-платформаро кафолат медиҳад. Дуюмӣ намефаҳмиданд, ки чаро бояд дар контейнерҳо давида шаванд ва аз он чӣ фоида меорад, сеюмӣ тамоман парвое надошт ва парво ҳам намекарданд (онҳо танҳо код навишта, ба хона рафтанд - ба онҳо ҳасад бурдам, аз ҷониби роҳ :)

Сабабҳои истифода

Чаро ман docker истифода кардам? Эҳтимол бо сабабҳои зерин:

  • кушодани пойгоҳи додаҳо, 99% барномаҳо онҳоро истифода мебаранд
  • оғоз кардани nginx барои тақсимоти фронталӣ ва прокси ба қафо
  • шумо метавонед барномаро дар тасвири докер бастабандӣ кунед, ҳамин тавр барномаи ман дар ҳар ҷое, ки докер вуҷуд дорад кор мекунад, мушкилоти тақсимот фавран ҳал карда мешавад.
  • кашфи хидмат аз қуттӣ, шумо метавонед хидматҳои хурд эҷод кунед, ҳар як контейнер (ба шабакаи умумӣ пайваст) метавонад ба осонӣ тавассути тахаллуси дигар ба дигаре дастрас шавад, хеле қулай
  • Эҷоди контейнер ва дар он "бозӣ кардан" шавқовар аст.

Он чизе, ки ба ман ҳамеша дар бораи докер маъқул нест:

  • Барои он ки барномаи ман кор кунад, ба ман худи Docker дар сервер лозим аст. Чаро ба ман ин лозим аст, агар замимаҳои ман дар jre ё nodejs кор кунанд ва муҳити онҳо аллакай дар сервер бошад?
  • агар ман мехоҳам тасвири (хусусии) маҳаллии худро дар сервери дурдаст иҷро кунам, пас ба ман анбори докери худ лозим аст, ба ман реестр лозим аст, ки дар ҷое кор кунад ва ман инчунин бояд https-ро танзим кунам, зеро docker cli танҳо аз https кор мекунад. Оҳ, лаънат ... вариантҳо мавҷуданд, албатта, барои захира кардани тасвир ба таври маҳаллӣ тавассути docker save ва танҳо тасвирро тавассути scp фиристед ... Аммо ин бисёр ҳаракатҳои бадан аст. Ғайр аз он, он то пайдо шудани анбори шахсии шумо як ҳалли "асғола" ба назар мерасад
  • docker-compose. Он танҳо барои кор кардани контейнерҳо лозим аст. Ҳамааш ҳамин. Вай дигар коре карда наметавонад. Docker-compose як даста версияҳои файлҳои худ, синтаксиси худро дорад. Новобаста аз он ки ин декларативӣ бошад ҳам, ман ҳуҷҷатҳои онҳоро хондан намехоҳам. Ба ман дар ҷои дигар лозим нест.
  • ҳангоми кор дар гурӯҳ, аксарияти одамон Dockerfile-ро хеле каҷ менависанд, намефаҳманд, ки он чӣ гуна кэш шудааст, ҳама чизеро, ки онҳо лозиманд ва ба тасвир лозим нестанд, илова мекунанд, аз тасвирҳое, ки дар Dockerhub ё анбори хусусӣ нестанд, мерос мегиранд, баъзе файлҳоро эҷод мекунанд. docker-compose файлҳо бо пойгоҳи додаҳо ва ҳеҷ чиз боқӣ намемонад. Дар айни замон, таҳиягарон бо ифтихор изҳор мекунанд, ки Docker олӣ аст, ҳама чиз барои онҳо маҳаллӣ кор мекунад ва HR дар ҷои холӣ муҳим менависад: "Мо Docker-ро истифода мебарем ва ба мо номзаде лозим аст, ки чунин таҷрибаи корӣ дошта бошад."
  • Ман доимо дар бораи баланд бардоштани ҳама чиз дар Docker фикр мекунам: postgresql, kafka, redis. Афсӯс, ки на ҳама чиз дар контейнерҳо кор мекунад, на ҳама чизро танзим кардан ва идора кардан осон аст. Инро таҳиягарони тарафи сеюм дастгирӣ мекунанд, на худи фурӯшандагон. Ва дар омади гап, дарҳол савол ба миён меояд: фурӯшандагон дар бораи нигоҳ доштани маҳсулоти худ дар Docker хавотир намешаванд, чаро ин аст, шояд онҳо чизе медонанд?
  • Савол ҳамеша дар бораи устувории маълумоти контейнер ба миён меояд. ва он гоҳ шумо фикр мекунед, ки ман бояд директорияи мизбонро насб кунам ё ҳаҷми докер эҷод кунам ё контейнери маълумоте созам, ки ҳоло deprecated? Агар ман директорияро насб кунам, пас ман бояд боварӣ ҳосил кунам, ки uid ва gid-и корбар дар контейнер ба ID-и корбаре, ки контейнерро оғоз кардааст, мувофиқат кунад, вагарна файлҳои аз ҷониби контейнер сохташуда бо ҳуқуқи реша эҷод карда мешаванд. Агар ман истифода кунам volume он гоҳ маълумот танҳо дар баъзе офарида мешавад /usr/* ва ҳамон достоне бо uid ва gid хоҳад буд, ки дар мавриди аввал. Агар шумо як ҷузъи тарафи сеюмро оғоз кунед, шумо бояд ҳуҷҷатҳоро хонед ва ба саволи ҷавоб ҷӯед: "компонент файлҳоро дар кадом директорияҳои контейнерӣ менависад?"

Ба ман ҳамеша маъқул набуд, ки ман маҷбур будам, ки бо Докер муддати тӯлонӣ кор кунам дар марҳилаи ибтидоӣ: Ман фаҳмидам, ки чӣ гуна контейнерҳоро оғоз кардан лозим аст, аз кадом тасвирҳо оғоз кардан лозим аст, Makefiles сохтанд, ки дорои тахаллуси фармонҳои дарози Docker буданд. Ман аз docker-compose нафрат доштам, зеро ман намехостам асбоби дигареро дар экосистемаи докер омӯзам. ВА docker-compose up Ин маро ба ташвиш меовард, хусусан агар онҳо то ҳол дар он ҷо вохӯрданд build конструк-цияхо, на тасвирхои аллакай васлшуда. Ҳамаи ман дар ҳақиқат мехостам, ки маҳсулотро самаранок ва зуд созам. Аммо ман фаҳмида наметавонистам, ки чӣ тавр истифода бурдани docker.

Муаррифии Ansible

Ба наздикӣ (се моҳ пеш) ман бо як дастаи DevOps кор кардам, ки қариб ҳар як аъзои он ба Докер муносибати манфӣ доштанд. Бо сабабҳо:

  • docker iptables-ро қоида мекунад (гарчанде ки шумо метавонед онро дар daemon.json хомӯш кунед)
  • докер хато аст ва мо онро дар истеҳсолот истифода намебарем
  • агар демони докер суқут кунад, пас ҳама контейнерҳо бо инфрасохтор мувофиқан ба кор медароянд
  • ба докер лозим нест
  • чаро докер, агар мошинҳои Ansible ва виртуалӣ вуҷуд дошта бошанд

Дар худи хамон кор ман бо асбоби дигар — Ansible шинос шудам. Ман як бор дар ин бора шунидам, аммо ман кӯшиш накардаам, ки китобҳои бозиҳои худро нависам. Ва ҳоло ман ба навиштани вазифаҳои худ шурӯъ кардам ва он гоҳ диди ман комилан тағйир ёфт! Зеро ман фаҳмидам: Ansible дорои модулҳо барои кор кардани ҳамон контейнерҳои докер, сохтани тасвирҳо, шабакаҳо ва ғайра мебошад ва контейнерҳоро на танҳо дар сатҳи маҳаллӣ, балки дар серверҳои дурдаст низ иҷро кардан мумкин аст! Хурсандии ман ҳадду канор надошт - ман як абзори NORMAL ёфтам ва файлҳои Makefile ва docker-compose-ро партофтам, онҳо бо вазифаҳои yaml иваз карда шуданд. Рамз бо истифода аз сохторҳои монанди кам карда шуд loop, whenВа ѓайра

Docker барои иҷро кардани ҷузъҳои тарафи сеюм ба монанди пойгоҳи додаҳо

Ман ба карибй бо туннельхои сш шинос шудам. Маълум шуд, ки порти сервери дурдастро ба порти маҳаллӣ «фиристондан» хеле осон аст. Сервери дурдаст метавонад ё мошине дар абр ё мошини виртуалӣ бошад, ки дар VirtualBox кор мекунад. Агар ба ман ё ҳамкасби ман махзани маълумот (ё ягон ҷузъи дигари тарафи сеюм) лозим бошад, мо метавонем танҳо серверро бо ин ҷузъ оғоз кунем ва ҳангоми лозим набудани сервер онро хомӯш кунем. Интиқоли порт ҳамон таъсиреро медиҳад, ки пойгоҳи додаҳо дар контейнери докер кор мекунад.

Ин фармон порти маҳаллии маро ба сервери дурдаст, ки postgresql кор мекунад, интиқол медиҳад:

ssh -L 9000: мизбони маҳаллӣ: 5432 [почтаи электронӣ ҳифз карда шудааст]

Истифодаи сервери дурдаст мушкилотро бо рушди даста ҳал мекунад. Чунин сервер метавонад аз ҷониби якчанд таҳиягарон якбора истифода шавад; ба онҳо лозим нест, ки postgresql-ро конфигуратсия кунанд, Docker ва дигар нозукиҳоро дарк кунанд. Дар сервери дурдаст, шумо метавонед ҳамон пойгоҳи додаҳоро дар худи Docker насб кунед, агар насб кардани версияи мушаххас душвор бошад. Ҳама ба таҳиягарон ниёз доранд, ки дастрасии ssh-ро таъмин кунанд!

Ман ба наздикӣ хондам, ки нақбҳои SSH як функсияи маҳдуди VPN-и муқаррарӣ мебошанд! Шумо метавонед танҳо OpenVPN ё дигар татбиқи VPN-ро насб кунед, инфрасохторро насб кунед ва онро ба таҳиягарон барои истифода диҳед. Ин хеле аҷиб аст!

Хушбахтона, AWS, GoogleCloud ва дигарон ба шумо як соли истифодаи ройгон медиҳанд, аз ин рӯ онҳоро истифода баред! Онҳо арзон мебошанд, агар шумо онҳоро ҳангоми истифода нашудан хомӯш кунед. Ман ҳамеша дар ҳайрат будам, ки чаро ба ман сервери дурдаст ба монанди gcloud лозим аст, ба назар чунин мерасад, ки ман онҳоро ёфтам.

Ҳамчун мошини маҷозии маҳаллӣ, шумо метавонед ҳамон Alpine-ро, ки дар контейнерҳои докер фаъолона истифода мешавад, истифода баред. Хуб, ё дигар тақсимоти сабук барои тезтар пурбор кардани мошин.

Сатри поён: шумо метавонед ва бояд дар серверҳои дурдаст ё дар қуттии виртуалӣ пойгоҳи додаҳо ва дигар инфрасохторҳоро иҷро кунед. Барои ин мақсадҳо ба ман докер лозим нест.

Каме дар бораи тасвирҳои докер ва тақсимот

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

Оё шумо ягон ҷоеро дидаед, ки таҳиягарони нармафзор маҳсулоти худро танҳо дар тасвири докер интиқол медиҳанд?
Натиҷаи аксари маҳсулот файлҳои бинарӣ барои платформаи мушаххас мебошанд; онҳо танҳо ба тасвири докер илова карда мешаванд, ки аз платформаи дилхоҳ мерос гирифта шудааст. Оё шумо ягон бор фикр кардаед, ки чаро дар dockerhub ин қадар тасвирҳои шабеҳ мавҷуданд? Масалан, nginx-ро ворид кунед, шумо 100500 тасвири одамони гуногунро хоҳед дид. Ин одамон худи nginx-ро таҳия накарданд, онҳо танҳо nginx-и расмии худро ба тасвири докери худ илова карданд ва онро бо конфигуратсияҳои худ барои роҳати кушодани контейнерҳо таҷриба карданд.

Умуман, шумо метавонед онро ба таври оддӣ дар tgz нигоҳ доред, агар касе онро дар docker иҷро кунад, пас бигзор онҳо tgz-ро ба Dockerfile илова кунанд, аз муҳити дилхоҳ мерос гиранд ва бастаҳои иловагӣ эҷод кунанд, ки худи барномаро дар tgz тағир надиҳанд. Ҳар касе, ки тасвири докер эҷод мекунад, медонад, ки tgz чист ва барои ӯ чӣ кор кардан лозим аст. Ҳамин тавр ман docker-ро истифода мебарам дар ин ҷо

Сатри поён: Ман ба феҳристи докер ниёз надорам, ман як намуди S3 ё танҳо нигаҳдории файлро ба мисли google drive/dropbox истифода мебарам

Докер дар CI

Ҳама ширкатҳое, ки ман кор кардаам, ба ҳам монанданд. Онҳо одатан хӯрокворӣ мебошанд. Яъне, онҳо як барнома, як стек технологӣ доранд (хуб, шояд як ҷуфт ё се забони барномасозӣ).

Ин ширкатҳо дар серверҳои худ, ки раванди CI кор мекунад, докерро истифода мебаранд. Савол: Чаро ба шумо лозим аст, ки лоиҳаҳоро дар як контейнери докер дар серверҳои худ созед? Чаро танҳо барои сохтани муҳити зист омода накунед, масалан, як китоби бозикунии Ansible нависед, ки версияҳои зарурии nodejs, php, jdk, нусхабардории калидҳои ssh ва ғайраро ба сервере, ки сохтмон дар он сохта мешавад, насб кунад?

Ҳоло ман фаҳмидам, ки ин ба пои худ тир мезанам, зеро докер бо изолятсияаш фоидае намеорад. Мушкилоте, ки ман бо CI дар docker дучор шудам:

  • боз ба шумо барои сохтани тасвири докер лозим аст. шумо бояд тасвирро ҷустуҷӯ кунед ё файли docker-и худро нависед.
  • 90%, ки ба шумо лозим аст, ки баъзе калидҳои ssh, маълумоти махфиеро, ки шумо намехоҳед ба тасвири докер нависед, интиқол диҳед.
  • контейнер сохта мешавад ва мемирад, ҳама кэшҳо дар баробари он гум мешаванд. сохтмони навбатӣ ҳамаи вобастагии лоиҳаро аз нав зеркашӣ мекунад, ки вақтро сарф мекунад ва бесамар аст ва вақт пул аст.

Таҳиягарон дар контейнерҳои докер лоиҳаҳо намесозанд (ман як вақтҳо чунин мухлис будам, воқеан, дар гузашта аз худам пушаймон мешавам xD). Дар Java мумкин аст, ки якчанд версия дошта бошед ва онҳоро бо як фармон ба фармоне, ки ҳоло лозим аст, иваз кунед. Дар nodejs ҳамин тавр аст, nvm вуҷуд дорад.

хулоса

Ман боварӣ дорам, ки докер як воситаи хеле пурқувват ва чандир аст, ин камбудии он аст (аҷиб садо медиҳад, ҳа). Бо ёрии он, ширкатҳо метавонанд ба осонӣ ба он пайваст шаванд ва онро дар ҷои лозим ва нолозим истифода баранд. Таҳиягарон контейнерҳои худро, баъзе муҳитҳои худро ба кор меандозанд, пас ҳама ба таври осон ба CI ва истеҳсолот ҷорӣ мешаванд. Дастаи DevOps барои идора кардани ин контейнерҳо як навъ рамз менависад.

Докерро танҳо дар охирин марҳилаи ҷараёни кори худ, онро дар ибтидо ба лоиҳа кашола накунед. Он мушкилоти тиҷорати шуморо ҳал намекунад. Вай мушкилотро танҳо ба сатҳи ДИГАР интиқол медиҳад ва ҳалли худро пешниҳод мекунад, шумо кори дукарата мекунед.

Вақте ки докер лозим аст: Ман ба хулосае омадам, ки докер дар оптимизатсияи раванди додашуда хеле хуб аст, аммо на дар сохтани функсияҳои асосӣ

Агар шумо то ҳол қарор қабул кунед, ки docker-ро истифода баред, пас:

  • бениҳоят эҳтиёт бошед
  • таҳиягаронро маҷбур накунед, ки docker-ро истифода баранд
  • истифодаи онро дар як ҷо локализатсия кунед, онро дар тамоми анборҳои Dockfile ва docker-compose паҳн накунед

PS:

Ташаккур ба шумо барои хондан, ман ба шумо дар корҳои худ қарорҳои шаффоф ва рӯзҳои кории пурсамар мехоҳам!

Манбаъ: will.com

Илова Эзоҳ