FörstÄ Docker

Jag har anvĂ€nt Docker i flera mĂ„nader för att strukturera utvecklings-/leveransprocessen för webprojekt. Jag erbjuder lĂ€sarna pĂ„ "Habr" en översĂ€ttning av den introducerande artikeln om Docker — "FörstĂ„ Docker".

Vad Àr Docker?

Docker Àr en öppen plattform för utveckling, leverans och drift av applikationer. Docker Àr utformat för att snabbare distribuera dina applikationer. Med Docker kan du isolera din applikation frÄn din infrastruktur och hantera infrastrukturen som en hanterad tjÀnst. Docker hjÀlper dig att distribuera din kod snabbare, testa snabbare, lansera applikationer snabbare och minska tiden mellan att skriva kod och köra den. Docker gör detta med en lÀttviktsplattform för containervirtualisering, med hjÀlp av processer och verktyg som hjÀlper till att hantera och distribuera dina applikationer.

I sin kÀrna lÄter Docker dig köra praktiskt taget vilken applikation som helst, sÀkert isolerad i en container. Den sÀkra isoleringen gör att du kan köra mÄnga containrar pÄ en och samma vÀrd samtidigt. Den lÀtta naturen hos containern, som körs utan extra belastning frÄn en hypervisor, gör att du kan fÄ mer ut av din hÄrdvara.

Plattformen och verktygen för containervirtualisering kan vara anvÀndbara i följande fall:

  • paketering av din applikation (och Ă€ven anvĂ€nda komponenter) i Docker-containrar;
  • distribuering och leverans av dessa containrar till dina team för utveckling och testning;
  • distribuering av dessa containrar till produktionen, bĂ„de i datacenter och i molnet.

Vad kan jag anvÀnda Docker till?

Snabb distribution av dina applikationer

Docker Àr perfekt för att organisera utvecklingscykeln. Docker gör det möjligt för utvecklare att anvÀnda lokala containrar med applikationer och tjÀnster. Detta möjliggör senare integration med processen för kontinuerlig integration och distribution (CI/CD-arbetsflöde).

Till exempel skriver dina utvecklare kod lokalt och delar sin utvecklingsmiljö (uppsÀttning Docker-bilder) med kollegor. NÀr de Àr redo, skickar de koden och containrarna till testmiljön och kör alla nödvÀndiga tester. FrÄn testmiljön kan de skicka koden och bilderna till produktionen.

Enklare distribution och implementering

Den containerbaserade Docker-plattformen gör det enkelt att portera din arbetsbelastning. Docker-containrar kan köras pÄ din lokala maskin, bÄde pÄ fysisk och virtuell maskin i datacentret, samt i molnet.

Portabiliteten och den lÀtta naturen hos Docker gör det enkelt att dynamiskt hantera din belastning. Du kan anvÀnda Docker för att distribuera eller stÀnga av din applikation eller tjÀnster. Docker ger en hastighet som gör detta möjligt nÀstan i realtid.

Höga belastningar och fler arbetsbelastningar

Docker Àr lÀttviktig och snabb. Den erbjuder en hÄllbar, kostnadseffektiv alternativ till virtuell maskin baserad pÄ hypervisor. Den Àr sÀrskilt anvÀndbar under hög belastning, exempelvis vid skapande av ett eget moln eller plattform som tjÀnst (platform-as-service). Men den Àr ocksÄ anvÀndbar för smÄ och medelstora applikationer nÀr du vill fÄ mer ut av dina befintliga resurser.

Huvudkomponenter i Docker

Docker bestÄr av tvÄ huvudkomponenter:

  • Docker: en plattform för virtualisering med öppen kod;
  • Docker Hub: vĂ„r plattform som tjĂ€nst för distribution och hantering av Docker-containrar.

Obs! Docker distribueras under Apache 2.0-licensen.

Docker-arkitektur

Docker anvÀnder en klient-server-arkitektur. Docker-klienten kommunicerar med Docker-demonen, som tar hand om tyngden av att skapa, köra och distribuera dina containrar. BÄde klient och server kan köras pÄ samma system, och du kan ansluta klienten till en extern Docker-demon. Klienten och servern kommunicerar via en socket eller via ett RESTful API.

FörstÄ Docker

Docker-demon

Som visas i diagrammet körs demon pÄ vÀrdmaskinen. AnvÀndaren interagerar inte direkt med servern utan anvÀnder klienten för detta.

Docker-klient

Docker-klienten, programmet Docker, Àr huvudgrÀnssnittet till Docker. Den fÄr kommandon frÄn anvÀndaren och interagerar med Docker-demonen.

Inuti Docker

För att förstÄ vad Docker bestÄr av, mÄste du veta om tre komponenter:

  • bilder (images)
  • register (registries)
  • containrar

Avbilder

En Docker-avbildning Àr en read-only mall. Till exempel kan en avbildning innehÄlla operativsystemet Ubuntu med Apache och en applikation pÄ den. Avbildningar anvÀnds för att skapa containrar. Docker gör det enkelt att skapa nya avbildningar, uppdatera befintliga, eller sÄ kan du ladda ner avbildningar skapade av andra. Avbildningar Àr en komponent av Docker.

Register

Docker-registret lagrar avbildningar. Det finns offentliga och privata register dÀr du kan ladda ner eller ladda upp avbildningar. Det offentliga Docker-registret Àr Docker Hub. HÀr lagras en enorm samling avbildningar. Som du vet kan avbildningar skapas av dig, eller sÄ kan du anvÀnda avbildningar skapade av andra. Register Àr en komponent av distribution.

Containrar

Containrar liknar kataloger. I containrar finns allt som behövs för att köra en applikation. Varje container skapas frÄn en avbildning. Containrar kan skapas, startas, stoppas, flyttas eller tas bort. Varje container Àr isolerad och Àr en sÀker plattform för applikationen. Containrar Àr en komponent av driften.

Hur fungerar dÄ Docker?

Vi vet sÄ hÀr lÄngt att:

  • vi kan skapa avbildningar som innehĂ„ller vĂ„ra applikationer;
  • vi kan skapa containrar frĂ„n avbildningar för att köra applikationer;
  • vi kan distribuera avbildningar genom Docker Hub eller ett annat avbildningsregister.

LÄt oss se hur dessa komponenter sammanfaller.

Hur fungerar en avbildning?

Vi vet redan att en avbildning Àr en read-only mall frÄn vilken en container skapas. Varje avbildning bestÄr av en uppsÀttning lager. Docker anvÀnder union file system för att kombinera dessa lager till en avbildning. Union file system tillÄter filer och kataloger frÄn olika filsystem (olika grenar) att transparent överlagras och skapa ett enhetligt filsystem.

En av anledningarna till att Docker Àr lÀttviktig Àr anvÀndningen av sÄdana lager. NÀr du Àndrar en avbildning, till exempel uppdaterar en applikation, skapas ett nytt lager. SÄ, utan att ersÀtta hela avbildningen eller bygga om den, som du kanske behöver göra med en virtuell maskin, lÀggs endast lagret till eller uppdateras. Och du behöver inte distribuera hela den nya avbildningen, endast uppdateringen delas ut, vilket gör att avbildningar kan distribueras enklare och snabbare.

I grunden för varje bild finns en basbild. Till exempel, ubuntu, basbilden för Ubuntu, eller fedora, basbilden för Fedora-distributionen. Du kan ocksÄ anvÀnda bilder som bas för att skapa nya bilder. Till exempel, om du har en bild av apache, kan du anvÀnda den som basbild för dina webbapplikationer.

Notera! Docker hÀmtar vanligtvis bilder frÄn Docker Hub-registret.

Dockerbilder kan skapas frÄn dessa basbilder, stegen för att skapa dessa bilder kallar vi instruktioner. Varje instruktion skapar en ny bild eller nivÄ. Instruktionerna kommer att vara följande ÄtgÀrder:

  • körning av kommando
  • tillĂ€gg av fil eller katalog
  • skapa en omgivningsvariabel
  • ange vad som ska köras nĂ€r den hĂ€r bildens container startas

Dessa instruktioner lagras i en fil Dockerfile. Docker lÀser detta Dockerfile, nÀr du bygger bilden, utför dessa instruktioner, och returnerar den slutliga bilden.

Hur fungerar docker-registret?

Registret Àr ett förrÄd av dockerbilder. Efter att ha skapat en bild kan du publicera den pÄ det offentliga registret Docker Hub eller pÄ ditt eget personliga register.

Med hjÀlp av dockerklienten kan du söka efter redan publicerade bilder och ladda ner dem till din maskin med docker för att skapa containrar.

Docker Hub erbjuder offentliga och privata förrÄd av bilder. Sökning och nedladdning av bilder frÄn offentliga förrÄd Àr tillgÀnglig för alla. InnehÄllet i privata förrÄd syns inte i sökresultaten. Endast du och dina anvÀndare kan hÀmta dessa bilder och skapa containrar frÄn dem.

Hur fungerar en container?

En container bestÄr av ett operativsystem, anvÀndarfiler och metadata. Som vi vet, skapas varje container frÄn en bild. Denna bild talar om för docker vad som finns i containern, vilken process som ska startas nÀr containern startas och annan konfigurationsdata. Dockerbilden Àr skrivskyddad. NÀr docker startar en container, skapar den ett lager för lÀsning/skrivning ovanpÄ bilden (anvÀnder en union filsystem, som nÀmnts tidigare), dÀr en applikation kan köras.

Vad hÀnder nÀr en container startas?

Antingen med hjÀlp av programmet docker, eller genom RESTful API, sÀger dockerklienten till docker-demonen att starta containern.

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

LÄt oss reda ut denna kommando. Klienten startar med kommandot docker, med alternativet run, som anger att en ny container kommer att startas. Minimi krav för att starta containern Àr följande attribut:

  • vilken bild som ska anvĂ€ndas för att skapa containern. I vĂ„rt fall ubuntu
  • kommandot som du vill köra nĂ€r containern startas. I vĂ„rt fall /bin/bash

Vad hÀnder egentligen bakom kulisserna nÀr vi kör detta kommando?

Docker gör följande i ordning:

  • laddar ner bild av ubuntu: docker kontrollerar om bilden finns ubuntu pĂ„ den lokala maskinen, och om den inte finns — laddar ner den frĂ„n Docker Hub. Om bilden redan finns, anvĂ€nds den för att skapa containern;
  • skapar containern: nĂ€r bilden har mottagits, anvĂ€nder docker den för att skapa containern;
  • initialiserar filsystemet och monterar read-only nivĂ„n: containern skapas i filsystemet och read-only nivĂ„n lĂ€ggs till bilden;
  • initialiserar nĂ€tverket/bro: skapar ett nĂ€tverksgrĂ€nssnitt som tillĂ„ter docker att kommunicera med vĂ€rdmaskinen;
  • SĂ€tter IP-adress: hittar och anger adress;
  • Startar angiven process: startar din applikation;
  • Behandlar och ger utdata frĂ„n din applikation: ansluter och loggar standardin, ut och felström frĂ„n din applikation sĂ„ att du kan övervaka hur din applikation fungerar.

Nu har du en fungerande container. Du kan hantera din container, interagera med din applikation. NĂ€r du vill stoppa applikationen, ta bort containern.

AnvÀnda teknologier

Docker Àr skrivet i Go och anvÀnder vissa funktioner frÄn Linux-kÀrnan för att implementera ovanstÄende funktionalitet.

Namnrymder (namespaces)

Docker anvÀnder teknologin namnrymder för att organisera isolerade arbetsytor, som vi kallar containrar. NÀr vi startar en container skapar docker en uppsÀttning namnrymder för den containern.

Detta skapar en isolerad nivÄ, varje aspekt av containern körs i sin egen namnrymd och har inte tillgÄng till det externa systemet.

Lista över nÄgra namnrymder som docker anvÀnder:

  • pid: för isolering av processen;
  • net: för att hantera nĂ€tverksgrĂ€nssnitt;
  • ipc: för att hantera IPC-resurser. (ICP: InterProccess Communication);
  • mnt: för att hantera monteringspunkter;
  • utc: för isolering av kĂ€rnan och kontroll av versionsgenerering (UTC: Unix time-sharing system).

Kontrollgrupper (Control groups)

Docker anvÀnder ocksÄ teknologin cgroups eller kontrollgrupper. Nyckeln till att köra applikationen i isolering Àr att endast tillhandahÄlla applikationen de resurser som du vill ge. Detta sÀkerstÀller att containrarna Àr bra grannar. Kontrollgrupper möjliggör fördelning av tillgÀngliga hÄrdvaruresurser och kan om sÄ behövs stÀlla in grÀnser och begrÀnsningar. Till exempel, begrÀnsa den möjliga mÀngden minne för en container.

Union File System

Union File System eller UnionFS Àr ett filsystem som fungerar genom att skapa lager, vilket gör det mycket lÀtt och snabbt. Docker anvÀnder UnionFS för att skapa block som en container byggs av. Docker kan anvÀnda flera varianter av UnionFS inklusive: AUFS, btrfs, vfs och DeviceMapper.

Containerformat

Docker kombinerar dessa komponenter i ett omslag som vi kallar containerformat. Formatet som anvÀnds som standard kallas libcontainer. Docker stöder ocksÄ det traditionella containerformatet i Linux via LXC. I framtiden kan Docker komma att stödja andra containerformat. Till exempel, genom att integrera med BSD Jails eller Solaris Zones.

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster