Programmering

Docker-tutorial: Kom godt i gang med Docker

Containere giver en let måde at tage applikationsarbejdsbelastninger bærbare, som en virtuel maskine, men uden omkostninger og bulk, der typisk er forbundet med virtuelle computere. Med containere kan apps og tjenester pakkes op og flyttes frit mellem fysiske, virtuelle eller sky-miljøer.

Docker, et containeroprettelses- og styringssystem oprettet af Docker Inc., tager den oprindelige containerfunktionalitet, der findes i Linux, og gør den tilgængelig for slutbrugere via en kommandolinjegrænseflade og et sæt API'er.

Mange almindelige applikationskomponenter er nu tilgængelige som færdigpakkede Docker-containere, hvilket gør det let at installere stakke software som afkoblede komponenter (mikroservicemodellen). Når det er sagt, hjælper det at vide, hvordan stykkerne passer sammen indefra og ud.

Således installerer jeg i denne vejledning Apache-webserveren i en Docker-container og undersøger, hvordan Docker fungerer undervejs.

Installer Docker

Jeg bruger Ubuntu som grundlaget for Docker-buildet. Ubuntu er ikke kun en populær og udbredt distribution, men Docker-teamet bruger selv Ubuntu til udvikling, og Docker understøttes på Ubuntu Server fra version 12.04 og nyere. For enkelheds skyld starter jeg med instruktioner, når jeg bruger en ny installation af Ubuntu 16.04.

Forbered Ubuntu Linux til Docker

Den første ting at gøre er at få den rigtige version af kernen og dens overskrifter:

$ sudo apt-get install - installation-anbefaler linux-generic-hwe-16.04

Denne proces kan tage noget tid og kræver en genstart, når du er færdig:

$ sudo genstart

Det kan også være nødvendigt at opgradere andre pakker i systemet bagefter:

$ sudo apt-get opdatering

$ sudo apt-get opgradering

Installer Docker på Ubuntu

Installation af Docker på CentOS-, Fedora-, Debian-, Ubuntu- og Raspbian Linux-distributioner er gjort let ved hjælp af et shell-script, som du kan downloade fra //get.docker.com/. Til det har du brug for krølle kommando. For at få den nyeste version af krølle:

sudo apt-get install krølle

Når du har gjort det krølle installeret, hent installationsscriptet og indstillet det til at køre:

krølle -s //get.docker.com | sudo sh

Når scriptet er færdig med installationen, ser du en note som følgende med installationsoplysninger om versionen af ​​Docker, både klienten og serverkomponenterne:

Bemærk detaljerne i bunden om at tilføje ikke-root-brugere til Docker. Det er praktisk at gøre dette, men hvis du gør det, anbefales det at oprette en ikke-root-bruger specifikt til at arbejde med Docker og til ingen anden funktion. Af hensyn til denne vejledning holder jeg dog med at bruge sudo at køre Docker via en ikke-privilegeret bruger.

Nu kan du teste en grundlæggende Docker-container:

$ sudo docker kør -i -t ubuntu / bin / bash

Denne kommando downloader det generiske Docker Ubuntu-billede (i henhold til ubuntu parameter) og kør / bin / bash kommando i den container. Det -jeg og -t valgmuligheder åbner henholdsvis standardindgang og en pseudo TTY.

Hvis det lykkes, skal du se værtsnavnet i kommandoprompten skifte til noget lignende root @ 216b04387924: / #, der angiver ID-nummeret (og værtsnavnet) på din nye kørende container. For at forlade, skriv Afslut, samme som du ville forlade enhver shell-session.

Du skal nu have en funktionel Docker-installation på din server. Du kan teste det og få grundlæggende oplysninger ved hjælp af docker info kommando:

$ sudo docker info

Resultatet af docker info kommandoen viser antallet af containere og billeder, blandt andre relevante oplysninger. Bemærk, at det kan være ret langt; dette eksempel viser kun den sidste af to sider.

En sidste ændring, du bliver nødt til at foretage, hvis du kører Ubuntu's UFW-firewall, er at give mulighed for videresendelse af pakker. Du kan kontrollere, om UFW kører ved at indtaste følgende:

$ sudo ufw status

Hvis kommandoen returnerer status som inaktiv, kan du springe dette næste trin over. Ellers skal du redigere UFW-konfigurationsfilen / etc / default / ufw og ændre politikken til videresendelse fra DRÅBE til ACCEPTERE. For at gøre dette ved hjælp af Nano-editoren skal du indtaste følgende:

$ sudo nano / etc / default / ufw

Og skift denne linje:

DEFAULT_FORWARD_POLICY = "DROP"

Til dette:

DEFAULT_FORWARD_POLICY = "ACCEPT"

Gem filen, og kør derefter:

$ sudo ufw genindlæs

Arbejd med Docker-billeder og Docker-containere

Docker-containere er meget mere effektive end virtuelle maskiner. Når en container ikke kører en proces, er den fuldstændig i dvale. Du kan måske tænke på Docker-containere som selvstændige processer - når de ikke kører aktivt, forbruger de ingen ressourcer bortset fra lagerplads.

Du kan se aktive og inaktive containere ved hjælp af docker ps kommando:

# Denne kommando viser ALLE containere på systemet

$ sudo docker ps -a

# Dette viser kun KØRENDE containere

$ sudo docker ps

Du kan se alle tilgængelige kommandoer ved blot at indtaste docker. For en opdateret gennemgang af alle kommandoer, deres muligheder og fulde beskrivelser, se den officielle kommandolinjedokumentation.

Da jeg løb docker-kørsel tidligere kommandoen automatisk trukket et Ubuntu-containerbillede fra Docker Hub-registertjenesten. Det meste af tiden vil du dog trække containerbilleder ind i den lokale cache på forhånd i stedet for at gøre det efter behov. Brug dette for at gøre det docker pull, sådan her:

$ sudo docker pull ubuntu

En komplet, søgbar liste over billeder og arkiver er tilgængelig på Docker Hub.

Docker-billeder kontra containere

Noget, der er værd at stave på dette tidspunkt, er, hvordan billeder, containere og pull / push-processen fungerer sammen.

Docker-containere er bygget fra billeder, som i det væsentlige er skaller af operativsystemer, der indeholder de nødvendige binære filer og biblioteker til at køre applikationer i en container.

Billeder er mærket medtags, i det væsentlige metadata, der gør det let at gemme og trække forskellige versioner af et billede. Naturligvis kan et enkelt billede associeres med flere tags: ubuntu: 16.04, ubuntu: xenial-20171201, ubuntu: xenial, ubuntu: nyeste.

Da jeg skrev docker pull ubuntu tidligere trak jeg standard Ubuntu-billedet fra Ubuntu repository, som er billedet tagget seneste. Med andre ord kommandoen docker pull ubuntu svarer til docker pull ubuntu: nyeste og (på tidspunktet for denne skrivning) docker pull ubuntu: xenial

Bemærk, at hvis jeg havde skrevet:

$ sudo docker pull-en ubuntu

Jeg ville have pullet alle billeder ( -en flag) i Ubuntu-arkivet i mit lokale system. Det meste af tiden vil du dog enten have standardbilledet eller en bestemt version. Hvis du f.eks. Vil have billedet til Ubuntu Saucy Salamander, skal du bruge det docker pull -a ubuntu: saucy at hente billedet med det bestemte mærke fra den repo.

Den samme logik bag repos og tags gælder for andre manipulationer af billeder. Hvis du trak saucy som i ovenstående eksempel, vil du køre det ved at skrive sudo docker køre -i -t ubuntu: saucy / bin / bash. Hvis du skriversudo docker image rm ubuntu, for at fjerne ubuntu billede, fjerner det kun det taggede billede seneste . For at fjerne andre billeder end standard, såsom Ubuntu Saucy, skal du medtage det relevante tag:

sudo docker image rm ubuntu: saucy

Docker-image og container-workflow

Tilbage til arbejde med billeder. Når du har trukket et billede, uanset hvad det måtte være, skal du oprette en live container fra det (som jeg har vist) ved at udføre docker-kørsel kommando. Når du har tilføjet software og ændret indstillinger inde i containeren, kan du oprette et nyt billede ud fra disse ændringer ved hjælp af docker begå kommando.

Det er vigtigt at bemærke, at Docker kun gemmer deltas eller ændringer i billeder, der er bygget fra andre billeder. Når du bygger dine egne billeder, gemmes kun de ændringer, du foretager i basisbilledet, i det nye billede, som linker tilbage til basisbilledet for alle dets afhængigheder. Således kan du oprette billeder, der har en virtuel størrelse på 266MB, men kun tager et par megabyte på disken på grund af denne effektivitet.

Fuldt konfigurerede containere kan derefter skubbes op til et centralt lager, der skal bruges andre steder i organisationen eller endda deles offentligt. På denne måde kan en applikationsudvikler udgive en offentlig container til en app, eller du kan oprette private arkiver til at gemme alle containere, der bruges internt af din organisation.

Opret et nyt Docker-billede fra en container

Nu hvor du har en bedre forståelse af, hvordan billeder og containere fungerer, skal vi oprette en Apache-webservercontainer og gøre den permanent.

Start med en ny Docker-container

Først skal du bygge en ny container. Der er et par måder at gøre dette på, men fordi du har et par kommandoer at køre, skal du starte en rodskal i en ny container:

$ sudo docker kør -i -t --navn apache_web ubuntu / bin / bash

Dette opretter en ny container med et unikt ID og navnet apache_web. Det giver dig også en rodskal, fordi du har angivet / bin / bash som kommandoen til at køre. Installer nu Apache-webserveren ved hjælp af apt-get:

root @ d7c8f02c3c8c: / # apt-get opdatering

root @ d7c8f02c3c8c: / # apt-get installer apache2

Bemærk, at du ikke behøver at bruge sudo, fordi du kører som rod inde i containeren. Bemærk, at du gør har brug for at løbe apt-get opdatering, fordi igen pakkelisten inde i containeren er ikke den samme som den uden for den.

Det normale apt-get output vises, og Apache2-pakken er installeret i din nye container. Når installationen er afsluttet, skal du starte Apache, installere krølle og teste installationen, alt sammen fra din container:

root @ d7c8f02c3c8c: / # service apache2 start

root @ d7c8f02c3c8c: / # apt-get install krølle

root @ d7c8f02c3c8c: / # krølle // localhost

Efter den sidste kommando skal du se den rå HTML på standard-Apache-siden vist i konsollen. Dette betyder, at vores Apache-server er installeret og kører i din container.

Hvis du gjorde dette i et produktionsmiljø, ville du derefter konfigurere Apache til dine krav og installere en applikation, som den skal tjene. Docker letd-mapper uden for en container kortlægges til stier inde i den, så en tilgang er at gemme din webapp i et bibliotek på værten og gøre den synlig for containeren gennem en kortlægning.

Opret et startscript til en Docker-container

Husk, at en Docker-container kun kører, så længe dens proces eller processer er aktive. Så hvis den proces, du starter, når du kører en container første gang, som en systemdæmon, stopper Docker containeren. Derfor er du nødt til at køre Apache i forgrunden, når containeren starter, så beholderen ikke går ud, så snart den fyres op.

Opret et script, startapache.sh, i / usr / local / sbin:

# Du skal muligvis først installere Nano inde i containeren

root @ d7c8f02c3c8c: / # apt-get install nano

root @ d7c8f02c3c8c: / # nano /usr/local/sbin/startapache.sh

I filen startapache.sh skal du tilføje disse linjer:

#! / bin / bash

. / etc / apache2 / envvars

/ usr / sbin / apache2 -D FORGRUND

Skriv ændringerne, og gem filen. Gør det derefter eksekverbart:

root @ d7c8f02c3c8c: / # chmod + x /usr/local/sbin/startapache.sh

Alt dette lille script gør er at bringe de relevante miljøvariabler til Apache ind og starte Apache-processen i forgrunden.

Du er færdig med at ændre indholdet af containeren, så du kan forlade containeren ved at skrive Afslut. Når du forlader containeren, stopper containeren.

Forpligt containeren til at oprette et nyt Docker-billede

Nu skal du begå beholderen for at gemme de ændringer, du har foretaget:

$ sudo docker begår apache_web lokalt: apache_web

Forpligtelsen gemmer din container som et nyt billede og returnerer et unikt ID. Argumentet lokal: apache_web vil medføre, at forpligtelsen placeres i et lokalt lager, der hedder lokal med et mærke af apache_web.

Du kan se dette ved at køre kommandoen sudo docker billeder:

REPOSITORY TAG BILLED-ID Oprettet VIRTUEL STØRRELSE

lokal apache_web d95238078ab0 4 minutter siden 284,1 MB

Bemærk, at de nøjagtige detaljer om dit billede - billed-id'et, størrelsen på containeren - vil være anderledes end mit eksempel.

Docker-containere er designet til at væreuforanderlig. Hver gang du foretager ændringer i en container, skrives resultaterne til en helt ny container, aldrig til originalen. Hvis du vil bytte Apache ud med f.eks. Nginx, starter du med originalen ubuntu: nyeste container, tilføj Nginx til det, og gem resultaterne som en helt ny container med navnet noget lignende lokal: nginx.

Forstå grundlæggende Docker-netværk

Nu hvor du har vores image, kan du starte vores container og begynde at vise sider. Før du gør det, lad mig dog tage et øjeblik til at forklare, hvordan Docker håndterer netværk.

Når Docker er installeret, opretter det tre virtuelle netværk, der kan bruges af Docker-containere:

  • bro: Dette er det netværk, som containere opretter forbindelse til som standard. Bridge-netværket tillader containere at tale direkte med hinanden, men ikke til værtssystemet.
  • vært: Dette netværk lader containere ses af værten direkte, som om nogen apps i dem kørte som lokale netværkstjenester.
  • ingen: Dette er i det væsentlige et null- eller loopback-netværk. En container, der er forbundet med ingen, kan ikke se andet end sig selv.

Når du vil starte en container og få den til at kommunikere med både andre containere og omverdenen, skal du manuelt kortlægge porte fra denne container til værten. Af hensyn til mit eksempel kan du gøre dette på kommandolinjen, når du starter din nyoprettede container:

$ sudo docker kør -d -p 8080: 80 --navn apache lokalt: apache_web /usr/local/sbin/startapache.sh

Copyright verticalshadows.com 2021