Ṣe Docker jẹ nkan isere tabi kii ṣe? Tabi o tun jẹ otitọ?

Kaabo gbogbo eniyan!

Mo fẹ gaan lati lọ taara si koko-ọrọ naa, ṣugbọn yoo jẹ deede diẹ sii lati sọ diẹ nipa itan mi:

Ifihan

Mo jẹ pirogirama ti o ni iriri ni idagbasoke awọn ohun elo oju-iwe iwaju iwaju, scala/java ati nodejs lori olupin naa.

Fun igba pipẹ (pato tọkọtaya kan tabi ọdun mẹta), Mo wa ninu ero pe Docker jẹ manna lati ọrun ati ni gbogbogbo ohun elo ti o tutu pupọ ati pe gbogbo idagbasoke yẹ ki o ni anfani lati lo. Ati lati inu eyi o tẹle pe gbogbo idagbasoke yẹ ki o ti fi sori ẹrọ Docker sori ẹrọ agbegbe wọn. Kini nipa ero mi, wo nipasẹ awọn aye ti a fiweranṣẹ lori hh kanna. Gbogbo iṣẹju-aaya ni mẹnuba ti docker, ati pe ti o ba ni, eyi yoo jẹ anfani ifigagbaga rẹ 😉

Ni ọna mi, Mo pade ọpọlọpọ eniyan, pẹlu awọn ihuwasi oriṣiriṣi wọn si Docker ati ilolupo rẹ. Diẹ ninu awọn sọ pe eyi jẹ ohun ti o rọrun ti o ṣe iṣeduro iṣẹ ṣiṣe agbelebu. Awọn keji ko loye idi ti wọn fi yẹ ki wọn ṣiṣe ni awọn apoti ati kini èrè ti yoo wa lati ọdọ rẹ, ẹkẹta ko bikita rara ko ṣe wahala (wọn kan kọ koodu naa ati lọ si ile - Mo ṣe ilara wọn, nipasẹ awọn ona :)

Awọn idi fun lilo

Kini idi ti MO lo docker? Boya fun awọn idi wọnyi:

  • ifilọlẹ data, 99% awọn ohun elo lo wọn
  • ifilọlẹ nginx fun pinpin iwaju ati aṣoju si ẹhin
  • o le ṣe akopọ ohun elo ni aworan docker, ni ọna yii ohun elo mi yoo ṣiṣẹ nibikibi ti docker wa, iṣoro pinpin ni ipinnu lẹsẹkẹsẹ
  • Awari iṣẹ jade ninu apoti, o le ṣẹda awọn microservices, kọọkan eiyan (ti sopọ si a wọpọ nẹtiwọki) le awọn iṣọrọ de ọdọ miiran nipasẹ ohun inagijẹ, gan rọrun.
  • O jẹ igbadun lati ṣẹda eiyan kan ati "ṣere" ninu rẹ.

Ohun ti Emi ko nifẹ nigbagbogbo nipa docker:

  • Ni ibere fun ohun elo mi lati ṣiṣẹ, Mo nilo Docker funrararẹ lori olupin naa. Kini idi ti MO nilo eyi ti awọn ohun elo mi ba ṣiṣẹ lori jre tabi nodejs ati agbegbe fun wọn ti wa tẹlẹ lori olupin naa?
  • ti MO ba fẹ ṣiṣe aworan mi (ikọkọ) ti a ṣe ni agbegbe lori olupin latọna jijin, lẹhinna Mo nilo ibi ipamọ docker ti ara mi, Mo nilo iforukọsilẹ lati ṣiṣẹ ni ibikan ati pe Mo tun nilo lati tunto https, nitori docker cli nikan ṣiṣẹ lori https. Oh damn... awọn aṣayan wa, nitorinaa, lati fi aworan pamọ ni agbegbe nipasẹ docker save ati pe o kan fi aworan ranṣẹ nipasẹ scp... Ṣugbọn iyẹn ni ọpọlọpọ awọn agbeka ara. Ati ni afikun, o dabi ojutu “crutch” titi ibi ipamọ ti ara rẹ yoo han
  • docker-compose. O nilo nikan lati ṣiṣe awọn apoti. Gbogbo ẹ niyẹn. Ko le ṣe ohunkohun miiran. Docker-compose ni opo awọn ẹya ti awọn faili rẹ, sintasi tirẹ. Laibikita bawo ni o ṣe ṣalaye, Emi ko fẹ ka iwe wọn. Emi kii yoo nilo nibikibi miiran.
  • Nigbati o ba n ṣiṣẹ ni ẹgbẹ kan, ọpọlọpọ eniyan kọ Dockerfile ni wiwọ pupọ, ko loye bi o ṣe jẹ cache, ṣafikun ohun gbogbo ti wọn nilo ati pe ko nilo aworan naa, jogun lati awọn aworan ti ko si ni Dockerhub tabi ibi ipamọ ikọkọ, ṣẹda diẹ ninu docker-compose awọn faili pẹlu awọn apoti isura infomesonu ati pe ko si nkan ti o wa. Ni akoko kanna, awọn olupilẹṣẹ n fi igberaga kede pe Docker jẹ itura, ohun gbogbo n ṣiṣẹ ni agbegbe fun wọn, ati pe HR ṣe pataki kọwe ninu aye: “A lo Docker ati pe a nilo oludije kan pẹlu iru iriri iṣẹ.”
  • Mo jẹ Ebora nigbagbogbo nipasẹ awọn ero nipa igbega ohun gbogbo ni Docker: postgresql, kafka, redis. O ṣe aanu pe kii ṣe ohun gbogbo ṣiṣẹ ninu awọn apoti, kii ṣe ohun gbogbo rọrun lati tunto ati ṣiṣe. Eyi ni atilẹyin nipasẹ awọn olupilẹṣẹ ẹni-kẹta, kii ṣe nipasẹ awọn olutaja funrararẹ. Ati nipasẹ ọna, ibeere naa waye lẹsẹkẹsẹ: awọn olutaja ko ṣe aniyan nipa mimu awọn ọja wọn ni Docker, kilode ti eyi, boya wọn mọ nkankan?
  • Ibeere nigbagbogbo waye nipa itẹramọṣẹ ti data eiyan. ati lẹhinna o ro pe, o yẹ ki Mo kan gbe itọsọna agbalejo naa tabi ṣẹda iwọn docker tabi ṣe eiyan data eyiti o jẹ bayi deprecated? Ti MO ba gbe itọsọna kan, lẹhinna Mo nilo lati rii daju pe uid ati gid ti olumulo ninu apo eiyan baamu id ti olumulo ti o ṣe ifilọlẹ eiyan naa, bibẹẹkọ awọn faili ti o ṣẹda nipasẹ eiyan yoo ṣẹda pẹlu awọn ẹtọ gbongbo. Ti mo ba lo volume ki o si awọn data yoo nìkan wa ni da ni diẹ ninu awọn /usr/* ati pe itan kanna yoo wa pẹlu uid ati gid bi ninu ọran akọkọ. Ti o ba n ṣe ifilọlẹ paati ẹni-kẹta, o nilo lati ka iwe naa ki o wa idahun si ibeere naa: “Ninu awọn ilana eiyan wo ni paati kọ awọn faili?”

Emi ko fẹran otitọ nigbagbogbo pe Mo ni lati tinker pẹlu Docker fun igba pipẹ ni ipele ibẹrẹ: Mo ṣayẹwo bi o ṣe le ṣe ifilọlẹ awọn apoti, kini awọn aworan lati ṣe ifilọlẹ lati, ṣe Makefiles ti o ni awọn inagijẹ si awọn aṣẹ Docker gigun. Mo korira docker-compose nitori Emi ko fẹ lati kọ ohun elo miiran ni ilolupo docker. ATI docker-compose up O dun mi, paapaa ti wọn ba tun pade nibẹ build constructions, kuku ju tẹlẹ jọ images. Gbogbo ohun ti Mo fẹ gaan ni lati kan ṣe ọja daradara ati ni iyara. Ṣugbọn Emi ko le ro ero bi o ṣe le lo docker.

Ifihan Ansible

Laipẹ (osu mẹta sẹhin), Mo ṣiṣẹ pẹlu ẹgbẹ DevOps kan, o fẹrẹ jẹ gbogbo ọmọ ẹgbẹ eyiti o ni ihuwasi odi si Docker. Fun awọn idi:

  • docker awọn ofin iptables (botilẹjẹpe o le mu kuro ni daemon.json)
  • docker jẹ buggy ati pe a kii yoo ṣiṣẹ ni iṣelọpọ
  • ti docker daemon ba kọlu, lẹhinna gbogbo awọn apoti pẹlu jamba amayederun ni ibamu
  • ko si nilo fun docker
  • idi docker ti o ba ti wa nibẹ ni Ansible ati ki o foju ero

Ni iṣẹ kanna, Mo ti mọ ohun elo miiran - Ansible. Mo ti gbọ nipa rẹ lẹẹkan, ṣugbọn Emi ko gbiyanju lati kọ awọn iwe-iṣere ti ara mi. Ati nisisiyi Mo bẹrẹ kikọ awọn iṣẹ-ṣiṣe mi ati lẹhinna iran mi yipada patapata! Nitoripe Mo ṣe akiyesi: Ansible ni awọn modulu fun ṣiṣe awọn apoti docker kanna, awọn aworan kọ, awọn nẹtiwọọki, ati bẹbẹ lọ, ati awọn apoti le ṣee ṣiṣẹ kii ṣe ni agbegbe nikan, ṣugbọn tun lori awọn olupin latọna jijin! Idunnu mi ko mọ awọn opin - Mo rii ohun elo NORMAL kan o si sọ Makefile mi ati awọn faili akojọpọ docker, rọpo wọn pẹlu awọn iṣẹ ṣiṣe yaml. Awọn koodu ti a din nipa lilo awọn itumọ ti bi loop, when, Bbl

Docker fun ṣiṣe awọn paati ẹnikẹta gẹgẹbi awọn apoti isura data

Laipẹ Mo ti di ojulumọ pẹlu awọn tunnels ssh. O wa ni pe o rọrun pupọ lati "firanṣẹ" ibudo ti olupin latọna jijin si ibudo agbegbe kan. Olupin latọna jijin le jẹ boya ẹrọ kan ninu awọsanma tabi ẹrọ foju ti nṣiṣẹ ni VirtualBox. Ti ẹlẹgbẹ mi tabi Mo nilo aaye data kan (tabi diẹ ninu awọn paati ẹnikẹta miiran), a le jiroro ni bẹrẹ olupin pẹlu paati yii ki o si pa a nigbati olupin naa ko nilo. Gbigbe ibudo n funni ni ipa kanna bi ibi ipamọ data ti n ṣiṣẹ ninu apo eiyan docker kan.

Aṣẹ yii dari ibudo agbegbe mi si olupin latọna jijin ti n ṣiṣẹ postgresql:

ssh -L 9000: localhost: 5432 [imeeli ni idaabobo]

Lilo olupin latọna jijin yanju iṣoro naa pẹlu idagbasoke ẹgbẹ. Iru olupin yii le ṣee lo nipasẹ ọpọlọpọ awọn olupilẹṣẹ ni ẹẹkan; wọn ko nilo lati ni anfani lati tunto postgresql, loye Docker ati awọn intricacies miiran. Lori olupin latọna jijin, o le fi data data kanna sori Docker funrararẹ, ti o ba ṣoro lati fi ẹya kan pato sori ẹrọ. Gbogbo awọn olupilẹṣẹ nilo ni lati pese iraye si ssh!

Laipẹ Mo ka pe awọn eefin SSH jẹ iṣẹ ṣiṣe lopin ti VPN deede! O le jiroro ni fi OpenVPN sori ẹrọ tabi awọn imuse VPN miiran, ṣeto awọn amayederun ati fun awọn olupilẹṣẹ fun lilo. Eyi dara pupọ!

O da, AWS, GoogleCloud ati awọn miiran fun ọ ni ọdun kan ti lilo ọfẹ, nitorinaa lo wọn! Wọn jẹ olowo poku ti o ba pa wọn nigbati ko si ni lilo. Mo nigbagbogbo ṣe iyalẹnu idi ti Emi yoo nilo olupin latọna jijin bi gcloud, o dabi pe Mo rii wọn.

Gẹgẹbi ẹrọ foju agbegbe, o le lo Alpine kanna, eyiti o lo ni itara ninu awọn apoti docker. O dara, tabi diẹ ninu awọn pinpin iwuwo fẹẹrẹ lati jẹ ki ẹrọ bata yiyara.

Laini isalẹ: o le ati pe o yẹ ki o ṣiṣẹ awọn apoti isura infomesonu ati awọn ohun elo amayederun miiran lori awọn olupin latọna jijin tabi ni apoti foju. Emi ko nilo docker fun awọn idi wọnyi.

Diẹ ninu awọn aworan docker ati pinpin

Mo ti kọ tẹlẹ nkan ninu eyiti Mo fẹ lati fihan pe lilo awọn aworan docker ko pese iṣeduro eyikeyi. Awọn aworan Docker nilo nikan lati ṣẹda apoti docker kan. Ti o ba n ṣe igbesoke si aworan docker, lẹhinna o n ṣe igbesoke lati lo awọn apoti docker ati pe iwọ yoo lo wọn nikan.

Njẹ o ti rii nibikibi nibiti awọn olupilẹṣẹ sọfitiwia gbe awọn ọja wọn si nikan ni aworan docker kan?
Abajade ti ọpọlọpọ awọn ọja jẹ awọn faili alakomeji fun pẹpẹ kan pato; wọn rọrun ni afikun si aworan docker, eyiti o jogun lati pẹpẹ ti o fẹ. Njẹ o ti ṣe iyalẹnu idi ti ọpọlọpọ awọn aworan ti o jọra wa lori dockerhub? Tẹ nginx fun apẹẹrẹ, iwọ yoo rii awọn aworan 100500 lati awọn eniyan oriṣiriṣi. Awọn eniyan wọnyi ko ṣe idagbasoke nginx funrararẹ, wọn ṣafikun nginx osise nirọrun si aworan docker wọn ati ni akoko pẹlu awọn atunto tiwọn fun irọrun ti awọn apoti ifilọlẹ.

Ni gbogbogbo, o le jiroro ni fipamọ ni tgz, ti ẹnikan ba nilo lati ṣiṣẹ ni docker, lẹhinna jẹ ki wọn ṣafikun tgz si Dockerfile, jogun lati agbegbe ti o fẹ ati ṣẹda awọn buns afikun ti ko yi ohun elo funrararẹ ni tgz. Ẹnikẹni ti yoo ṣẹda aworan docker yoo mọ kini tgz jẹ ati ohun ti o nilo lati ṣiṣẹ. Eyi ni bii MO ṣe lo docker nibi

Laini isalẹ: Emi ko nilo iforukọsilẹ docker, Emi yoo lo diẹ ninu iru S3 tabi ibi ipamọ faili kan bi google drive/box

Docker ni CI

Gbogbo awọn ile-iṣẹ ti Mo ti ṣiṣẹ fun jẹ iru. Wọn jẹ ile ounjẹ nigbagbogbo. Iyẹn ni, wọn ni ohun elo kan, akopọ imọ-ẹrọ kan (daradara, boya tọkọtaya kan tabi awọn ede siseto mẹta).

Awọn ile-iṣẹ wọnyi lo docker lori awọn olupin wọn nibiti ilana CI nṣiṣẹ. Ibeere: Kini idi ti o nilo lati kọ awọn iṣẹ akanṣe sinu apo eiyan docker lori awọn olupin rẹ? Kini idi ti kii ṣe mura agbegbe kan fun kikọ, fun apẹẹrẹ, kọ iwe-iṣere Ansible ti yoo fi awọn ẹya pataki ti nodejs, php, jdk, daakọ awọn bọtini ssh, ati bẹbẹ lọ si olupin ninu eyiti kikọ yoo waye?

Ni bayi Mo loye pe eyi ni ibon yiyan ara mi ni ẹsẹ, nitori docker ko mu ere eyikeyi pẹlu ipinya rẹ. Awọn iṣoro ti Mo pade pẹlu CI ni docker:

  • lẹẹkansi o nilo aworan docker lati kọ. o nilo lati wa aworan tabi kọ dockerfile tirẹ.
  • 90% ti o nilo lati dari diẹ ninu awọn bọtini ssh, data aṣiri ti o ko fẹ kọ si aworan docker.
  • eiyan ti wa ni da ati ki o kú, gbogbo awọn caches ti wa ni sọnu pẹlú pẹlu ti o. Kọ atẹle yoo tun ṣe igbasilẹ gbogbo awọn igbẹkẹle iṣẹ akanṣe, eyiti o jẹ akoko-n gba ati ailagbara, ati pe akoko jẹ owo.

Awọn olupilẹṣẹ ko kọ awọn iṣẹ akanṣe ni awọn apoti docker (Mo jẹ olufẹ ni ẹẹkan, looto, Mo ni aanu fun ara mi ni xD ti o kọja). Ni Java o ṣee ṣe lati ni awọn ẹya pupọ ati yi wọn pada pẹlu aṣẹ kan si ọkan ti o nilo ni bayi. O jẹ kanna ni nodejs, nvm wa.

ipari

Mo gbagbọ pe docker jẹ ohun elo ti o lagbara pupọ ati irọrun, eyi ni apadabọ rẹ (o dun ajeji, bẹẹni). Pẹlu iranlọwọ rẹ, awọn ile-iṣẹ le ni irọrun ni ifaramọ lori rẹ ati lo nibiti o nilo ati pe ko nilo. Awọn olupilẹṣẹ ṣe ifilọlẹ awọn apoti wọn, diẹ ninu awọn agbegbe wọn, lẹhinna gbogbo rẹ nṣan laisiyonu sinu CI ati iṣelọpọ. Ẹgbẹ DevOps n kọ iru koodu kan lati ṣiṣe awọn apoti wọnyi.

Lo docker nikan lori julọ ​​to šẹšẹ ipele ninu rẹ bisesenlo, ma ṣe fa o sinu ise agbese ni ibẹrẹ. Kii yoo yanju awọn iṣoro iṣowo rẹ. Oun yoo gbe awọn iṣoro lọ si ipele MIIRAN ati pese awọn ojutu tirẹ, iwọ yoo ṣe iṣẹ meji.

Nigbati docker nilo: Mo wa si ipari pe docker dara pupọ ni iṣapeye ilana ti a fun, ṣugbọn kii ṣe ni kikọ iṣẹ ṣiṣe ipilẹ.

Ti o ba tun pinnu lati lo docker, lẹhinna:

  • ṣọra gidigidi
  • maṣe fi agbara mu awọn olupilẹṣẹ lati lo docker
  • Ṣe agbegbe lilo rẹ ni aaye kan, maṣe tan kaakiri gbogbo Dockfile ati awọn ibi ipamọ ti o ṣajọ docker

PS:

  • Mo laipe wá kọja ẹlẹsẹ ati pe wọn sọ pe o ṣiṣẹ daradara pẹlu Ansible ati pe o fun ọ laaye lati ṣọkan ilana ti awọn aworan kikọ (pẹlu aworan docker)
  • tun nipa docker, awon article

O ṣeun fun kika, Mo fẹ ki o ṣe ipinnu sihin ninu awọn ọran rẹ ati awọn ọjọ iṣẹ iṣelọpọ!

orisun: www.habr.com

Fi ọrọìwòye kun