{"id":91905,"date":"2020-08-20T07:42:23","date_gmt":"2020-08-20T05:42:23","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/chto-takoe-docker-kratkij-ekskurs-v-istoriyu-i-osnovnye-abstrakczii"},"modified":"2020-08-20T07:42:23","modified_gmt":"2020-08-20T05:42:23","slug":"chto-takoe-docker-kratkij-ekskurs-v-istoriyu-i-osnovnye-abstrakczii","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/chto-takoe-docker-kratkij-ekskurs-v-istoriyu-i-osnovnye-abstrakczii","title":{"rendered":"Vad \u00e4r Docker: en kort \u00f6versikt \u00f6ver historien och grundl\u00e4ggande abstraktioner","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>10 augusti lanserades i Sl\u00f6rm <noindex><a rel=\"nofollow\" href=\"http:\/\/to.slurm.io\/2patKQ\">en videokurs om Docker<\/a><\/noindex>, d\u00e4r vi g\u00e5r igenom det i detalj \u2013 fr\u00e5n grundl\u00e4ggande abstraktioner till n\u00e4tverksinst\u00e4llningar. <\/p>\n<p><\/p>\n<p>I den h\u00e4r artikeln kommer vi att diskutera historien bakom Docker och dess grundl\u00e4ggande abstraktioner: Image, Cli, Dockerfile. F\u00f6rel\u00e4sningen riktar sig till nyb\u00f6rjare, s\u00e5 den kommer knappast att intressera erfarna anv\u00e4ndare. Det kommer inte att f\u00f6rekomma blod, blindtarmsoperationer och djupdykningar. Bara grunderna.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Vad \u00e4r Docker: en kort \u00f6versikt \u00f6ver historien och grundl\u00e4ggande abstraktioner\" src=\"\/wp-content\/uploads\/2020\/08\/f01af417f24c838577b09bdf90f02fb9.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2 id=\"chto-takoe-docker\">Vad \u00e4r Docker<\/h2>\n<p><\/p>\n<p>L\u00e5t oss titta p\u00e5 definitionen av Docker fr\u00e5n Wikipedia.<\/p>\n<p><\/p>\n<blockquote><p>Docker \u00e4r en mjukvara f\u00f6r automatisering av distribution och hantering av applikationer i milj\u00f6er med st\u00f6d f\u00f6r containrar.<\/p><\/blockquote>\n<p>Av denna definition framg\u00e5r ingenting klart. Speciellt oklart \u00e4r vad som menas med \"i milj\u00f6er med st\u00f6d f\u00f6r containrar\". F\u00f6r att f\u00f6rst\u00e5 detta, l\u00e5t oss g\u00e5 tillbaka i tiden. L\u00e5t oss b\u00f6rja fr\u00e5n en tid som jag kollektivt kallar \"Den monolitiska eran\".<\/p>\n<p><\/p>\n<h2 id=\"monolitnaya-era\">Den monolitiska eran<\/h2>\n<p><\/p>\n<p>Den monolitiska eran \u00e4r b\u00f6rjan av 2000-talet, n\u00e4r alla applikationer var monolitiska med massor av beroenden. Utvecklingen tog l\u00e5ng tid. Samtidigt fanns det inte s\u00e5 m\u00e5nga servrar, vi k\u00e4nde dem alla vid namn och \u00f6vervakade dem. Det finns en rolig j\u00e4mf\u00f6relse:<\/p>\n<p>\n<center><div class=\"youtube-placeholder\" data-id=\"Od7e6hqis7A\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/Od7e6hqis7A\/hqdefault.jpg\" alt=\"Spela video\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><\/p>\n<p>Pets \u2013 det \u00e4r husdjur. Under den monolitiska eran behandlade vi v\u00e5ra servrar som husdjur, vi tog hand om dem, och violen g\u00e4rna fj\u00e4drade bort damm. F\u00f6r att b\u00e4ttre hantera resurser anv\u00e4nde vi virtualisering: vi tog en server och delade den p\u00e5 flera virtuella maskiner, vilket d\u00e4rmed s\u00e4krade milj\u00f6isolering.<\/p>\n<p><\/p>\n<h2 id=\"sistemy-virtualizacii-na-baze-gipervizora\">Virtualiseringssystem baserade p\u00e5 hypervisorer<\/h2>\n<p><\/p>\n<p>Om virtualiseringssystem har s\u00e4kert de flesta h\u00f6rt talas om: VMware, VirtualBox, Hyper-V, Qemu KVM etc. De tillhandah\u00e5ller applikationsisolering och resurshantering, men de har ocks\u00e5 nackdelar. F\u00f6r att g\u00f6ra virtualisering beh\u00f6vs en hypervisor. Och hypervisorn inneb\u00e4r resurskostnader. Dessutom \u00e4r sj\u00e4lva den virtuella maskinen vanligtvis en stor apparat \u2013 en tung bild, med operativsystem, Nginx, Apache och eventuellt MySQL. Bilden \u00e4r stor och det \u00e4r besv\u00e4rligt att arbeta med en virtuell maskin. Som en f\u00f6ljd blir arbetet med virtuella maskiner l\u00e5ngsamt. F\u00f6r att l\u00f6sa detta problem skapades virtualiseringssystem p\u00e5 k\u00e4rnniv\u00e5.<\/p>\n<p><\/p>\n<h2 id=\"sistemy-virtualizacii-na-urovne-yadra\">Virtualiseringssystem p\u00e5 k\u00e4rnniv\u00e5<\/h2>\n<p><\/p>\n<p>Virtualisering p\u00e5 k\u00e4rnniv\u00e5 st\u00f6ds av system som OpenVZ, Systemd-nspawn, LXC. Ett tydligt exempel p\u00e5 s\u00e5dan virtualisering \u00e4r LXC (Linux Containers). <\/p>\n<p><\/p>\n<p>LXC \u2014 en virtualiseringssystem p\u00e5 operativsystemets niv\u00e5 f\u00f6r att k\u00f6ra flera isolerade instanser av operativsystemet Linux p\u00e5 en och samma nod. LXC anv\u00e4nder inte virtuella maskiner, utan skapar en virtuell milj\u00f6 med eget processutrymme och n\u00e4tverksstack.<\/p>\n<p><\/p>\n<p>I grund och botten skapar LXC containrar. Vad \u00e4r skillnaden mellan virtuella maskiner och containrar?<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Vad \u00e4r Docker: en kort \u00f6versikt \u00f6ver historien och grundl\u00e4ggande abstraktioner\" src=\"\/wp-content\/uploads\/2020\/08\/55afdcfd700d4869c9de488033a8e314.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Containern passar inte f\u00f6r att isolera processer: i virtualiseringssystem p\u00e5 k\u00e4rnniv\u00e5 finns s\u00e5rbarheter som g\u00f6r att man kan ta sig ut ur containern till v\u00e4rden. S\u00e5 om du beh\u00f6ver isolera n\u00e5got, \u00e4r det b\u00e4ttre att anv\u00e4nda en virtuell maskin.<\/p>\n<p><\/p>\n<p>Skillnaderna mellan virtualisering och containerisering kan ses i diagrammet.<br \/>\nDet finns h\u00e5rdvaruhypervisorer, hypervisorer ovanp\u00e5 operativsystem och containrar. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Vad \u00e4r Docker: en kort \u00f6versikt \u00f6ver historien och grundl\u00e4ggande abstraktioner\" src=\"\/wp-content\/uploads\/2020\/08\/a0c06e9adc1fab3b4b5e9e1b05b51d66.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\"H\u00e5rdhypervisorer\" \u00e4r en fantastisk sak om du verkligen vill isolera n\u00e5got. F\u00f6r d\u00e4r finns m\u00f6jligheten att isolera p\u00e5 minnesordsniv\u00e5 och processorer.<\/p>\n<p><\/p>\n<p>Det finns hypervisorer som programvara och det finns containrar, och det \u00e4r dem vi kommer att prata mer om. I containeriseringssystemet finns det ingen hypervisor, men det finns en Container Engine som skapar och hanterar containrar. Det \u00e4r en l\u00e4ttviktsl\u00f6sning, s\u00e5 genom att arbeta med k\u00e4rnan \u00e4r overheaden mindre, eller inte alls.<\/p>\n<p><\/p>\n<blockquote>\n<h2 id=\"chto-ispolzuetsya-dlya-konteynerizacii-na-urovne-yadra\">Vad som anv\u00e4nds f\u00f6r containerisering p\u00e5 k\u00e4rnniv\u00e5<\/h2>\n<p>De viktigaste teknologierna som g\u00f6r det m\u00f6jligt att skapa en isolerad container fr\u00e5n andra processer \u00e4r Namespaces och Control Groups.<\/p>\n<p>Namespaces: PID, N\u00e4tverk, Montering och Anv\u00e4ndare. Det finns fler, men f\u00f6r enkelhetens skull fokuserar vi p\u00e5 dessa.<\/p>\n<p>PID Namespace begr\u00e4nsar processerna. N\u00e4r vi till exempel skapar en PID Namespace och placerar en process d\u00e4r, f\u00e5r den PID 1. Vanligtvis \u00e4r PID 1 i systemen antingen systemd eller init. D\u00e4rf\u00f6r, n\u00e4r vi placerar en process i en ny namespace, f\u00e5r den ocks\u00e5 PID 1.<\/p>\n<p>Networking Namespace m\u00f6jligg\u00f6r att begr\u00e4nsa\/isolera n\u00e4tverket och placera sina egna gr\u00e4nssnitt d\u00e4r inne. Montering \u00e4r begr\u00e4nsning p\u00e5 filsystemet. Anv\u00e4ndare \u2014 begr\u00e4nsning p\u00e5 anv\u00e4ndarna.<\/p>\n<p>Control Groups: Minne, CPU, IOPS, N\u00e4tverk \u2014 det finns totalt omkring 12 inst\u00e4llningar. De kallas ocks\u00e5 Cgroups (\"C-grupper\").<\/p>\n<p>Control Groups hanterar resurser f\u00f6r containern. Genom Control Groups kan vi ange att containern inte f\u00e5r anv\u00e4nda mer \u00e4n en viss m\u00e4ngd resurser.<\/p>\n<p>F\u00f6r att containerisering ska fungera fullt ut anv\u00e4nds ytterligare teknologier: Capabilities, Copy-on-write och andra.<\/p>\n<p>Capabilities \u00e4r n\u00e4r vi s\u00e4ger till processen vad den kan g\u00f6ra och vad den inte kan. P\u00e5 k\u00e4rnniv\u00e5 \u00e4r det helt enkelt bitmasker med m\u00e5nga parametrar. Till exempel har anv\u00e4ndaren root full beh\u00f6righet och kan g\u00f6ra allt. Tidsservern kan \u00e4ndra systemtiden: den har capabilities f\u00f6r Time Capsule, och s\u00e5 \u00e4r det. Genom privilegier kan vi flexibelt st\u00e4lla in begr\u00e4nsningar f\u00f6r processerna och p\u00e5 s\u00e5 s\u00e4tt skydda oss sj\u00e4lva.<\/p>\n<p>Systemet Copy-on-write g\u00f6r att vi kan arbeta med Docker-avbilder och anv\u00e4nda dem mer effektivt.<\/p>\n<p><em>F\u00f6r n\u00e4rvarande har Docker problem med kompatibilitet med Cgroups v2, s\u00e5 artikeln fokuserar p\u00e5 just Cgroups v1.<\/em><\/p><\/blockquote>\n<p>Men l\u00e5t oss \u00e5terg\u00e5 till historien. <\/p>\n<p><\/p>\n<p>N\u00e4r virtualiseringssystem p\u00e5 k\u00e4rnniv\u00e5 kom ut, b\u00f6rjade de till\u00e4mpas aktivt. \u00d6verhuvudtaget f\u00f6rsvann overheaden p\u00e5 hypervisorn, men vissa problem kvarstod:<\/p>\n<p><\/p>\n<ul>\n<li>stora avbilder: i samma OpenVZ trycker man in operativsystemet, bibliotek, en massa olika mjukvaror, och i slut\u00e4ndan blir avbilden \u00e4nd\u00e5 ganska stor;<\/li>\n<li>det finns ingen ordentlig standard f\u00f6r paketering och distribution, s\u00e5 problemet med beroenden kvarst\u00e5r. Det kan uppst\u00e5 situationer d\u00e4r tv\u00e5 kodstycken anv\u00e4nder ett bibliotek, men med olika versioner. Det kan uppst\u00e5 konflikter mellan dem.<\/li>\n<\/ul>\n<p><\/p>\n<p>F\u00f6r att l\u00f6sa alla dessa problem kom n\u00e4sta era.<\/p>\n<p><\/p>\n<h2 id=\"era-konteynerov\">Era av containrar<\/h2>\n<p><\/p>\n<p>N\u00e4r Era av containrar intr\u00e4ffade, f\u00f6r\u00e4ndrades filosofin f\u00f6r hur man arbetar med dem:<\/p>\n<p><\/p>\n<ul>\n<li>En process \u2014 en container.<\/li>\n<li>Alla n\u00f6dv\u00e4ndiga beroenden f\u00f6r processen levereras i dess container. Detta kr\u00e4ver att man delar upp monoliter i mikrotj\u00e4nster.<\/li>\n<li>Ju mindre avbild, desto b\u00e4ttre \u2014 f\u00e4rre potentiella s\u00e5rbarheter, snabbare distribution och s\u00e5 vidare.<\/li>\n<li>Instanser blir efem\u00e4ra. <\/li>\n<\/ul>\n<p><\/p>\n<p>Kommer ni ih\u00e5g att jag pratade om pets vs cattle? F\u00f6rr var instanser som husdjur, nu har de blivit som cattle \u2014 boskap. Tidigare fanns det en monolit \u2014 en applikation. Nu finns det 100 mikrotj\u00e4nster, 100 containrar. N\u00e5gra containrar kan ha 2-3 repliker. Det blir inte s\u00e5 viktigt att kontrollera varje container. Det viktigare \u00e4r tillg\u00e4ngligheten av sj\u00e4lva tj\u00e4nsten: vad denna upps\u00e4ttning containrar g\u00f6r. Detta f\u00f6r\u00e4ndrar tillv\u00e4gag\u00e5ngss\u00e4tten f\u00f6r \u00f6vervakning.<\/p>\n<p><\/p>\n<p>\u00c5ren 2014-2015 intr\u00e4ffade blomstringen av Docker \u2014 den teknologi vi kommer att prata om nu.<\/p>\n<p><\/p>\n<p>Docker har f\u00f6r\u00e4ndrat filosofin och standardiserat paketeringen av applikationer. Med Docker kan vi paketera en applikation, skicka den till ett repot, ladda ner den d\u00e4rifr\u00e5n och distribuera den. <\/p>\n<p><\/p>\n<p>I Docker-containern l\u00e4gger vi allt som beh\u00f6vs, vilket l\u00f6ser problemet med beroenden. Docker garanterar reproducerbarhet. Jag tror att m\u00e5nga har st\u00f6tt p\u00e5 problem med reproducerbarhet: allt fungerar f\u00f6r dig, men n\u00e4r du pushar till produktion slutar det fungera. Med Docker f\u00f6rsvinner det problemet. Om din Docker-container startar och g\u00f6r vad den ska, \u00e4r chansen stor att den kommer att starta i produktion och g\u00f6ra samma sak d\u00e4r.<\/p>\n<p><\/p>\n<blockquote>\n<h2 id=\"otstuplenie-pro-overhed\">En avvikelse om overhead<\/h2>\n<p>Det p\u00e5g\u00e5r st\u00e4ndiga diskussioner om overhead. Vissa h\u00e4vdar att Docker inte medf\u00f6r n\u00e5gon extra belastning, eftersom det anv\u00e4nder Linux-k\u00e4rnan och alla dess processer som beh\u00f6vs f\u00f6r containerisering. De s\u00e4ger att \"om du p\u00e5st\u00e5r att Docker \u00e4r overhead, d\u00e5 \u00e4r \u00e4ven Linux-k\u00e4rnan overhead\".<\/p>\n<p>\u00c5 andra sidan, om vi dyker djupare, s\u00e5 finns det faktiskt flera saker i Docker som, med viss inskr\u00e4nkning, kan s\u00e4gas vara overhead.<\/p>\n<p>F\u00f6r det f\u00f6rsta \u2013 PID-namnomr\u00e5det. N\u00e4r vi placerar en process i ett namnrum tilldelas den PID 1. Samtidigt har denna process en annan PID som finns i v\u00e4rdnamnomr\u00e5det, utanf\u00f6r containern. Till exempel, vi startade Nginx i containern, och det blev PID 1 (masterprocessen). Men p\u00e5 v\u00e4rden har den PID 12623. Och det \u00e4r sv\u00e5rt att s\u00e4ga hur mycket overhead det h\u00e4r medf\u00f6r.<\/p>\n<p>Den andra saken \u2013 Cgroups. L\u00e5t oss ta Cgroups f\u00f6r minne, det vill s\u00e4ga m\u00f6jligheten att begr\u00e4nsa minnet f\u00f6r en container. N\u00e4r det aktiveras aktiveras r\u00e4kneverken, minnes redovisning: k\u00e4rnan m\u00e5ste f\u00f6rst\u00e5 hur m\u00e5nga sidor som har tilldelats och hur m\u00e5nga som fortfarande \u00e4r tillg\u00e4ngliga f\u00f6r denna container. Det kan vara overhead, men jag har inte sett n\u00e5gra exakta studier av hur det p\u00e5verkar prestandan. Och jag har inte m\u00e4rkt att en applikation som k\u00f6rs i Docker pl\u00f6tsligt tappar i prestanda. <\/p>\n<p>Och en annan kommentar om prestanda. Vissa k\u00e4rnparametrar f\u00f6rs \u00f6ver fr\u00e5n v\u00e4rden till containern. I synnerhet vissa n\u00e4tverksparametrar. S\u00e5 om du vill k\u00f6ra n\u00e5got h\u00f6gpresterande i Docker, till exempel n\u00e5got som aktivt kommer att anv\u00e4nda n\u00e4tverket, s\u00e5 beh\u00f6ver du \u00e5tminstone justera dessa parametrar. N\u00e5gon slags nf_conntrack, till exempel. <\/p><\/blockquote>\n<p><\/p>\n<h2 id=\"o-koncepcii-docker\">Om konceptet Docker<\/h2>\n<p><\/p>\n<p>Docker best\u00e5r av flera komponenter: <\/p>\n<p><\/p>\n<ol>\n<li>Docker Daemon \u2013 det \u00e4r just Container Engine; det startar containrar. <\/li>\n<li>Docker CII \u2013 ett verktyg f\u00f6r att hantera Docker.<\/li>\n<li>Dockerfile \u2013 en instruktion f\u00f6r hur man bygger en image.<\/li>\n<li>Image \u2013 en bild som containern rullas ut ifr\u00e5n.<\/li>\n<li>Container.<\/li>\n<li>Docker registry \u2013 en lagringsplats f\u00f6r images.<\/li>\n<\/ol>\n<p><\/p>\n<p>Schemat ser ungef\u00e4r ut s\u00e5 h\u00e4r:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Vad \u00e4r Docker: en kort \u00f6versikt \u00f6ver historien och grundl\u00e4ggande abstraktioner\" src=\"\/wp-content\/uploads\/2020\/08\/73ccc02c14485f72cfd7c64e3074f3b9.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>P\u00e5 Docker_host k\u00f6r Docker daemon, som startar containrar. Det finns en klient som skickar kommandon: bygg en image, ladda ner en image, k\u00f6r en container. Docker daemon g\u00e5r till registry och utf\u00f6r dem. Docker-klienten kan n\u00e5 ut lokalt (till unix-socketen) eller via TCP fr\u00e5n en fj\u00e4rrv\u00e4rd.<\/p>\n<p><\/p>\n<p>L\u00e5t oss g\u00e5 igenom varje komponent.<\/p>\n<p><\/p>\n<p><u>Docker daemon (demon)<\/u> \u2013 \u00e4r den serverbaserade delen, den k\u00f6rs p\u00e5 v\u00e4rdmaskinen: laddar ner images och startar containrar fr\u00e5n dem, skapar n\u00e4tverk mellan containrar, samlar loggar. N\u00e4r vi s\u00e4ger 'skapa en image', s\u00e5 utf\u00f6r \u00e4ven demon det.<\/p>\n<p><\/p>\n<p><u>Docker CLI<\/u> \u2013 den kundbaserade delen av Docker, ett kommandoradsverktyg f\u00f6r att arbeta med demon. Jag upprepar, den kan fungera inte bara lokalt utan \u00e4ven \u00f6ver n\u00e4tverket. <\/p>\n<p><\/p>\n<p><strong>Grundl\u00e4ggande kommandon:<\/strong><\/p>\n<p><\/p>\n<p>docker ps \u2013 visa de containrar som f\u00f6r n\u00e4rvarande \u00e4r k\u00f6rda p\u00e5 Docker-v\u00e4rden.<br \/>\ndocker images \u2013 visa images som har laddats ner lokalt.<br \/>\ndocker search  \u2013 s\u00f6k efter en image i registry.<br \/>\ndocker pull  \u2013 ladda ner en image fr\u00e5n registry till maskinen.<br \/>\ndocker build &lt;&gt; \u2013 bygg en image.<br \/>\ndocker run  \u2013 k\u00f6r containern.<br \/>\ndocker rm  \u2013 ta bort containern.<br \/>\ndocker logs  \u2013 loggar f\u00f6r containern<br \/>\ndocker start\/stop\/restart  \u2013 hantera containern\n<\/p>\n<p>Om du beh\u00e4rskar dessa kommandon och anv\u00e4nder dem bekv\u00e4mt, kan du anse att du har bem\u00e4strat Docker p\u00e5 anv\u00e4ndarniv\u00e5 till 70%.<\/p>\n<p><\/p>\n<p><u>Dockerfile<\/u> \u2013 instruktion f\u00f6r att skapa en image. N\u00e4stan varje kommando i instruktionen \u00e4r ett nytt lager. L\u00e5t oss titta p\u00e5 ett exempel.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Vad \u00e4r Docker: en kort \u00f6versikt \u00f6ver historien och grundl\u00e4ggande abstraktioner\" src=\"\/wp-content\/uploads\/2020\/08\/4d61b58d0d0d8b2e4ddbbfe573f34f7e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ungef\u00e4r s\u00e5 h\u00e4r ser en Dockerfile ut: kommandon till v\u00e4nster, argument till h\u00f6ger. Varje kommando som finns h\u00e4r (och skrivs i Dockerfile) skapar ett nytt lager i Image. <\/p>\n<p><\/p>\n<p>\u0414\u0430\u0436\u0435 \u0433\u043b\u044f\u0434\u044f \u043d\u0430 \u043b\u0435\u0432\u0443\u044e \u0447\u0430\u0441\u0442\u044c, \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442. \u041c\u044b \u0433\u043e\u0432\u043e\u0440\u0438\u043c: \u00ab\u0441\u043e\u0437\u0434\u0430\u0439 \u043d\u0430\u043c \u043f\u0430\u043f\u043a\u0443\u00bb \u2014 \u044d\u0442\u043e \u043e\u0434\u0438\u043d \u0441\u043b\u043e\u0439. \u00ab\u0421\u0434\u0435\u043b\u0430\u0439 \u043f\u0430\u043f\u043a\u0443 \u0440\u0430\u0431\u043e\u0447\u0435\u0439\u00bb \u2014 \u044d\u0442\u043e \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u0441\u043b\u043e\u0439, \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435. \u0421\u043b\u043e\u0451\u043d\u044b\u0439 \u043f\u0438\u0440\u043e\u0433 \u0443\u043f\u0440\u043e\u0449\u0430\u0435\u0442 \u0436\u0438\u0437\u043d\u044c. \u0415\u0441\u043b\u0438 \u044f \u0441\u043e\u0437\u0434\u0430\u043c \u0435\u0449\u0451 \u043e\u0434\u0438\u043d Dockerfile \u0438 \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0441\u0442\u0440\u043e\u0447\u043a\u0435 \u0447\u0442\u043e-\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u044e \u2014 \u0437\u0430\u043f\u0443\u0449\u0443 \u043d\u0435 &quot;python&quot; &quot;main.py&quot;, \u0430 \u0447\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u0434\u0440\u0443\u0433\u043e\u0435, \u0438\u043b\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u044e \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0438\u0437 \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u2014 \u0442\u043e \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0435 \u0441\u043b\u043e\u0438 \u0431\u0443\u0434\u0443\u0442 \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u044b, \u043a\u0430\u043a \u043a\u0435\u0448.<\/p>\n<p><\/p>\n<p><u>Image<\/u> \u2014 det h\u00e4r \u00e4r en containeravbildning, fr\u00e5n vilken containrar startas. Om vi ser p\u00e5 Docker ur ett pakethanterarperspektiv (som om vi arbetar med deb- eller rpm-paket), s\u00e5 \u00e4r en bild i grund och botten ett rpm-paket. Genom yum install kan vi installera en applikation, ta bort den, hitta den i arkivet och ladda ner den. H\u00e4r \u00e4r det ungef\u00e4r detsamma: containrar startas fr\u00e5n bilden, de lagras i Docker-register (p\u00e5 samma s\u00e4tt som yum, i ett arkiv), och varje bild har en SHA-256-hash, namn och tagg.<\/p>\n<p><\/p>\n<p>Bild byggs enligt instruktionerna i Dockerfile. Varje instruktion i Dockerfile skapar ett nytt lager. Lager kan \u00e5teranv\u00e4ndas.<\/p>\n<p><\/p>\n<p><u>Docker-register<\/u> \u2014 \u00e4r ett register f\u00f6r Docker-bilder. Precis som operativsystem har Docker ett offentligt standardregister \u2014 dockerhub. Men det g\u00e5r att bygga ett eget register, en egen Docker-register. <\/p>\n<p><\/p>\n<p><u>Container<\/u> \u2014 \u00e4r det som k\u00f6rs fr\u00e5n en bild. Vi har byggt bilden enligt instruktionerna i Dockerfile, och sedan k\u00f6r vi den fr\u00e5n denna bild. Denna container \u00e4r isolerad fr\u00e5n andra containrar och ska inneh\u00e5lla allt som beh\u00f6vs f\u00f6r att k\u00f6ra applikationen. Samtidigt \u00e4r en container \u2014 en process. Det kan h\u00e4nda att vi m\u00e5ste ha tv\u00e5 processer, men det strider mot Docker-ideologin.<\/p>\n<p><\/p>\n<p>Kravet \"en container \u2014 en process\" \u00e4r relaterat till PID Namespace. N\u00e4r en process med PID 1 startas i ett Namespace, om den pl\u00f6tsligt d\u00f6r, d\u00f6r hela containern ocks\u00e5. Om det d\u00e4remot finns tv\u00e5 processer som k\u00f6rs: en \u00e4r levande och den andra har d\u00f6tt, s\u00e5 forts\u00e4tter containern att leva. Men det h\u00e4r handlar om Best Practices, och vi kommer att diskutera dem i andra material.<\/p>\n<p><\/p>\n<p>F\u00f6r mer detaljerad information om kursens egenskaper och hela program kan du f\u00f6lja l\u00e4nken: \"<noindex><a rel=\"nofollow\" href=\"http:\/\/to.slurm.io\/2patKQ\">Videokurs om Docker<\/a><\/noindex>\u00bb. <\/p>\n<p><\/p>\n<p><em>F\u00f6rfattare: Marsel Ibraev, certifierad Kubernetes-administrat\u00f6r, verksam ingenj\u00f6r p\u00e5 Southbridge, talare och kursutvecklare f\u00f6r Sl\u00fcrm.<\/em><\/p>\n<p>K\u00e4lla: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/southbridge\/blog\/515508\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>10 \u0430\u0432\u0433\u0443\u0441\u0442\u0430 \u0432 \u0421\u043b\u0451\u0440\u043c \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u0430\u043b \u0432\u0438\u0434\u0435\u043e\u043a\u0443\u0440\u0441 \u043f\u043e Docker, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u044b \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c \u0435\u0433\u043e \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u2014 \u043e\u0442 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0439 \u0434\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0441\u0435\u0442\u0438. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e\u0431 \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u044f Docker \u0438 \u0435\u0433\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u044f\u0445: Image, Cli, Dockerfile. \u041b\u0435\u043a\u0446\u0438\u044f \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u0430 \u043d\u0430 \u043d\u043e\u0432\u0438\u0447\u043a\u043e\u0432, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0440\u044f\u0434 \u043b\u0438 \u0431\u0443\u0434\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430 \u043e\u043f\u044b\u0442\u043d\u044b\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c. \u0417\u0434\u0435\u0441\u044c \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043a\u0440\u043e\u0432\u0438, \u0430\u043f\u043f\u0435\u043d\u0434\u0438\u043a\u0441\u0430 \u0438 \u0433\u043b\u0443\u0431\u043e\u043a\u043e\u0433\u043e \u043f\u043e\u0433\u0440\u0443\u0436\u0435\u043d\u0438\u044f. [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":91906,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-91905","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.4 - aioseo.com -->\n\t<meta name=\"description\" content=\"10 \u0430\u0432\u0433\u0443\u0441\u0442\u0430 \u0432 \u0421\u043b\u0451\u0440\u043c \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u0430\u043b \u0432\u0438\u0434\u0435\u043e\u043a\u0443\u0440\u0441 \u043f\u043e Docker, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u044b \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c \u0435\u0433\u043e \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u2014 \u043e\u0442 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0439 \u0434\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0441\u0435\u0442\u0438.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/chto-takoe-docker-kratkij-ekskurs-v-istoriyu-i-osnovnye-abstrakczii\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sv_SE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 Docker: \u043a\u0440\u0430\u0442\u043a\u0438\u0439 \u044d\u043a\u0441\u043a\u0443\u0440\u0441 \u0432 \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"10 \u0430\u0432\u0433\u0443\u0441\u0442\u0430 \u0432 \u0421\u043b\u0451\u0440\u043c \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u0430\u043b \u0432\u0438\u0434\u0435\u043e\u043a\u0443\u0440\u0441 \u043f\u043e Docker, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u044b \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c \u0435\u0433\u043e \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u2014 \u043e\u0442 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0439 \u0434\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0441\u0435\u0442\u0438.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/chto-takoe-docker-kratkij-ekskurs-v-istoriyu-i-osnovnye-abstrakczii\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-08-20T05:42:23+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-08-20T05:42:23+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Vad \u00e4r Docker: en kort \u00f6versikt \u00f6ver historien och de viktigaste abstraktionerna | ProHoster","description":"Den 10 augusti startade en videokurs om Docker p\u00e5 Sl\u00fcrm, d\u00e4r vi g\u00e5r igenom det helt \u2014 fr\u00e5n grundl\u00e4ggande abstraktioner till n\u00e4tverksparametrar.","canonical_url":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/chto-takoe-docker-kratkij-ekskurs-v-istoriyu-i-osnovnye-abstrakczii","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sv_SE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 Docker: \u043a\u0440\u0430\u0442\u043a\u0438\u0439 \u044d\u043a\u0441\u043a\u0443\u0440\u0441 \u0432 \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438 | ProHoster","og:description":"10 \u0430\u0432\u0433\u0443\u0441\u0442\u0430 \u0432 \u0421\u043b\u0451\u0440\u043c \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u0430\u043b \u0432\u0438\u0434\u0435\u043e\u043a\u0443\u0440\u0441 \u043f\u043e Docker, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u044b \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c \u0435\u0433\u043e \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u2014 \u043e\u0442 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0439 \u0434\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0441\u0435\u0442\u0438.","og:url":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/chto-takoe-docker-kratkij-ekskurs-v-istoriyu-i-osnovnye-abstrakczii","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-08-20T05:42:23+00:00","article:modified_time":"2020-08-20T05:42:23+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"91905","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 12:18:28","updated":"2022-10-01 05:09:53","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/91905","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/comments?post=91905"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/91905\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media\/91906"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media?parent=91905"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/categories?post=91905"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/tags?post=91905"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}