Doc­ker-work­shop met Li­nux

112

C’t Magazine - - Inhoud - Mer­lin Schu­ma­cher

Con­tai­ners ver­an­de­ren de ma­nier waar­op je met soft­wa­re-in­fra­struc­tu­ren werkt. Doc­ker is een bij­zon­der po­pu­lai­re in­vul­ling. Daar­mee kun je ser­vi­ces flexi­bel be­he­ren en nieu­we stra­te­gie­ën voor plan­ning en ge­bruik op­zet­ten. Dat klinkt vrij in­ge­wik­keld, maar al met al is het niet zo moei­lijk om Doc­ker op je ho­me- of web­ser­ver te la­ten draai­en.

Doc­ker-prak­tijk met Li­nux ....................................... 112 Doc­ker voor thuis- en web­ser­vers ........................... 116 User De­fi­ned Net­works .......................................... 122 Ge­kop­pel­de con­tai­ners met Doc­ker Com­po­se ....... 125

Soft­wa­re­con­tai­ners zijn po­pu­lair om­dat ze flexi­bel zijn en je ze bij­na over­al voor kunt ge­brui­ken en re­pro­du­ce­ren. Voor­al in de ont­wik­ke­laars- en cloud­we­reld is Doc­ker daar­om flink po­pu­lair ge­wor­den. Maar niet al­leen daar loont het ge­bruik van de con­tai­ner­tech­niek, ook op klei­ne­re schaal kun je er werk mee be­spa­ren. De mo­du­la­ri­teit van Doc­ker maakt zelfs het over­stap­pen naar een an­de­re ser­ver min­der hei­kel. Een gro­te com­mu­ni­ty van ont­wik­ke­laars heeft veel voor­werk ge­daan waar­op je ver­der kunt bor­du­ren om een op maat ge­maak­te con­tai­ner in el­kaar te zet­ten.

Doc­ker-con­tai­ners, om met­een maar even dui­de­lijk te zijn, zijn geen vir­tu­e­le ma­chi­nes. El­ke draai­en­de con­tai­ner is een ei­gen pro­ces bin­nen het host-be­stu­rings­sys­teem. Er is geen hy­per­vi­sor en geen vir­tu­e­le hard­wa­re waar­op een com­pleet be­stu­rings­sys­teem draait. De con­tai­ners en het host-be­stu­rings­sys­teem ge­brui­ken de­zelf­de draai­en­de Li­nux-ker­nel. Bij vir­tu­e­le ma­chi­nes is er bo­ven­dien re­dun­dan­tie om­dat er tel­kens een com­pleet gast­be­stu­rings­sys­teem draait. De con­tai­ners be­spa­ren ook op schijf­ruim­te om­dat ze va­ker ge­bruik­te af­han­ke­lijk­he­den in de vorm van ima­ges her­ge­brui­ken.

Ima­ges, la­gen en con­tai­ners

De ba­sis van el­ke Doc­ker-con­tai­ner is een Doc­ker-ima­ge. Een der­ge­lij­ke ima­ge be­vat al­leen de ba­sis­pro­gram­ma's, bi­bli­o­the­ken en be­stan­den. Van een ima­ge zijn wil­le­keu­rig veel con­tai­ners te ma­ken. Het is net als bij een mo­del­huis: nie­mand woont er­in, dus daar­om is er al­leen een ele­men­tai­re en on­per­soon­lij­ke in­rich­ting. Pas als het huis op ba­sis van het mo­del­huis is ge­bouwd en door de be­wo­ners (pro­ces­sen) wordt be­woond, is het een thuis.

Een ima­ge die de ba­sis voor meer­de­re an­de­re ima­ges is, hoeft niet voor el­ke an­de­re con­tai­ner apart op­ge­sla­gen te wor­den. Dat is mo­ge­lijk door de be­stands­sys­teem-over­lays, die als la­gen bo­ven el­kaar lig­gen.

Maak je bij­voor­beeld een nieu­we ima­ge op ba­sis van een be­staan­de MySQL-ima­ge, dan wor­den de in de bouw­hand­lei­ding van de MySQL-ima­ge ge­noem­de la­gen ge­down­load van Doc­ker Hub en bo­ven el­kaar ge­mount. De ei­gen ver­an­de­rin­gen aan de MySQL-ima­ge ko­men op weer een an­de­re laag te­recht. De com­bi­na­tie van al die la­gen is dan een ei­gen nieu­we ima­ge.

Als een con­tai­ner op ba­sis van een ima­ge ge­start wordt, maakt Doc­ker nog een be­schrijf­ba­re con­tai­ner­spe­ci­fie­ke da­ta­laag aan. Al­le la­gen die deel van de ima­ge uit­ma­ken, wor­den dan lees­baar ge­kop­peld. Daar­door kun­nen ze bij veel con­tai­ners te­ge­lij­ker­tijd ge­bruikt wor­den. Die la­gen zijn voor de in de con­tai­ner draai­en­de pro­ces­sen vol­ko­men trans­pa­rant – van dat he­le ge­doe met la­gen krij­gen ze niets mee. Als een draai­end pro­ces (bij een MySQL-ser­vi­ce) een be­stand leest, gaat de Li­nux-ker­nel

al­le la­gen langs tot hij het be­stand op een laag ge­von­den heeft. Als het pro­ces ech­ter in een be­stand wil schrij­ven, be­lan­den de weg­ge­schre­ven da­ta op de con­tai­ner­spe­ci­fie­ke da­ta­laag, want die is al­leen voor het pro­ces be­schik­baar. Die laag is een vast deel van de con­tai­ner en ver­dwijnt als die ver­wij­derd wordt. Hoe je zelf een ei­gen ima­ge kunt ma­ken, kun je le­zen op pa­gi­na 116.

Een net­werk voor zich­zelf

De con­tai­ners zijn nor­maal ge­spro­ken ver­bon­den via een ei­gen net­werk. De Doc­ker be­kom­mert zich zelf om het be­heer van dat net­werk. Maar ook daar­bij kun je de in­fra­struc­tuur flexi­bel aan­pas­sen. Vroe­ger was het ge­brui­ke­lijk dat de con­tai­ners bin­nen een nor­maal net­werk ver­bon­den wer­den, maar met de nieu­we User De­fi­ned Net­works kun je nu com­plexe net­werk­struc­tu­ren op­zet­ten (zie pa­gi­na 122). Je kunt bij­voor­beeld meer­de­re con­tai­ners in een de­di­ca­ted net­werk zet­ten om die van de ove­ri­ge con­tai­ners af te schei­den. Daar­bij kan Doc­ker niet al­leen het au­to­ma­tisch ver­ge­ven van ip-adres­sen over­ne­men, maar ook ei­gen dns-dien­sten bie­den waar­mee de con­tai­ners te vin­den zijn.

Een be­lang­rijk pa­ra­dig­ma in de Doc­ker-we­reld: een dienst per con­tai­ner! Zet dus niet een da­ta­ba­se en web­ser­ver in de­zelf­de ima­ge om een we­bap­pli­ca­tie te star­ten. Zet in zo'n ge­val de da­ta­ba­se en de web­ser­ver elk in een ei­gen ima­ge.

Pak­jes

Een blik op de pro­ces­lijst van het host­be­stu­rings­sys­teem laat zien dat de in de con­tai­ner draai­en­de pro­ces­sen daar net zo ge­toond wor­den als de pro­ces­sen die niet in con­tai­ners draai­en. Het ver­schil is ech­ter dat be­paal­de ker­nel-me­cha­nis­men de con­tai­ners van de rest van het sys­teem en van el­kaar iso­le­ren. Met Control Groups (cgroups) be­perkt de ker­nel re­sour­ces als ge­heu­gen en re­ken­tijd. Na­mes­pa­ces per­ken de voor de con­tai­ners be­schik­ba­re re­sour­ces in tot een klein deel van het host­sys­teem. De pro­ces­sen zien dank­zij mount-na­mes­pa­ces bij­voor­beeld al­leen een be­perkt deel van het be­stands­sys­teem – al­leen het deel dat ze no­dig heb­ben. Dat lijkt op het eer­ste ge­zicht op een chroot-om­ge­ving. An­de­re tech­nie­ken als ipc-en pro­ces-na­mes­pa­ces li­mi­te­ren de zicht­baar­heid en be­reik­baar­heid van pro­ces­sen bin­nen de con­tai­ners. Daar­door zien die pro­ces­sen geen an­de­re pro­ces­sen van het host­sys­teem of zelfs van an­de­re con­tai­ners. De com­mu­ni­ca­tie met an­de­re pro­ces­sen wordt even­eens in­ge­pol­derd. Voor de con­tai­ners is al­leen be­schik­baar wat er in de con­tai­ners zit. De na­mes­pa­ces en cgroups ma­ken con­tai­ners mo­ge­lijk. Het is Doc­kers ver­dien­ste dat de om­gang met die tech­nie­ken zo sim­pel mo­ge­lijk ge­beurt.

El­ke ko­pie een ori­gi­neel

Doc­ker is bij ont­wik­ke­laars zo ge­liefd om­dat het zo mak­ke­lijk is om er soft­wa­re­om­ge­vin­gen mee te re­pro­du­ce­ren. Een door Doc­ker ge­maak­te con­tai­ner ziet er op el­ke com­pu­ter het­zelf­de uit en heeft de­zelf­de in­houd. Je kunt bij­voor­beeld een veel­ei­sen­de we­bap­pli­ca­tie met een of meer­de­re Doc­ker-con­tai­ners op el­ke ma­chi­ne snel op­zet­ten. Daar­bij hoef je geen re­ke­ning te hou­den met soft­w­are­af­han­ke­lijk­he­den, bi­bli­o­theek­ver­sies en pak­ket­bron­nen. Doc­ker maakt een kant-en-kla­re om­ge­ving met al­les wat de ap­pli­ca­tie no­dig heeft. Be­staat die ap­pli­ca­tie uit meer­de­re con­tai­ners, bij­voor­beeld een web­ser­ver met da­ta­ba­se en con­tent­ma­na­ge­ment­sys­teem, dan kun je be­ter Doc­ker Com­po­se ge­brui­ken (zie pa­gi­na 125).

Het cen­tra­le be­heer van Doc­keri­ma­ges wordt meest­al door Doc­ker Hub ge­daan. Daar staan tal­lo­ze ima­ges van al even tal­lo­ze ont­wik­ke­laars. Je moet daar­om wel even goed op­let­ten als je de ima­ges daar van­daan haalt. Niet al­le ima­ges wor­den re­gel­ma­tig bij­ge­werkt of über­haupt nog be­heerd. Daar­om biedt Doc­ker zo­ge­he­ten Of­fi­ci­al Re­po­si­to­ry's met ima­ges waar­op een door Doc­ker ge­fi­nan­cierd team een oog­je in het zeil houdt bij het be­heer en on­der­houd. Het team let er vol­gens Doc­ker op dat se­cu­ri­ty-up­da­tes snel in de ima­ges te­recht­ko­men. Ge­bruik in ge­val van twij­fel al­tijd een ima­ge uit een Of­fi­ci­al Re­po­si­to­ry. Bij al­le an­de­re ima­ges moet je ze­ker we­ten dat je de aan­bie­der kunt ver­trou­wen.

(nkr)

Newspapers in Dutch

Newspapers from Netherlands

© PressReader. All rights reserved.