En nybegynnerguide til Docker Compose

En nybegynnerguide til Docker Compose
Docker Compose er et av de mest nyttige verktøyene for programvareutviklere og systemadministratorer. Mange jobber krever noen med kunnskap om denne teknologien, så Docker og Docker Compose er varme på DevOps -rommet. Uten tvil vil det å vite hvordan du bruker disse teknologiene til gode IT -karrieren din.

Hvis du er en nybegynner til Docker -komponering, men har litt kunnskap om Docker, er denne artikkelen noe for deg. Du får lære om:

  • Hva er Docker Compose?
  • Populære sammenligninger
  • Docker komponerer vs Kubernetes
  • Docker Compose vs Docker Swarm
  • Installere Docker Compose
  • Docker-komponering.YML -fil
  • Docker-Compose-kommandoer

Før du dykker ned i de saftige delene av denne artikkelen, bør litt bakgrunn på teknologien være kjempebra.

Containerisering har blitt en sentral del av programvareinfrastruktur, og dette gjelder store, mellomstore eller småskala prosjekter. Mens containere ikke er nye, har Docker gjort dem populære. Med containere blir avhengighetsproblemer en saga blott. Containere spiller også en enorm rolle i å gjøre mikro-tjenestene arkitektur veldig effektiv. Programvare er laget av mindre tjenester, så det er enkelt å ha disse tjenestene i containere, og de kommuniserer.

Problemet med å gjøre dette, er at det vil være så mange containere som kjører. Slik at det blir sammensatt å administrere dem. Dette skaper et behov for et verktøy hjelper med å kjøre flere containere, som Docker Compose gjør. På slutten av artikkelen vil du forstå grunnleggende docker -komponeringskonsepter og kunne bruke den også.

Hva er Docker Compose?

Uten all kompleksiteten er Docker Compose et verktøy som lar deg administrere flere Docker -containere. Husk mikro-tjenester? Konseptet med å dele opp en webapplikasjon i forskjellige tjenester? Vel, disse tjenestene vil kjøre i individuelle containere som må administreres.

Se for deg at en webapplikasjon har noen av disse tjenestene:

  • Melde deg på
  • Logg inn
  • tilbakestille passord
  • Historie
  • Diagram

Etter en mikroservice-lignende arkitektur, vil disse tjenestene bli delt og kjøre i separate containere. Docker Compose gjør det enkelt å administrere alle disse containerne, i stedet for å administrere dem individuelt. Det er viktig å merke seg at Docker Compose ikke eksplisitt bygger Docker -bilder. Jobben med å bygge bilder gjøres av Docker gjennom Dockerfile.

Populære sammenligninger

Det er vanlig å ha mange løsninger på et problem. Docker Compose løser dette problemet med å håndtere flere containere. Som et resultat er det ofte sammenligninger med andre løsninger. Du må merke deg at de fleste av disse sammenligningene er de gale. Selv om de ofte ikke er gyldige, er det best at du lærer om dem, da det hjelper deg å forstå Docker -komponering bedre.

De to sammenligningene som skal diskuteres er:

  • Docker komponerer vs Kubernetes
  • Docker Compose vs Docker Swarm

Docker komponerer vs Kubernetes

Kubernetes blir ofte sammenlignet med Docker -komponering. Men likhetene i begge verktøyene er små, med store ulikheter. Disse teknologiene er ikke på samme nivå eller skala. Derfor er det direkte feil å sammenligne begge verktøyene.

Kubernetes populært kjent som K8s er et open source-verktøy som kan brukes til å automatisere containere (ikke begrenset til Docker). Med K8s kan du distribuere og administrere containere, og sikre at de skaleres med forskjellige belastninger. Kubernetes sikrer at containere er feiltolerante og jobber optimalt ved å få dem til å selve seg selv, noe du ikke får fra Docker-komponering.

Kubernetes er et kraftigere verktøy. Det er mer egnet for å administrere containere for storstilt applikasjoner i produksjonen.

Docker Compose vs Docker Swarm

Docker Compose blir også ofte sammenlignet med Docker Swarm, og det er like galt som Kubernetes -sammenligningen. I stedet skal Docker Swarm være den som blir sammenlignet med Kubernetes.

Docker Swarm er et åpen kildekodeverktøy som lar deg utføre container orkestrering akkurat som du ville Kubernetes. Begge har fordeler og ulemper, men det er ikke temaet for diskusjon. Du vil gjøre det bra å vite at begge er like, og at det heller ikke er et alternativ til Docker -komponering.

Installere Docker Compose

Docker Compose er et offisielt Docker -verktøy, men det følger ikke med Docker -installasjonen. Så du må installere den som en egen pakke. Installasjonsprosessen til Docker -komponering for Windows og Mac er tilgjengelig på det offisielle nettstedet.

For å installere Docker -komponering på Ubuntu, kan du bruke følgende kommando:

sudo apt-get install docker-compose

For å installere Docker -komponering på andre Linux -distros, kan du bruke Curl. Bare kjør følgende kommandoer:

sudo curl -l
https: // github.com/docker/kompose/utgivelser/nedlasting/1.18.0/Docker-Compose-'uname
-S ' -' Uname -m '-o/usr/local/bin/docker -compose

Deretter:

sudo chmod +x/usr/local/bin/docker-compose

Den første kommandoen laster ned den nyeste versjonen av Docker komponerer til katalogen dedikert for pakker. Den andre setter filtillatelsene, og gjør den kjørbar.

Docker-komponering.YML -fil

Det vil ikke være veldig galt å si at en Docker -komponeringsfil er å docker komponere, hva en dockerfile er å docker. Inne i Docker -komponeringsfilen ligger alle instruksjonene som Docker Compose følger når du administrerer containerne. Her definerer du tjenestene som ender opp med å være containere. Du definerer også nettverkene og volumene som tjenestene er avhengige av.

Docker Compose-filen bruker YAML-syntaks, og du må lagre som Docker-Compose.yml. Du kan ha tjenester for backend, frontend, database og meldingskøer i en webapp. Disse tjenestene vil trenge spesifikke avhengigheter. Avhengigheter som nettverk, porter, lagring for optimal drift. Alt som trengs for hele applikasjonen vil bli definert i Docker -komponeringsfilen.

Du trenger en grunnleggende forståelse av YAML -syntaksen for å skrive komponeringsfilen din. Hvis du ikke er kjent med det, bør det ta mindre enn en time å forstå. Det vil være mange sammenkoblinger eller direktiver i nøkkelverdien i filen din i filen din. De øverste nivåene er:

  • Versjon
  • Tjenester
  • Nettverk
  • Volum

Imidlertid vil bare versjonen og tjenestene bli diskutert, da du kan definere de to andre i tjenestedirektivet.

Versjon

Når du skriver filen din, vil du definere versjonen først. Som i skrivende stund har Docker Compose bare versjoner 1, 2 og 3. Det er ikke overraskende at det er den anbefalte versjonen å bruke, da den har visse forskjeller fra de eldre versjonene.

Du kan spesifisere versjonen som skal brukes for Docker -komponering i filen som vist nedenfor:

  • Versjon: “3”
  • Versjon: “2.4 ”
  • Versjon: “1.0 ”

Tjenester

Tjenestetasten er uten tvil den viktigste tasten i en Docker -komponeringsfil. Her spesifiserer du containerne du vil opprette. Det er mange alternativer og mange kombinasjoner for å konfigurere containere i denne delen av filen. Dette er noen alternativer du kan definere under Services -nøkkelen:

  • Bilde
  • Container_name
  • Omstart
  • Kommer an på
  • Miljø
  • Porter
  • Volum
  • Nettverk
  • Inngangspunkt

I resten av denne delen lærer du hvordan hvert av disse alternativene påvirker containerne.

Bilde

Dette alternativet definerer hvilket bilde som tjeneste bruker. Den bruker samme stevne som du bruker når du henter et bilde fra Dockerhub i en Dockerfile. Her er et eksempel:

Bilde: Postgres: Siste

Det er imidlertid ingen begrensninger for å bruke DockerHub -filer alene. Du kan også bygge bilder fra maskinen din gjennom Docker -komponeringsfilen din ved å bruke en DockerFile. Du kan bruke "bygg", "kontekst" og "dockerfile" -direktiver for å gjøre dette.

Her er et eksempel:

bygge:
kontekst: .
DockerFile: Dockerfile

“Kontekst” skal inneholde banen til katalogen med Dockerfile. Da inneholder "dockerfile" navnet på dockerfilen som skal brukes. Det er konvensjonelt å alltid navngi dockerfilene dine som "dockerfile", men dette gir en mulighet til å bruke noe annet. Du må merke deg at dette ikke er den eneste måten å bruke et bilde gjennom en Dockerfile.

Container_name

Docker tildeler tilfeldige navn til containere. Men du kan ønske å ha tilpassede navn på containerne. Med "Container_name" -tasten kan du oppgi spesifikke navn til containere, i stedet for Dockers tilfeldig genererte navn.

Her er et eksempel:

Container_name: Linuxhint-app

Imidlertid er det en ting du bør være forsiktig med: ikke gi samme navn til flere tjenester. Containernavn må være unike; Å gjøre det vil føre til at tjenestene mislykkes.

Omstart

Programvareinfrastruktur er dømt til å mislykkes. Med kunnskap om dette er det lettere å planlegge å komme seg etter denne feilen. Det er mange grunner til at en container mislykkes, så omstart -tasten ber beholderen våkne eller ikke. Du har følgende alternativer, nei, alltid, på failure og med mindre-stoppet. Disse alternativene innebærer at en beholder aldri vil starte på nytt, vil alltid starte på nytt, bare starte på nytt ved feil eller bare når den stoppes.

Her er et eksempel:

Start på nytt: Alltid

Kommer an på

Tjenester kjøres isolert. Men praktisk talt kan ikke tjenester gjøre mye isolert. Det må være avhengig av andre tjenester. For eksempel vil backend -tjenesten til en webapp avhenge av databaser, hurtigbufringstjenester osv. På "Depends_on" -tasten kan du legge til avhengighetene.

Her er et eksempel:

kommer an på:
- db

Å gjøre dette betyr at Docker Compose vil starte disse tjenestene før den nåværende. Det sikrer imidlertid ikke at disse tjenestene er klare til bruk. Den eneste garantien er at containerne starter.

Miljø

Programmer avhenger av visse variabler. For sikkerhet og brukervennlighet trekker du ut dem fra koden og setter dem opp som miljøvariabler. Eksempler på slike variabler er API -nøkler, passord og så videre. Disse er vanlige i webapplikasjoner. Merk at denne nøkkelen bare fungerer hvis det ikke er noe "bygg" -direktiv i den tjenesten. Opprett derfor bildet på forhånd.

Se på dette:

miljø:
Api-Key: 'The-Api-Key'
Konfigurasjon: 'Utvikling'
Session_secret: 'The-Secret'

Hvis du har tenkt å bruke "Build" -direktivet uansett, må du definere miljøvariablene i et "args" -direktiv. Direktivet "args" er en underdirektør for "build".

Her er et eksempel:

bygge:
kontekst: .
args:
Api-Key: 'The-Api-Key'
Konfigurasjon: 'Utvikling'
Session_secret: 'The-Secret'

Porter

Ingen container fungerer isolert til tross for at de løper separat fra de andre. For å gi en lenke for å kommunisere med "omverdenen", må du kartlegge porter. Du kartlegger Docker -beholderens port til den faktiske vertsporten. Fra Docker kan du ha kommet over "-p" -argumentet som brukes til å kartlegge porter. Portdirektivet fungerer som ligner på "-p" -argumentet.

Porter:
- "5000: 8000"

Volum

Docker -containere har ingen midler til å lagre data vedvarende, så de mister data når de starter på nytt. Med volum kan du jobbe rundt dette. Volum gjør det mulig å lage en vedvarende datalagring. Det gjør dette ved å montere en katalog fra Docker -verten i Docker Container's Directory. Du kan også sette opp volumer som tjenester på toppnivå.

Her er et eksempel:

Volum:
- Host-Dir:/Test/Directory

Det er mange alternativer tilgjengelig når du konfigurerer volumer, du kan sjekke dem ut.

Nettverk

Nettverk kan også opprettes i tjenester. Med nettverkstasten kan du konfigurere nettverket for individuelle tjenester. Her kan du konfigurere driveren nettverket bruker, hvis det tillater IPv6 osv. Du kan også konfigurere nettverk som tjenester, akkurat som volum.

Her er et eksempel:

nettverk:
- misligholde

Det er mange alternativer når du konfigurerer nettverk, kan du sjekke dem ut.

Inngangspunkt

Når du starter en beholder, må du ofte kjøre visse kommandoer. For eksempel, hvis tjenesten er en webapplikasjon, må du starte serveren. EntryPoint -tasten lar deg gjøre dette. EntryPoint fungerer som EntryPoint i DockerFile. Den eneste forskjellen i dette tilfellet er at uansett hva du definerer her overstyrer inngangspunktkonfigurasjonene i Dockerfile.inngangspunkt: kolbe run

Her er et eksempel:

inngangspunkt: kolbe run

Docker komponerer kommandoer

Etter å ha opprettet en Docker-Compose-fil, må du kjøre visse kommandoer for å bli komponert for å fungere. I denne delen lærer du om noen store Docker -komponeringskommandoer. De er:

  • Docker-Compose Up
  • Docker-Compose Down
  • Docker-Compose Start
  • Docker-Compose Stop
  • Docker-Compose Pause
  • Docker-Compose Unpause
  • Docker-Compose Ps

Docker-Compose Up

Denne Docker-Compose-kommandoen hjelper med å bygge bildet, og oppretter og starter Docker-containere. Containerne er fra tjenestene som er spesifisert i komponeringsfilen. Hvis containerne allerede kjører og du kjører Docker-Compose Up, gjenskaper den beholderen. Kommandoen er:

Docker-Compose Up

Docker-Compose Start

Denne Docker-Compose-kommandoen starter Docker-containere, men den bygger ikke bilder eller lager containere. Så det starter bare containere hvis de er opprettet før.

Docker-Compose Stop

Du må ofte stoppe containerne etter å ha opprettet og startet dem opp. Her er her Docker-Compose Stop-kommandoen kommer godt med. Denne kommandoen stopper i utgangspunktet løpstjenestene, men oppsettbeholderne og nettverkene forblir intakte.
Kommandoen er:

Docker-Compose Stop

Docker-Compose Down

Docker-Compose Down-kommandoen stopper også Docker-containere som Stop-kommandoen gjør. Men det går den ekstra milen. Docker-Compose Down, stopper ikke bare containerne, det fjerner dem også. Nettverkene, volumene og faktiske Docker -bilder kan også fjernes hvis du bruker visse argumenter. Kommandoen er:

Docker-Compose Down

Hvis du har tenkt å fjerne volumer, spesifiserer du ved å legge til -volumes. For eksempel:

Docker-Compose Down-Volumes

Hvis du har tenkt å fjerne bilder, spesifiserer du ved å legge til -rmi alle eller -RMI lokal. For eksempel:

Docker-Compose Down-RMI ALL
Docker-Compose Down-RMI Lokal

Hvor alle forårsaker Docker -komponering for å fjerne alle bilder, og lokal forårsaker Docker -komponering for bare å fjerne bilder uten en tilpasset tagg satt av "image" -feltet.

Docker-Compose Pause

Det er scenarier der du må suspendere en container, uten å drepe eller slette den. Du kan oppnå dette med Docker-Compose Pause-kommandoen. Den tar en pause på den containerens aktiviteter, slik at du kan gjenoppta dem når du vil. Kommandoen er:

Docker-Compose Pause

Docker-Compose Unpause

Docker-Compose Unpause er det motsatte av Docker-Compose Pause-kommandoen. Du kan bruke den til å gjenoppta suspenderte prosesser som et resultat av å bruke Docker-Compose Pause. Kommandoen er:

Docker-Compose Unpause

Docker-Compose Ps

Docker-Compose PS viser alle containerne som er opprettet fra tjenestene i Docker-Compose-filen. Det ligner på Docker Ps Hvilke som viser alle containere som kjører på Docker -verten. Imidlertid er Docker-Compose PS spesifikk for containerne fra Docker Compose-filen. Kommandoen er:

Docker-Compose Ps

Å bringe det hele sammen

Nå som du har sett noen av de viktigste konseptene bak en Docker -komponeringsfil, la oss bringe det hele sammen. Nedenfor er en eksempler på Docker-Compose-filen for en Python Django-webapplikasjon. Du vil se en oversikt over hver linje i denne filen og se hva de gjør.

Versjon: '3'
tjenester:
DB:
Bilde: Postgres
Web:
bygge: .
Kommando: Python Administrer.py runserver 0.0.0.0: 8000
Volum:
- .:/kode
Porter:
- "8000: 8000"
kommer an på:
- db

Novellen er at med denne Docker-Compose-filen opprettes en PostgreSQL-database og en Django-server startes.

Den lange historien er:

  1. Denne filen bruker versjonen 3 av Docker-Compose.
  2. Det lager to tjenester. DB- og webtjenestene.
  3. DB -tjenesten bruker det offisielle Docker Postgres -bildet.
  4. Webtjenesten bygger sitt eget bilde fra den gjeldende katalogen. Siden det ikke definerer kontekst- og dockerfiletastene, forventes dockerfile å bli kalt "dockerfile" av stevne.
  5. Kommandoen som kjøres etter at beholderen starter er definert.
  6. Volumet og portene er definert. Begge bruker vertskonvensjonen: containerkartlegging.
  7. For volum, den gjeldende katalogen “.”Er kartlagt til“/kode ”-katalogen inne i beholderen. Dette hjelper data i beholderen til å bli vedvarende, så det går ikke tapt hver gang containeren starter.
  8. For port er vertenes port 8000 kartlagt til beholderens port 8000. Merk at webappen kjører på Port 8000. Derfor kan du få tilgang til webappen på verten gjennom den porten.
  9. Endelig avhenger webtjenesten av DB -tjenesten. Derfor vil webtjenesten bare starte når DB -beholderen har startet.
  10. Mer om Dockerfile for Django -applikasjonen og Docker Compose -filen kan fås fra dokumentasjonen.

Konklusjon

Du trenger ikke å være ekspert med Docker for å bruke Docker Compose. Som nybegynner som ikke har tenkt å mestre dette verktøyet, er det greit å lære hva du trenger alene. I denne artikkelen har du lært det grunnleggende om Docker Compose. Nå forstår du hvorfor Docker Compose er nødvendig, feil sammenligning, hvordan du konfigurerer en Docker Compose Config -fil og kommandoene også. Det er spennende å vite disse tingene, men den virkelige gleden kommer fra å sette dem til å øve. Det er på tide å komme på jobb.