{"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\/da\/blog\/administrirovanie\/chto-takoe-docker-kratkij-ekskurs-v-istoriyu-i-osnovnye-abstrakczii","title":{"rendered":"Hvad er Docker: en kort introduktion til historien og de vigtigste abstraktioner","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>10. august startede der et <noindex><a rel=\"nofollow\" href=\"http:\/\/to.slurm.io\/2patKQ\">videokursus om Docker<\/a><\/noindex>, hvor vi d\u00e6kker det fuldst\u00e6ndigt \u2014 fra grundl\u00e6ggende abstraktioner til netv\u00e6rksparametre. <\/p>\n<p><\/p>\n<p>I denne artikel vil vi tale om historien bag Docker og dets grundl\u00e6ggende abstraktioner: Image, CLI, Dockerfile. Forel\u00e6sningen er rettet mod nybegyndere, s\u00e5 det vil n\u00e6ppe v\u00e6re interessant for erfarne brugere. Der vil ikke v\u00e6re nogen blodige detaljer, appendicer eller dybtg\u00e5ende analysere. Bare det helt grundl\u00e6ggende.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Hvad er Docker: en kort introduktion til historien og de vigtigste 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\">Hvad er Docker<\/h2>\n<p><\/p>\n<p>Lad os se p\u00e5 definitionen af Docker fra Wikipedia.<\/p>\n<p><\/p>\n<blockquote><p>Docker er software til automatisering af implementering og styring af applikationer i milj\u00f8er med containerunderst\u00f8ttelse.<\/p><\/blockquote>\n<p>Ud fra denne definition er der ikke meget klarhed. Is\u00e6r hvad det betyder at 'i milj\u00f8er med containerunderst\u00f8ttelse'. For at forst\u00e5 det, lad os g\u00e5 tilbage i tiden. Vi starter i en \u00e6ra, som jeg delvis kalder 'Monolit\u00e6raen'.<\/p>\n<p><\/p>\n<h2 id=\"monolitnaya-era\">Monolit\u00e6raen<\/h2>\n<p><\/p>\n<p>Monolit\u00e6raen er begyndelsen af 2000'erne, hvor alle applikationer var monolitiske, med et v\u00e6ld af afh\u00e6ngigheder. Udviklingen tog lang tid. P\u00e5 samme tid var serverne ikke s\u00e5 mange, og vi kendte dem alle ved navn og overv\u00e5gede dem. Der er et sjovt sammenligningspunkt:<\/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=\"Afspil 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 \u2014 det er k\u00e6ledyr. I monolit\u00e6raen behandlede vi vores servere som k\u00e6ledyr, vi plejer og tager os af dem, bl\u00e6ser st\u00f8vet af dem. For bedre at styre ressourcerne brugte vi virtualisering: vi tog en server og delte den op i flere virtuelle maskiner, og dermed sikrede vi isolering af milj\u00f8et.<\/p>\n<p><\/p>\n<h2 id=\"sistemy-virtualizacii-na-baze-gipervizora\">Virtualiseringssystemer baseret p\u00e5 hypervisor<\/h2>\n<p><\/p>\n<p>Alle har sikkert h\u00f8rt om virtualiseringssystemer: VMware, VirtualBox, Hyper-V, Qemu KVM osv. De sikrer isolering af applikationer og ressourceforvaltning, men de har ogs\u00e5 ulemper. For at lave virtualisering kr\u00e6ves en hypervisor. Og hypervisoren medf\u00f8rer ressourceoverhead. Desuden er selve den virtuelle maskine ofte en stor enhed \u2014 et tungt billede, som har et operativsystem, Nginx, Apache og muligvis MySQL. Billedet er stort, og det er uhandy at arbejde med en virtuel maskine. Som f\u00f8lge heraf kan arbejdet med virtualisering v\u00e6re langsomt. For at l\u00f8se dette problem blev der skabt virtualiseringssystemer p\u00e5 kernniveau.<\/p>\n<p><\/p>\n<h2 id=\"sistemy-virtualizacii-na-urovne-yadra\">Virtualiseringssystemer p\u00e5 kernniveau<\/h2>\n<p><\/p>\n<p>Virtualisering p\u00e5 kerniveau underst\u00f8ttes af systemer som OpenVZ, Systemd-nspawn, LXC. Et klart eksempel p\u00e5 s\u00e5dan virtualisering er LXC (Linux Containers). <\/p>\n<p><\/p>\n<p>LXC \u2014 et virtualiseringssystem p\u00e5 operativsystemniveau, der tillader k\u00f8rsel af flere isolerede forekomster af Linux-operativsystemet p\u00e5 \u00e9n v\u00e6rtsmaskine. LXC bruger ikke virtuelle maskiner, men opretter et virtuelt milj\u00f8 med sit eget procesrum og netv\u00e6rksstak.<\/p>\n<p><\/p>\n<p>Essentielt set opretter LXC containere. Hvad er forskellen mellem virtuelle maskiner og containere?<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Hvad er Docker: en kort introduktion til historien og de vigtigste abstraktioner\" src=\"\/wp-content\/uploads\/2020\/08\/55afdcfd700d4869c9de488033a8e314.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Containere er ikke velegnede til procesisolering: i virtualiseringssystemer p\u00e5 kerniveau findes der s\u00e5rbarheder, der g\u00f8r det muligt at komme ud af en container til v\u00e6rten. S\u00e5 hvis du har brug for at isolere noget, er det bedre at bruge en virtuel maskine.<\/p>\n<p><\/p>\n<p>Forskelle mellem virtualisering og containerisering kan ses i diagrammet.<br \/>\nDer findes hardwarehypervisorer, hypervisorer ovenp\u00e5 operativsystemet og containere. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Hvad er Docker: en kort introduktion til historien og de vigtigste abstraktioner\" src=\"\/wp-content\/uploads\/2020\/08\/a0c06e9adc1fab3b4b5e9e1b05b51d66.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\"Hardware\" hypervisorer er fantastisk, hvis du virkelig vil isolere noget. Fordi der er mulighed for at isolere p\u00e5 niveau med hukommelsessider og processorer.<\/p>\n<p><\/p>\n<p>Der er hypervisorer som programmer, og der er containere, og dem vil vi tale videre om. I containeriseringssystemer findes der ikke en hypervisor, men der er en Container Engine, der opretter og administrerer containere. Denne l\u00f8sning er lettere, s\u00e5 ved at arbejde med kernen er overheadet mindre, eller det findes slet ikke.<\/p>\n<p><\/p>\n<blockquote>\n<h2 id=\"chto-ispolzuetsya-dlya-konteynerizacii-na-urovne-yadra\">Hvad der bruges til containerisering p\u00e5 kerne-niveau<\/h2>\n<p>De prim\u00e6re teknologier, der muligg\u00f8r oprettelsen af en isoleret container fra andre processer, er Namespaces og Control Groups.<\/p>\n<p>Namespaces: PID, Networking, Mount og User. Der er flere, men for enkelhedens skyld stopper vi ved disse.<\/p>\n<p>PID Namespace begr\u00e6nser processer. N\u00e5r vi for eksempel opretter et PID Namespace og placerer en proces der, f\u00e5r den PID 1. Normalt er PID 1 i systemer systemd eller init. N\u00e5r vi derfor placerer en proces i et nyt namespace, f\u00e5r den ogs\u00e5 PID 1.<\/p>\n<p>Networking Namespace tillader begr\u00e6nsning\/isolering af netv\u00e6rket, og man kan placere sine egne gr\u00e6nseflader der. Mount er en begr\u00e6nsning i filsystemet. User er en begr\u00e6nsning for brugere.<\/p>\n<p>Control Groups: Memory, CPU, IOPS, Network \u2014 omkring 12 indstillinger i alt. De kaldes ogs\u00e5 Cgroups (\"C-grupper\").<\/p>\n<p>Control Groups styrer ressourcerne for containeren. Gennem Control Groups kan vi angive, at containeren ikke m\u00e5 forbruge mere end en vis m\u00e6ngde ressourcer.<\/p>\n<p>For containerization to work effectively, additional technologies are used: Capabilities, Copy-on-write, and others.<\/p>\n<p>Capabilities refer to defining what a process can and cannot do. At the kernel level, these are simply bitmaps with numerous parameters. For instance, the root user has full privileges and can do anything. A time server can change the system time: it has capabilities for Time Capsule, and that\u2019s it. Privileges allow for flexible constraints on processes, thereby enhancing security.<\/p>\n<p>The Copy-on-write system allows us to work with Docker images more efficiently.<\/p>\n<p><em>Currently, Docker has compatibility issues with Cgroups v2, so this article specifically addresses Cgroups v1.<\/em><\/p><\/blockquote>\n<p>But let\u2019s return to the history. <\/p>\n<p><\/p>\n<p>When virtualization systems at the kernel level emerged, they began to be widely adopted. The overhead on the hypervisor disappeared, but some issues remained:<\/p>\n<p><\/p>\n<ul>\n<li>large images: OpenVZ pushes the operating system, libraries, and a bunch of different software, and as a result, the image still becomes quite large;<\/li>\n<li>there\u2019s no proper packaging and delivery standard, which leaves the dependency problem. There are situations where two pieces of code use the same library but with different versions. This can lead to conflicts.<\/li>\n<\/ul>\n<p><\/p>\n<p>To solve all these problems, the next era arrived.<\/p>\n<p><\/p>\n<h2 id=\"era-konteynerov\">The Era of Containers<\/h2>\n<p><\/p>\n<p>When the Era of Containers began, the philosophy of working with them changed:<\/p>\n<p><\/p>\n<ul>\n<li>One process \u2014 one container.<\/li>\n<li>All necessary dependencies for the process are delivered within its container. This requires breaking up monoliths into microservices.<\/li>\n<li>The smaller the image, the better \u2014 fewer potential vulnerabilities, faster deployments, and so on.<\/li>\n<li>Instances become ephemeral. <\/li>\n<\/ul>\n<p><\/p>\n<p>Remember when I talked about pets vs cattle? Previously, instances were akin to pets, but now they have become like cattle. There used to be a monolith \u2014 one application. Now there are 100 microservices, 100 containers. Some containers might have 2-3 replicas. It becomes less important to control each container. What matters more is the availability of the service itself: what this set of containers does. This changes monitoring approaches.<\/p>\n<p><\/p>\n<p>In 2014-2015, the rise of Docker occurred \u2014 the technology we will discuss now.<\/p>\n<p><\/p>\n<p>Docker har \u00e6ndret filosofien og standardiseret applikationspakning. Med Docker kan vi pakke en applikation, sende den til et repository, hente den derfra og implementere den. <\/p>\n<p><\/p>\n<p>I Docker-containeren l\u00e6gger vi alt n\u00f8dvendigt, hvilket l\u00f8ser afh\u00e6ngighedsproblemet. Docker garanterer reproducerbarhed. Jeg tror, mange har st\u00e5et over for uforudsigelighed: alt fungerer, n\u00e5r du skubber til produktion, men s\u00e5 stopper det med at fungere. Med Docker forsvinder dette problem. Hvis din Docker-container starter op og udf\u00f8rer det, den skal, s\u00e5 er der en stor sandsynlighed for, at den ogs\u00e5 vil fungere i produktionen og g\u00f8re det samme.<\/p>\n<p><\/p>\n<blockquote>\n<h2 id=\"otstuplenie-pro-overhed\">Et afsnit om overhead<\/h2>\n<p>Der er konstant debat om overhead. Nogle mener, at Docker ikke tilf\u00f8jer ekstra belastning, da det bruger Linux-kernen og alle dens processer, der er n\u00f8dvendige for containerisering. \"Hvis du siger, at Docker er overhead, s\u00e5 er Linux-kernen ogs\u00e5 overhead.\"<\/p>\n<p>P\u00e5 den anden side, hvis man dykker dybere ned, s\u00e5 er der faktisk nogle ting i Docker, som med lidt god vilje kan kaldes overhead.<\/p>\n<p>Det f\u00f8rste er PID-namespace. N\u00e5r vi placerer en proces i namespace, tildeles den PID 1. Samtidig har denne proces ogs\u00e5 en anden PID, der findes i host-namespace, uden for containeren. For eksempel, hvis vi k\u00f8rer Nginx i en container, bliver den PID 1 (master-proces). P\u00e5 v\u00e6rten har den PID 12623. Det er sv\u00e6rt at vurdere, hvor meget overhead det er.<\/p>\n<p>Den anden ting er Cgroups. Lad os tage Cgroups for hukommelse, det vil sige muligheden for at begr\u00e6nse hukommelsen for containeren. N\u00e5r det sl\u00e5s til, aktiveres t\u00e6llere, memory accounting: kernen skal forst\u00e5, hvor mange sider der er tildelt, og hvor mange der stadig er ledige for denne container. Dette kan v\u00e6re overhead, men jeg har ikke set pr\u00e6cise unders\u00f8gelser af, hvordan det p\u00e5virker ydeevnen, og jeg har ikke selv bem\u00e6rket, at applikationer, der k\u00f8rer i Docker, pludselig mistede ydeevne. <\/p>\n<p>En ting mere om ydeevnen. Nogle kerneparametre overf\u00f8res fra v\u00e6rten til containeren. Is\u00e6r nogle netv\u00e6rksparametre. Derfor, hvis du \u00f8nsker at k\u00f8re noget h\u00f8jtydende i Docker, for eksempel noget der aktivt benytter netv\u00e6rket, skal du i det mindste justere disse parametre. For eksempel nf_conntrack. <\/p><\/blockquote>\n<p><\/p>\n<h2 id=\"o-koncepcii-docker\">Om konceptet Docker<\/h2>\n<p><\/p>\n<p>Docker best\u00e5r af flere komponenter: <\/p>\n<p><\/p>\n<ol>\n<li>Docker Daemon \u2013 den samme Container Engine; starter containere. <\/li>\n<li>Docker CII \u2013 et v\u00e6rkt\u00f8j til at administrere Docker.<\/li>\n<li>Dockerfile \u2013 instruktioner til, hvordan man bygger et billede.<\/li>\n<li>Image \u2013 et billede, der rulles ud til en container.<\/li>\n<li>Container.<\/li>\n<li>Docker registry \u2013 et lager af billeder.<\/li>\n<\/ol>\n<p><\/p>\n<p>Schematisk ser det cirka s\u00e5dan her ud:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Hvad er Docker: en kort introduktion til historien og de vigtigste 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\u00f8rer Docker daemon, som starter containere. Der er en Client, der sender kommandoer: bygg billede, download billede, start container. Docker daemon henter i registry og udf\u00f8rer dem. Docker-klienten kan f\u00e5 adgang b\u00e5de lokalt (til Unix-socket) og via TCP fra en fjernhost.<\/p>\n<p><\/p>\n<p>Lad os gennemg\u00e5 hver komponent.<\/p>\n<p><\/p>\n<p><u>Docker daemon (daemon)<\/u> \u2013 er den server-side komponent, der k\u00f8rer p\u00e5 v\u00e6rtmaskinen: downloader billeder og starter containere fra dem, opretter netv\u00e6rk mellem containere, indsamler logs. N\u00e5r vi siger \"opret billede\", er det ogs\u00e5 noget, daemonen h\u00e5ndterer.<\/p>\n<p><\/p>\n<p><u>Docker CLI<\/u> \u2013 er klientkomponenten i Docker, et konsolv\u00e6rkt\u00f8j til arbejde med daemonen. Jeg gentager, den kan arbejde ikke kun lokalt, men ogs\u00e5 over netv\u00e6rket. <\/p>\n<p><\/p>\n<p><strong>Grundl\u00e6ggende kommandoer:<\/strong><\/p>\n<p><\/p>\n<p>docker ps \u2013 viser de containere, der i \u00f8jeblikket k\u00f8rer p\u00e5 Docker-v\u00e6rt.<br \/>\ndocker images \u2013 viser billeder, der er downloadet lokalt.<br \/>\ndocker search  \u2013 s\u00f8g efter et billede i registry.<br \/>\ndocker pull  \u2013 download billede fra registry til maskinen.<br \/>\ndocker build &lt;&gt; \u2013 byg et billede.<br \/>\ndocker run  \u2013 start en container.<br \/>\ndocker rm  \u2013 slet en container.<br \/>\ndocker logs  \u2013 logs fra containeren.<br \/>\ndocker start\/stop\/restart  \u2013 arbejde med containeren.\n<\/p>\n<p>Hvis du mestrer disse kommandoer og bruger dem sikkert, kan du betragte det som at have mestret Docker p\u00e5 brugerens niveau med 70%.<\/p>\n<p><\/p>\n<p><u>Dockerfile<\/u> \u2013 instruktionen til at oprette et billede. N\u00e6sten hver kommando i instruktionen er et nyt lag. Lad os se p\u00e5 et eksempel.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Hvad er Docker: en kort introduktion til historien og de vigtigste abstraktioner\" src=\"\/wp-content\/uploads\/2020\/08\/4d61b58d0d0d8b2e4ddbbfe573f34f7e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>S\u00e5dan ser en Dockerfile ud: til venstre kommandoer, til h\u00f8jre \u2013 argumenter. Hver kommando, der er her (og generelt skrevet i Dockerfile), skaber et nyt lag i Image. <\/p>\n<p><\/p>\n<p>Selv n\u00e5r du ser p\u00e5 venstre side, kan du f\u00e5 en id\u00e9 om, hvad der foreg\u00e5r. Vi siger: \"opret en mappe for os\" \u2014 det er et lag. \"G\u00f8r mappen aktiv\" \u2014 det er endnu et lag, og s\u00e5 videre. Lagkagen g\u00f8r livet lettere. Hvis jeg opretter endnu en Dockerfile og \u00e6ndrer noget i den sidste linje \u2014 jeg k\u00f8rer ikke \"python\" \"main.py\", men noget andet, eller installerer afh\u00e6ngigheder fra en anden fil \u2014 s\u00e5 vil de tidligere lag blive genbrugt som cache.<\/p>\n<p><\/p>\n<p><u>Billede<\/u> \u2014 dette er en containerpakke, fra hvilken der startes containere. Ser man p\u00e5 Docker som en pakkeadministrator (som om vi arbejder med deb eller rpm-pakker), s\u00e5 er et image i bund og grund en rpm-pakke. Via yum install kan vi installere applikationen, slette den, finde den i depotet og downloade den. Her er det lidt det samme: containere startes fra image, de opbevares i Docker registry (svarende til yum, i depotet), og hvert image har en SHA-256 hash, et navn og et tag.<\/p>\n<p><\/p>\n<p>Et image opbygges efter instruktionerne fra Dockerfile. Hver instruktion fra Dockerfile skaber et nyt lag. Lagene kan genbruges.<\/p>\n<p><\/p>\n<p><u>Docker registry<\/u> \u2014 er et repository for Docker images. I lighed med et operativsystem har Docker et offentligt standardregister \u2014 dockerhub. Men man kan ogs\u00e5 oprette sit eget repository, sit eget Docker registry. <\/p>\n<p><\/p>\n<p><u>Container<\/u> \u2014 er det, der startes fra et image. Vi har samlet et image efter instruktionen fra Dockerfile, og derefter starter vi det fra dette image. Denne container er isoleret fra de \u00f8vrige containere, og den skal indeholde alt, hvad der er n\u00f8dvendigt for at k\u00f8re applikationen. Desuden er \u00e9n container lig med \u00e9n proces. Det sker nogle gange, at man m\u00e5 have to processer, men det strider lidt imod Docker's ideologi.<\/p>\n<p><\/p>\n<p>Kravet om \"\u00e9n container \u2014 \u00e9n proces\" er relateret til PID Namespace. N\u00e5r der i Namespace startes en proces med PID 1, hvis den pludselig d\u00f8r, d\u00f8r hele containeren ogs\u00e5. Hvis der derimod k\u00f8rer to processer: en lever, og den anden er d\u00f8d, vil containeren stadig forts\u00e6tte med at eksistere. Men det er et sp\u00f8rgsm\u00e5l om Best Practices, som vi vil tale om i andre materialer.<\/p>\n<p><\/p>\n<p>Du kan udforske detaljerne og det fulde program for kurset via linket: \"<noindex><a rel=\"nofollow\" href=\"http:\/\/to.slurm.io\/2patKQ\">Videokursus om Docker<\/a><\/noindex>\u00bb. <\/p>\n<p><\/p>\n<p><em>Forfatter: Marcel Ibraev, certificeret Kubernetes-administrator, praktiserende ingeni\u00f8r i Southbridge, taler og kursusudvikler for Slyrm.<\/em><\/p>\n<p>Kilde: <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.3 - 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\/da\/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.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"da_DK\" \/>\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\/da\/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\udd47Hvad er Docker: en kort oversigt over historien og de vigtigste abstraktioner | ProHoster","description":"Den 10. august startede Slyrm en videokursus om Docker, hvor vi gennemg\u00e5r det helt fra de grundl\u00e6ggende abstraktioner til netv\u00e6rksindstillingerne.","canonical_url":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/chto-takoe-docker-kratkij-ekskurs-v-istoriyu-i-osnovnye-abstrakczii","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"da_DK","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\/da\/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\/da\/wp-json\/wp\/v2\/posts\/91905","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/comments?post=91905"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/91905\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media\/91906"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media?parent=91905"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/categories?post=91905"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/tags?post=91905"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}