Docker begripe

Ik haw Docker no ferskate moannen brûkt om it ûntwikkelings- / leveringsproses fan webprojekten te strukturearjen. Ik bied Habrakhabr-lêzers in oersetting fan it ynliedend artikel oer docker - "Dokker begripe".

Wat is docker?

Docker is in iepen platfoarm foar it ûntwikkeljen, leverjen en operearjen fan applikaasjes. Docker is ûntworpen om jo applikaasjes rapper te leverjen. Mei docker kinne jo jo applikaasje loskeppelje fan jo ynfrastruktuer en de ynfrastruktuer behannelje as in beheare applikaasje. Docker helpt jo jo koade rapper te ferstjoeren, rapper te testen, applikaasjes rapper te ferstjoeren en de tiid te ferminderjen tusken it skriuwen fan koade en it útfieren fan koade. Docker docht dit fia in lichtgewicht container-virtualisaasjeplatfoarm, mei prosessen en nutsbedriuwen dy't jo helpe jo applikaasjes te behearjen en te hostjen.

Yn har kearn lit docker jo hast elke applikaasje útfiere, feilich isolearre yn in kontener. Feilige isolaasje lit jo in protte konteners tagelyk op deselde host útfiere. De lichtgewicht aard fan 'e kontener, dy't rint sûnder de ekstra lêst fan in hypervisor, lit jo mear út jo hardware krije.

It platfoarm en ark foar containervirtualisaasje kinne nuttich wêze yn 'e folgjende gefallen:

  • ferpakking fan jo applikaasje (en de komponinten dy't jo brûke) yn docker-konteners;
  • distribúsje en levering fan dizze konteners oan jo teams foar ûntwikkeling en testen;
  • it pleatsen fan dizze konteners op jo produksjesites, sawol yn datasintra as yn 'e wolken.

Wêr kin ik docker foar brûke?

Publisearje jo applikaasjes fluch

Docker is geweldig foar it organisearjen fan de ûntwikkelingssyklus. Docker lit ûntwikkelders lokale konteners útfiere mei applikaasjes en tsjinsten. Wat jo dêrnei kinne yntegrearje mei it proses fan trochgeande yntegraasje en ynset workflow.

Jo ûntwikkelders skriuwe bygelyks koade lokaal en diele har ûntwikkelingsstapel (in set Docker-ôfbyldings) mei kollega's. As se klear binne, triuwe se de koade en konteners nei de testside en fiere alle nedige tests út. Fanôf de testside kinne se koade en ôfbyldings stjoere nei produksje.

Makliker útlizze en ûntjaan

It docker-container-basearre platfoarm makket it maklik om jo lading te porten. Docker-konteners kinne rinne op jo lokale masine, itsij echt as op in firtuele masine yn in datasintrum, as yn 'e wolk.

De portabiliteit en lichtgewicht aard fan docker makket it maklik om jo wurkdruk dynamysk te behearjen. Jo kinne docker brûke om jo applikaasje of tsjinsten yn te setten of ôf te sluten. De snelheid fan docker lit dit yn hast echte tiid dien wurde.

Hegere loads en mear loads

Docker is lichtgewicht en rap. It soarget foar in duorsum, kosten-effektiv alternatyf foar hypervisor-basearre firtuele masines. It is benammen nuttich yn omjouwings mei hege lading, bygelyks by it meitsjen fan jo eigen wolk of platfoarm-as-tsjinst. Mar it is ek nuttich foar lytse en middelgrutte applikaasjes as jo mear út 'e boarnen wolle krije dy't jo hawwe.

Main Docker-komponinten

Docker bestiet út twa haadkomponinten:

  • Docker: in iepen boarne virtualisaasjeplatfoarm;
  • Docker Hub: Us platfoarm-as-a-tsjinst foar distribúsje en behear fan Docker-konteners.

Noat! Docker wurdt ferspraat ûnder de Apache 2.0-lisinsje.

Docker arsjitektuer

Docker brûkt in client-server-arsjitektuer. De Docker-kliïnt kommunisearret mei de Docker-daemon, dy't de lêst nimt fan it meitsjen, útfieren en fersprieden fan jo konteners. Sawol client as server kinne op itselde systeem rinne, jo kinne de kliïnt ferbine mei in docker-daemon op ôfstân. De kliïnt en tsjinner kommunisearje fia in socket of RESTful API.

Docker begripe

Docker daemon

Lykas yn it diagram werjûn, rint de daemon op 'e hostmasine. De brûker net direkt ynteraksje mei de tsjinner, mar brûkt de client foar dit.

Docker client

De Docker-kliïnt, it docker-programma, is de haadynterface foar Docker. It ûntfangt kommando's fan 'e brûker en ynteraksje mei de docker-daemon.

Binnen docker

Om te begripen wêrút docker bestiet, moatte jo witte oer trije komponinten:

  • ôfbyldings
  • register
  • konteners

Ofbyldings

De Docker-ôfbylding is in allinich-lês-sjabloan. De ôfbylding kin bygelyks it Ubuntu-bestjoeringssysteem befetsje mei Apache en in applikaasje derop. Ofbyldings wurde brûkt om konteners te meitsjen. Docker makket it maklik om nije ôfbyldings te meitsjen, besteande te aktualisearjen, of jo kinne ôfbyldings downloade makke troch oare minsken. Ofbyldings binne ûnderdielen fan in docker-build.

It register

It Docker-register bewarret ôfbyldings. D'r binne iepenbiere en partikuliere registers wêrfan jo ôfbyldings kinne downloade of uploade. In iepenbier Docker-register is Docker hub. D'r is dêr in enoarme samling ôfbyldings opslein. Lykas jo witte kinne ôfbyldings troch jo makke wurde of jo kinne ôfbyldings brûke makke troch oaren. Registraasjes binne in distribúsjekomponint.

Containers

Containers binne fergelykber mei mappen. Containers befetsje alles wat de applikaasje moat útfiere. Elke kontener wurdt makke fan in ôfbylding. Containers kinne wurde oanmakke, begon, stoppe, migrearre of wiske. Elke kontener is isolearre en biedt in feilich platfoarm foar de applikaasje. Containers binne ûnderdielen fan it wurk.

Dus hoe wurket Docker?

Oant no witte wy dat:

  • wy kinne ôfbyldings meitsje wêryn ús applikaasjes sitte;
  • wy kinne konteners meitsje fan ôfbyldings om applikaasjes út te fieren;
  • Wy kinne ôfbyldings ferspriede fia Docker Hub of in oar ôfbyldingsregister.

Litte wy sjen hoe't dizze komponinten byinoar passe.

Hoe wurket it byld?

Wy witte al dat in ôfbylding in allinich lêzen sjabloan is wêrfan in kontener makke wurdt. Elke ôfbylding bestiet út in set fan nivo's. Docker brûkt uny triem systeem om dizze nivo's te kombinearjen yn ien ôfbylding. Uny-bestânsysteem lit bestannen en mappen fan ferskate bestânsystemen (ferskillende tûken) transparant oerlaapje, en meitsje in gearhingjend bestânsysteem.

Ien fan 'e redenen wêrom't docker lichtgewicht is, is om't it lagen lykas dizze brûkt. As jo ​​de ôfbylding feroarje, lykas it bywurkjen fan in applikaasje, wurdt in nije laach makke. Dus, sûnder de folsleine ôfbylding te ferfangen of it opnij op te bouwen, lykas jo miskien hawwe mei in firtuele masine, wurdt allinich de laach tafoege of bywurke. En jo hoege net de hiele nije ôfbylding te fersprieden, allinich de fernijing wurdt ferspraat, wêrtroch it makliker en flugger is om ôfbyldings te fersprieden.

Yn it hert fan elke ôfbylding is in basisôfbylding. Bygelyks, ubuntu, de basisôfbylding fan Ubuntu, of fedora, de basisôfbylding fan de Fedora-distribúsje. Jo kinne ek ôfbyldings brûke as basis foar it meitsjen fan nije ôfbyldings. As jo ​​​​bygelyks in apache-ôfbylding hawwe, kinne jo it brûke as basisôfbylding foar jo webapplikaasjes.

Noat! Docker lûkt typysk ôfbyldings út it Docker Hub-register.

Docker-ôfbyldings kinne wurde makke fan dizze basisôfbyldings; wy neame de stappen om dizze ôfbyldings ynstruksjes te meitsjen. Elke ynstruksje makket in nije ôfbylding of nivo. De ynstruksjes sille de folgjende wêze:

  • kommando útfiere
  • it tafoegjen fan in triem of map
  • it meitsjen fan in omjouwingsfariabele
  • ynstruksjes oer wat te rinnen as de kontener fan dizze ôfbylding wurdt lansearre

Dizze ynstruksjes wurde opslein yn in bestân Dockerfile. Docker lêst dit Dockerfile, as jo de ôfbylding bouwe, fiert dizze ynstruksjes út en jout de definitive ôfbylding werom.

Hoe wurket it docker-register?

It register is in repository foar dockerôfbyldings. Sadree't de ôfbylding is oanmakke, kinne jo it publisearje yn it iepenbiere Docker Hub-register of nei jo persoanlike register.

Mei de docker-kliïnt kinne jo sykje nei al publisearre ôfbyldings en downloade se nei jo docker-masine om konteners te meitsjen.

Docker Hub biedt publike en partikuliere ôfbyldingsrepositories. It sykjen en downloaden fan ôfbyldings fan iepenbiere repositories is beskikber foar elkenien. De ynhâld fan privee opslach is net opnommen yn 'e sykresultaten. En allinich jo en jo brûkers kinne dizze ôfbyldings ûntfange en konteners fan har meitsje.

Hoe wurket in kontener?

In kontener bestiet út in bestjoeringssysteem, brûkersbestannen en metadata. Lykas wy witte, wurdt elke kontener makke fan in ôfbylding. Dizze ôfbylding fertelt docker wat yn 'e kontener is, hokker proses te begjinnen, wannear't de kontener begjint, en oare konfiguraasjegegevens. De Docker-ôfbylding is allinich lêzen. As docker in kontener begjint, makket it in lês- / skriuwlaach boppe op 'e ôfbylding (mei it unionbestânsysteem lykas earder oanjûn) wêryn de applikaasje kin wurde útfierd.

Wat bart der as de kontener begjint?

Of mei help fan it programma docker, of mei de RESTful API, fertelt de docker-kliïnt de docker-daemon om de kontener te begjinnen.

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

Litte wy ris nei dit kommando sjen. De kliïnt wurdt lansearre mei it kommando docker, mei opsje run, dy't seit dat der in nije kontener lansearre wurdt. De minimale easken foar it útfieren fan in kontener binne de folgjende attributen:

  • hokker ôfbylding te brûken om de kontener te meitsjen. Yn ús gefal ubuntu
  • it kommando dat jo útfiere wolle as de kontener begon is. Yn ús gefal /bin/bash

Wat bart der ûnder de motorkap as wy dit kommando útfiere?

Docker, yn oarder, docht it folgjende:

  • downloadt de ubuntu-ôfbylding: docker kontrolearret foar ôfbylding beskikberens ubuntu op 'e lokale masine, en as it der net is, download it dan fan Docker hub. As der in ôfbylding is, brûkt it it om in kontener te meitsjen;
  • makket in kontener: as de ôfbylding wurdt ûntfongen, brûkt docker it om in kontener te meitsjen;
  • inisjalisearret it bestânsysteem en mount it allinich-lêsnivo: de kontener wurdt makke yn it bestânsysteem en de ôfbylding wurdt tafoege oan it allinich-lêsnivo;
  • inisjalisearret it netwurk/brêge: makket in netwurkynterface wêrtroch docker kin kommunisearje mei de hostmasine;
  • It IP-adres ynstelle: fynt en set it adres;
  • Begjint it oantsjutte proses: lanseart jo applikaasje;
  • Ferwurket en produsearret útfier fan jo applikaasje: ferbynt en logt de standert ynfier, útfier en flaterstream fan jo applikaasje, sadat jo kinne folgje hoe't jo applikaasje prestearret.

Jo hawwe no in wurkjende kontener. Jo kinne jo kontener beheare, ynteraksje mei jo applikaasje. As jo ​​​​beslute om de applikaasje te stopjen, wiskje de kontener.

Technologyen brûkt

Docker is skreaun yn Go en brûkt guon funksjes fan 'e Linux kernel om de boppesteande funksjonaliteit te ymplementearjen.

Nammeromten

Docker brûkt technology namespaces om isolearre wurkromten te organisearjen, dy't wy konteners neame. As wy in kontener begjinne, makket docker in set nammeromten foar dy kontener.

Dit soarget foar in isolearre laach, wêrby't elk aspekt fan 'e kontener yn syn eigen nammeromte rint en gjin tagong hat ta it eksterne systeem.

List fan guon nammeromten dy't docker brûkt:

  • pid: om it proses te isolearjen;
  • net: foar it behearen fan netwurkynterfaces;
  • ipc: om IPC-boarnen te behearjen. (ICP: InterProccess Communication);
  • mnt: om berchpunten te behearjen;
  • utc: om de kearn- en kontrôleferzjegeneraasje te isolearjen (UTC: Unix timesharing-systeem).

Kontrôle groepen

Docker brûkt ek technology cgroups of kontrôle groepen. De kaai foar it útfieren fan in applikaasje yn isolemint is om de applikaasje allinich de boarnen te leverjen dy't jo wolle leverje. Dit soarget derfoar dat de konteners goede buorlju wurde. Kontrôlegroepen kinne jo beskikbere hardware-boarnen diele en, as nedich, grinzen en beheiningen ynstelle. Bygelyks, beheine it mooglike bedrach fan ûnthâld foar de kontener.

Union Triemsysteem

Union File Sysem of UnionFS is in bestânsysteem dat wurket troch lagen te meitsjen, wêrtroch it heul lichtgewicht en rap is. Docker brûkt UnionFS om de blokken te meitsjen wêrfan de kontener is boud. Docker kin ferskate farianten fan UnionFS brûke, ynklusyf: AUFS, btrfs, vfs en DeviceMapper.

Container formaten

Docker kombinearret dizze komponinten yn in wrapper dy't wy it containerformaat neame. It standertformaat wurdt neamd libcontainer. Docker stipet ek it tradisjonele kontenerformaat op Linux mei LXC. Yn 'e takomst kin Docker oare kontenerformaten stypje. Bygelyks yntegrearje mei BSD Jails of Solaris Zones.

Boarne: www.habr.com

Add a comment