Konprann Docker

Mwen te itilize Docker pou plizyè mwa kounye a estriktire pwosesis devlopman / livrezon nan pwojè entènèt. Mwen ofri lektè Habrakhabr yon tradiksyon atik entwodiksyon sou docker - "Konprann Docker".

Ki sa ki docker?

Docker se yon platfòm ouvè pou devlope, livre ak opere aplikasyon yo. Docker fèt pou delivre aplikasyon ou yo pi vit. Avèk Docker, ou ka dekouple aplikasyon w lan ak enfrastrikti w la epi trete enfrastrikti a kòm yon aplikasyon jere. Docker ede ou anbake kòd ou pi vit, teste pi vit, voye aplikasyon yo pi vit, epi redwi tan ki genyen ant ekri kòd ak kouri kòd. Docker fè sa atravè yon platfòm virtualizasyon veso ki lejè, lè l sèvi avèk pwosesis ak sèvis piblik ki ede w jere ak òganize aplikasyon w yo.

Nan nwayo li yo, docker pèmèt ou kouri prèske nenpòt aplikasyon, san danje izole nan yon veso. Izolasyon an sekirite pèmèt ou kouri anpil resipyan sou menm lame a an menm tan an. Nati ki lejè nan veso a, ki kouri san fado anplis nan yon hypervisor, pèmèt ou jwenn plis soti nan pyès ki nan konpitè ou.

Platfòm ak zouti Virtualization veso a ka itil nan ka sa yo:

  • anbalaj aplikasyon w lan (ak konpozan w itilize yo) nan resipyan docker;
  • distribisyon ak livrezon kontenè sa yo bay ekip ou yo pou devlopman ak tès;
  • mete kontenè sa yo sou sit pwodiksyon ou yo, tou de nan sant done ak nan nwaj yo.

Pou ki sa mwen ka itilize Docker?

Pibliye aplikasyon w yo byen vit

Docker se gwo pou òganize sik devlopman an. Docker pèmèt devlopè yo kouri kontenè lokal ak aplikasyon ak sèvis. Ki imedyatman pèmèt ou entegre ak pwosesis entegrasyon kontinyèl ak workflow deplwaman.

Pou egzanp, devlopè ou yo ekri kòd lokalman epi pataje pil devlopman yo (yon seri imaj Docker) ak kòlèg li yo. Lè yo pare, yo pouse kòd la ak resipyan yo sou sit tès la epi fè nenpòt tès ki nesesè yo. Soti nan sit tès la, yo ka voye kòd ak imaj nan pwodiksyon an.

Pi fasil tap mete deyò ak dewoulman

Platfòm ki baze sou veso Docker la fè li fasil pou transpòte chaj ou a. Kontenè Docker ka kouri sou machin lokal ou a, swa reyèl oswa sou yon machin vityèl nan yon sant done, oswa nan nwaj la.

Transparans ak nati lejè nan docker fè li fasil pou jere dinamik kantite travay ou. Ou ka itilize Docker pou deplwaye oswa fèmen aplikasyon w lan oswa sèvis ou yo. Vitès la nan docker pèmèt sa a dwe fè nan prèske tan reyèl.

Pi wo chaj ak plis chaj

Docker se lejè ak vit. Li bay yon altènatif rezistan, pri-efikas nan machin vityèl ki baze sou ipèvizè. Li itil espesyalman nan anviwònman ki gen gwo chaj, pou egzanp, lè w ap kreye pwòp nwaj ou oswa platfòm-kòm-sèvis. Men, li itil tou pou aplikasyon pou ti ak mwayen gwosè lè ou vle jwenn plis soti nan resous ou genyen yo.

Eleman prensipal Docker

Docker konsiste de de eleman prensipal:

  • Docker: yon platfòm virtualizasyon sous louvri;
  • Docker Hub: Platfòm nou an kòm yon sèvis pou distribye ak jere resipyan Docker.

Remak! Docker distribye anba lisans Apache 2.0.

Docker achitekti

Docker sèvi ak yon achitekti kliyan-sèvè. Kliyan Docker la kominike ak demon Docker la, ki pran chay pou kreye, kouri, ak distribye resipyan ou yo. Tou de kliyan ak sèvè ka kouri sou menm sistèm nan, ou ka konekte kliyan an nan yon demon docker aleka. Kliyan an ak sèvè kominike atravè yon priz oswa yon API RESTful.

Konprann Docker

Docker demon

Jan yo montre nan dyagram nan, demon an kouri sou machin lame a. Itilizatè a pa kominike avèk sèvè a dirèkteman, men sèvi ak kliyan an pou sa.

Docker kliyan

Kliyan Docker la, pwogram Docker la, se koòdone prensipal la nan Docker. Li resevwa kòmandman nan men itilizatè a epi li reyaji avèk demon Docker la.

Anndan docker

Pou konprann ki sa Docker konsiste de, ou bezwen konnen sou twa eleman:

  • imaj
  • rejis
  • resipyan

Imaj yo

Imaj Docker a se yon modèl pou lekti sèlman. Pou egzanp, imaj la ka genyen sistèm operasyon Ubuntu ak Apache ak yon aplikasyon sou li. Imaj yo itilize pou kreye resipyan. Docker fè li fasil pou kreye nouvo imaj, mete ajou sa ki deja egziste, oswa ou ka telechaje imaj lòt moun kreye. Imaj yo se eleman nan yon bati docker.

Rejis

Rejis Docker la estoke imaj. Gen rejis piblik ak prive kote ou ka telechaje oswa telechaje imaj. Yon rejis Docker piblik se Hub Docker. Gen yon gwo koleksyon imaj ki estoke la. Kòm ou konnen, imaj yo ka kreye pa ou oswa ou ka itilize imaj ki kreye pa lòt moun. Rejis yo se yon eleman distribisyon.

Resipyan

Kontenè yo sanble ak anyè. Kontenè yo genyen tout bagay aplikasyon an bezwen pou kouri. Chak veso kreye apati yon imaj. Kontenè yo ka kreye, kòmanse, sispann, imigre oswa efase. Chak veso izole epi li bay yon platfòm an sekirite pou aplikasyon an. Kontenè yo se eleman nan travay la.

Se konsa, ki jan Docker travay?

Jiskaprezan nou konnen sa:

  • nou ka kreye imaj kote aplikasyon nou yo sitiye;
  • nou ka kreye resipyan ki soti nan imaj pou kouri aplikasyon yo;
  • Nou ka distribye imaj atravè Docker Hub oswa yon lòt rejis imaj.

Ann wè ki jan eleman sa yo anfòm ansanm.

Ki jan imaj la travay?

Nou deja konnen ke yon imaj se yon modèl lekti sèlman ki soti nan ki yon veso yo kreye. Chak imaj konsiste de yon seri nivo. Docker itilize sistèm dosye sendika pou konbine nivo sa yo nan yon sèl imaj. Sistèm fichye Inyon pèmèt fichye ak anyè ki soti nan sistèm fichye diferan (diferan branch) sipèpoze transparan, kreye yon sistèm dosye aderan.

Youn nan rezon ki fè Docker se lejè se paske li itilize kouch tankou sa a. Lè ou chanje imaj la, tankou mete ajou yon aplikasyon, yo kreye yon nouvo kouch. Se konsa, san yo pa ranplase tout imaj la oswa rebati li, menm jan ou ta ka gen fè ak yon machin vityèl, se sèlman kouch la ajoute oswa mete ajou. Epi ou pa oblije distribye tout nouvo imaj la, se sèlman aktyalizasyon a distribye, sa ki fè li pi fasil ak pi vit distribye imaj.

Nan kè a nan chak imaj se yon imaj debaz. Pou egzanp, ubuntu, imaj de baz Ubuntu, oswa fedora, imaj de baz distribisyon Fedora. Ou kapab tou itilize imaj kòm yon baz pou kreye nouvo imaj. Pou egzanp, si ou gen yon imaj apache, ou ka itilize li kòm yon imaj de baz pou aplikasyon entènèt ou yo.

Remak! Docker anjeneral rale imaj ki soti nan rejis Docker Hub la.

Imaj Docker yo ka kreye apati imaj baz sa yo; nou rele etap yo pou kreye imaj sa yo enstriksyon. Chak enstriksyon kreye yon nouvo imaj oswa nivo. Enstriksyon yo pral sa ki annapre yo:

  • kouri lòd
  • ajoute yon fichye oswa anyè
  • kreye yon anviwònman varyab
  • enstriksyon sou sa yo dwe kouri lè veso a nan imaj sa a te lanse

Enstriksyon sa yo estoke nan yon dosye Dockerfile. Docker li sa Dockerfile, lè ou bati imaj la, egzekite enstriksyon sa yo epi retounen imaj final la.

Ki jan rejis docker a travay?

Rejis la se yon depo pou imaj docker. Yon fwa yo kreye imaj la, ou ka pibliye li nan rejis piblik Docker Hub oswa nan rejis pèsonèl ou.

Avèk kliyan Docker la, ou ka chèche imaj ki deja pibliye epi telechaje yo sou machin Docker ou a pou kreye resipyan.

Docker Hub bay depo imaj piblik ak prive. Chèche ak telechaje imaj ki soti nan depo piblik yo disponib pou tout moun. Sa ki nan depo prive yo pa enkli nan rezilta rechèch yo. Epi sèlman ou menm ak itilizatè ou yo ka resevwa imaj sa yo epi kreye resipyan nan men yo.

Ki jan yon veso travay?

Yon veso konsiste de yon sistèm opere, fichye itilizatè, ak metadata. Kòm nou konnen, chak veso kreye apati yon imaj. Imaj sa a di Docker sa ki nan veso a, ki pwosesis pou kòmanse, lè veso a kòmanse, ak lòt done konfigirasyon. Imaj la Docker se lekti sèlman. Lè Docker kòmanse yon veso, li kreye yon kouch lekti/ekri sou tèt imaj la (itilize sistèm fichye sendika a jan sa di anvan an) kote aplikasyon an ka kouri.

Kisa k ap pase lè veso a kòmanse?

Oswa itilize pwogram nan docker, oswa lè l sèvi avèk API RESTful la, kliyan docker la di demon docker la kòmanse veso a.

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

Ann pran yon gade nan lòd sa a. Kliyan an lanse lè l sèvi avèk lòd la docker, ak opsyon run, ki di ke yo pral lanse yon nouvo veso. Kondisyon minimòm pou kouri yon veso se atribi sa yo:

  • ki imaj pou itilize pou kreye veso a. Nan ka nou an ubuntu
  • kòmandman ou vle kouri lè veso a kòmanse. Nan ka nou an /bin/bash

Kisa k ap pase anba kapo a lè nou kouri lòd sa a?

Docker, nan lòd, fè bagay sa yo:

  • telechaje imaj ubuntu a: docker tcheke disponiblite imaj ubuntu sou machin lokal la, epi si li pa la, Lè sa a, telechaje li nan Hub Docker. Si gen yon imaj, li sèvi ak li pou kreye yon veso;
  • kreye yon veso: lè yo resevwa imaj la, docker sèvi ak li pou kreye yon veso;
  • inisyalize sistèm fichye a ak monte nivo lekti sèlman: se veso a kreye nan sistèm nan dosye epi yo ajoute imaj la nan nivo lekti sèlman;
  • inisyalize rezo/pon an: kreye yon koòdone rezo ki pèmèt docker kominike ak machin lame a;
  • Mete adrès IP la: jwenn epi mete adrès la;
  • Kòmanse pwosesis la espesifye: lanse aplikasyon w lan;
  • Pwosesis ak pwodui pwodiksyon nan aplikasyon w lan: konekte ak anrejistre opinyon estanda aplikasyon w lan, pwodiksyon, ak kouran erè pou w ka swiv kouman aplikasyon w lan ap fonksyone.

Kounye a ou gen yon veso k ap travay. Ou ka jere veso ou a, kominike avèk aplikasyon w lan. Lè ou deside sispann aplikasyon an, efase veso a.

Itilize teknoloji

Docker ekri nan Go e li itilize kèk karakteristik nwayo Linux pou aplike fonksyonalite ki anwo yo.

Espas non yo

Docker sèvi ak teknoloji namespaces pou òganize espas travay izole, ke nou rele kontenè. Lè nou kòmanse yon veso, Docker kreye yon seri espas non pou veso sa a.

Sa a kreye yon kouch izole, ak chak aspè nan veso a kouri nan espas non pwòp li yo epi yo pa gen aksè a sistèm ekstèn lan.

Lis kèk espas non ke docker itilize:

  • pid: izole pwosesis la;
  • nèt: pou jere koòdone rezo;
  • ipc: pou jere resous IPC yo. (ICP: Kominikasyon InterProccess);
  • mnt: jere pwen mòn;
  • utc: pou izole jenerasyon vèsyon kernel la ak kontwòl (UTC: Unix timesharing system).

Gwoup kontwòl yo

Docker tou itilize teknoloji cgroups oswa gwoup kontwòl. Kle a pou kouri yon aplikasyon an izolasyon se bay aplikasyon an sèlman resous ou vle bay yo. Sa a asire ke resipyan yo pral bon vwazen. Gwoup kontwòl pèmèt ou pataje resous pyès ki nan konpitè ki disponib epi, si sa nesesè, mete limit ak restriksyon. Pou egzanp, limite kantite posib memwa pou veso a.

Sistèm Fichye Inyon an

Union File System oswa UnionFS se yon sistèm dosye ki travay pa kreye kouch, fè li trè lejè ak rapid. Docker itilize UnionFS pou kreye blòk kote veso a bati. Docker ka itilize plizyè variantes de UnionFS tankou: AUFS, btrfs, vfs ak DeviceMapper.

Fòm veso

Docker konbine eleman sa yo nan yon anbalaj nou rele fòma veso a. Yo rele fòma default la libcontainer. Docker sipòte tou fòma veso tradisyonèl sou Linux lè l sèvi avèk LXC. Nan tan kap vini an, Docker ka sipòte lòt fòma veso. Pou egzanp, entegre ak BSD Jails oswa Solaris Zones.

Sous: www.habr.com

Add nouvo kòmantè