Ekspert containerhåndtering med Docker Compose: Den ultimative guide

  • Docker Compose strømliner administrationen og den orkestrerede implementering af flere containere.
  • Giver dig mulighed for at definere relationer, variabler og volumener mellem tjenester i en enkelt YAML-fil.
  • Letter miljøreplikering og accelererer kontinuerlig integration og fejlfinding.

Docker komponere

Verdenen af ​​applikationsudvikling og -implementering har gennemgået en sand revolution i de senere år med ankomsten af ​​containere. Denne udvikling har gjort det muligt for teams i alle størrelser at glemme klassiske "miljøproblemer" og opnå større fleksibilitet, skalerbarhed og kontrol over deres infrastruktur. I denne sammenhæng skiller to værktøjer sig især ud: Docker og, til koordineret styring af flere containere, Docker komponere. I dag skal vi dykke ned i containerhåndtering med dette værktøj, der ikke kun dækker det grundlæggende, men også detaljerede tips, cases fra det virkelige liv og bedste praksis til fuldt ud at mestre denne teknologi.

Hvis du nogensinde har været frustreret over at skulle justere versioner af dine softwareværktøjer mellem dine lokale udviklings- og produktionsmiljøer, eller hvis du har spildt timer på at installere afhængigheder og fejlfinde inkompatibiliteter, er det følgende af stor interesse for dig. Docker Compose har fuldstændig ændret den måde, komplekse tjenester implementeres på, hvilket giver dig mulighed for at opsætte hele arkitekturer (web, API, databaser, cacher osv.) med en enkelt kommando og sikre, at de opfører sig ens her, der og overalt. Lad os sammen se nærmere på, hvordan vi kan udnytte dets fulde potentiale.

Hvad er Docker Compose, og hvorfor er det så relevant?

Før vi dykker ned i kommandoer og konfigurationer, er det værd at være klar over den rolle, Docker Compose spiller i containerøkosystemet. Docker Compose er et værktøj, der giver os mulighed for at definere, konfigurere og orkestrere sæt af containere ved hjælp af en simpel YAML-fil (normalt kaldet havnearbeider-compose.yml). Dens eksistensgrundlag ligger i behovet for at administrere applikationer, der består af mere end én tjeneste – for eksempel et websted, en database og et cachesystem, der hver især er i en separat container, men arbejder sammen.

Med Komponér, Du kan starte alle tjenesterne i et program med en enkelt kommando., definerer deres relationer, miljøvariabler, persistente volumener, delte netværk og meget mere. Derudover er det uerstatteligt både i udviklingsmiljøer (på grund af den hastighed, hvormed det skaber et replikerbart miljø) og i pipelines for kontinuerlig integration og implementering (CI/CD), såvel som i præproduktion og endda produktion for små og mellemstore projekter.

Docker Composes vigtigste fordele inden for containerhåndtering

Nedenfor lister vi nogle af de vigtigste fordele Hvad Docker Compose bidrager med til containerstyring:

  • Forenklet design og implementeringGiver dig mulighed for at definere infrastruktur som kode, hvilket gør replikering og implementering automatisk og reproducerbar.
  • Koordinering mellem tjenesterAdministrerer afhængigheder, interne netværk og containeropstartsrækkefølge og sikrer, at tjenester interagerer korrekt fra starten.
  • Isolerede og ensartede miljøerAlle teammedlemmer – og endda forskellige maskiner eller miljøer – arbejder under de samme tekniske forhold, hvilket minimerer det mytiske "det virker for mig".
  • Nem skalerbarhedDu kan øge eller mindske antallet af replikaer for enhver tjeneste med én instruktion, hvilket letter belastningstestning eller mere robuste implementeringer.
  • Nem integration i CI/CDDen passer perfekt ind i pipelines for kontinuerlig integration til opbygning, testning og automatisk implementering af miljøer.
  • Administrer hele livscyklussenDet er lige så nemt at styre opstart, nedlukning, genstart, logføring, opdatering og sletning af alle containere i stakken som at køre Compose-kommandoer.

Begrænsninger og udfordringer ved brug af Docker Compose

Som enhver anden teknologi præsenterer Docker Compose også nogle udfordringer og overvejelser:

  • Indledende indlæringskurveDu bør være bekendt med YAML-syntaks, Compose-specifikke kommandoer og koncepterne netværk, volumener og afhængigheder.
  • Unødvendig kompleksitet i simple projekterFor enkeltstående tjenester eller meget simple applikationer kan Docker Compose være overkill.
  • Avancerede indstillinger krævesDefinition af brugerdefinerede netværk, tjenestetilstand eller genstartsstrategier kan kræve en vis ekspertise for at holde vedligeholdelsen enkel.
  • Begrænset skala i store infrastrukturerTil meget store implementeringer anbefales det at bruge orkestratorer som Kubernetes, selvom Compose stadig er perfekt til mange situationer.

Forberedelse af miljøet: Installation af Docker og Docker Compose

Før du begynder at definere tjenester, Det er vigtigt at have Docker og Docker Compose installeret. på din maskine. På nuværende systemer inkluderer Docker Desktop til Windows og Mac allerede Compose som standard. I Linux-miljøer kan du nemt installere det ved hjælp af pakkehåndteringen (følgende eksempel er for Debian/Ubuntu-baserede systemer):

  • Til Docker:
    sudo apt install docker-ce (Ubuntu/Debian) eller sudo dnf install docker-ce (Fedora/CentOS)
  • Til Docker Compose:
    sudo apt install docker-compose

I mange tilfælde er det nok at tilføje din bruger til dockergruppen med sudo brugermod -aG docker $(whoami) at kunne køre kommandoer uden 'sudo'. Husk at genstarte din session for at ændringerne kan træde i kraft.

docker-compose.yml-filen: struktur og primære nøgler

Hjertet i Docker Compose er filen havnearbeider-compose.yml. Dens grundlæggende struktur er meget intuitiv, men giver stor fleksibilitet:

  • udgave: Angiver versionen af ​​Compose-syntaksen. Det placeres normalt som det første element.
  • tjenesterDenne liste viser alle de tjenester (containere), der udgør applikationen, hver med sin specifikke konfiguration (billede, build, porte, volumener, miljøvariabler, kommandoer, afhængigheder osv.).
  • mængderDefinerer persistente volumener, der kan deles eller knyttes til specifikke tjenester, hvilket sikrer, at data overlever genstart eller sletning af containere.
  • netGiver dig mulighed for at definere brugerdefinerede netværk for at isolere og forbinde tjenester sammen.

Minimalt eksempel på struktur:

version: "3.8" tjenester: web: image: nginx:nyeste porte: - "8080:80" db: image: postgres:13 miljø: - POSTGRES_PASSWORD=eksempelvolumener: - pgdata:/var/lib/postgresql/data volumener: pgdata:

Praktisk vejledning: Implementering af en applikation med flere containere

For at illustrere brugen af ​​Docker Compose, lad os gennemgå implementeringscasestudier baseret på de diskuterede eksempler:

Eksempel 1: Web i Python + Redis til optælling

Antag, at du vil lancere et simpelt Python Flask-websted, der viser besøgstælleren, ved hjælp af Redis som lagring i hukommelsen. Du behøver ikke at installere hverken Python eller Redis lokalt – du skal blot definere, hvordan de skal integreres, ved hjælp af Compose. Du kan lære, hvordan du opretter brugerdefinerede billeder til dine tjenester på Opret brugerdefinerede Dockerfile-billeder.

  • app.pyFlask webkode.
  • krav.txtListe over afhængigheder (for eksempel flask og redis-py).
  • DockerfilAngiver, hvordan det brugerdefinerede billede til webtjenesten skal oprettes.
  • havnearbeider-compose.ymlDefinerer både webtjenesten og Redis, deres porte, volumener og variabler.

Dette er et eksempel på filen havnearbeider-compose.yml for denne sag:

version: '3.8' tjenester: web: build: . porte: - "8000:5000" volumener: - .:/code miljø: - FLASK_DEBUG=1 depends_on: - redis redis: image: redis:alpine

Fordele ved denne tilgang? Du kan ændre koden på din maskine og se ændringerne automatisk afspejles på serveren takket være den monterede diskenhed, uden at skulle genopbygge imaget hver gang (ideelt til hurtig udvikling).

Eksempel 2: LAMP-miljø (Apache, PHP, MySQL)

For dem, der udvikler med klassiske teknologier som PHP og MySQL, er Compose også nøglen. En typisk konfigurationsfil kan se sådan ud:

version: "3.8" tjenester: mysql: image: mysql:5.7 miljø: - MYSQL_DATABASE=midb - MYSQL_ROOT_PASSWORD=hemmelig - MYSQL_USER=bruger - MYSQL_PASSWORD=nøgle volumener: - ./data/mysql:/var/lib/mysql porte: - "3306:3306" php: image: php:7-apache volumener: - ./html:/var/www/html porte: - "80:80" depends_on: - mysql

Med dette kan du få hele din hjemmeside oppe at køre på få sekunder, ændre PHP-filer og sikre, at alt fungerer præcis på samme måde som i produktion.

Eksempel 3: Node.js-applikation med PostgreSQL

En udbredt stak i moderne udvikling kombinerer Node.js-tjenester med PostgreSQL-databaser. Compose giver dig også mulighed for at definere datapersistens og de nødvendige miljøvariabler:

version: '3.8' tjenester: app: image: node:14-alpine kommando: sh -c "npm install && npm run dev" volumener: - .:/app porte: - 3000:3000 miljø: - NODE_ENV=udvikling afhænger_af: - db db: image: postgres:13 miljø: - POSTGRES_USER=bruger - POSTGRES_PASSWORD=nøgle - POSTGRES_DB=app porte: - 5432:5432

Når alt er konfigureret, skal du køre docker-compose up og du vil have både API'en og databasen klar til at interagere.

Vigtige Docker Compose-kommandoer

Til den daglige styring af multi-container applikationer tilbyder Docker Compose et meget klart og effektivt sæt af kommandoer:

  • docker-compose upOpbygger og starter alle tjenester, der er defineret i YAML. Med parameteren -d starter dem i baggrunden.
  • docker-compose nedStopper og fjerner alle containere, netværk og volumener, der er knyttet til stakken, med respekt for persistente data, hvis de er defineret.
  • docker-compose build: Opbygger de brugerdefinerede billeder, der er angivet i filen.
  • docker-compose psViser den aktuelle tilstand af stakkens containere.
  • docker-compose logs: Giver dig mulighed for at se logfiler for alle tjenester eller en bestemt en.
  • docker-compose stop/start/genstartAdministrer containernes livscyklus på en detaljeret måde.
  • docker-compose execKører en kommando i en allerede startet container (f.eks. åbning af bash eller kørsel af databasemigreringer).

Avancerede aspekter: netværk, volumener, variabler og servicetilstand

Efterhånden som dit projekt vokser, giver Compose dig mulighed for at finjustere dine indstillinger:

Brugerdefinerede netværk

Du kan definere forskellige netværk og isolere følsomme tjenester (f.eks. databaser) for at styrke sikkerheden. Netværk er defineret som følger:

netværk: frontend: backend:

Hver tjeneste kan eksplicit være knyttet til et eller flere netværk. Derudover kan kontrol over interne netværk være afgørende for avanceret styring.

Vedvarende mængder

De sikrer, at selvom du stopper eller sletter containere, går vigtige data (f.eks. databaser eller konfigurationer) ikke tabt. Du kan definere dem globalt eller på basis af hver enkelt tjeneste.

Miljøvariabler og .env-filer

For øget fleksibilitet og portabilitet kan variabler deklareres i selve YAML eller i filer. .env placeret i samme mappe. Dette giver dig mulighed for at ændre kritiske indstillinger (f.eks. legitimationsoplysninger) uden at røre ved Compose-filen.

Sundhedstjek og afhængighedskontrol

Et centralt problem ved orkestrering af flere tjenester er at sikre, at afhængige tjenester (f.eks. din applikation) ikke forsøger at starte, før underliggende tjenester (såsom databasen) er klar. Compose tilbyder muligheden afhænger_af og i nyere versioner kan sundhedsbetingelser indstilles:

tjenester: web: depends_on: db: betingelse: service_healthy db: billede: postgres:13 sundhedstjek: test: interval: 10s timeout: 5s forsøg: 5

På denne måde starter din backend ikke, før databasen bekræfter, at den er oppe og kører. Det er en grundlæggende funktion i automatiserede pipelines og implementeringer for at undgå indledende forbindelsesfejl.

Docker Compose i kontinuerlig integration og implementering (CI/CD)

Compose er unikt egnet til at være en del af moderne arbejdsgange. Takket være kodeformatet tillader det:

  • Test komplette applikationer på hver pull request uden behov for manuelt at konfigurere miljøer.
  • Implementer kortvarige miljøer til test eller demonstrationer, så de nemt kan bortskaffes efter brug.
  • Automatiser produktionen i små og mellemstore projekter, hvor det ikke er muligt at sætte Kubernetes op.

Andre integrerbare og alternative værktøjer: Podman, Visual Studio, Azure og flere

Ud over Docker Compose tilbyder containermiljøet andre relevante værktøjer og integrationer:

  • Podman og podman-dockerPå systemer som SLE Micro eller mere sikkerhedsorienterede distributioner tilbyder Podman et dæmonløst alternativ til Docker. Værktøjet podman-docker giver dig mulighed for at køre Docker-scripts uden ændringer og erstatte dem automatisk.
  • Visual Studio og .NET.NET-udviklere kan orkestrere webtjenester og API'er sammen med cacher som Redis indefra Visual Studio, hvilket automatisk genererer Compose-filer og gør det nemmere at foretage fejlfinding og start af tjenester sekventielt.
  • Azure AI-tjenester og cloudMange cloudplatforme gør det nemt at implementere komplekse stakke ved hjælp af Compose, så du kan administrere flere AI-tjenester, databaser eller overvågningssystemer (f.eks. Prometheus og Grafana) i fællesskab.

Bedste fremgangsmåder og tips til at få mest muligt ud af Docker Compose

  • Del og erobreHold tjenesterne godt adskilt, og definer kun de nødvendige for at undgå skjulte afhængigheder og lette sammensætningen af ​​forskellige stakke.
  • Brug officielle billeder, når det er muligtReducerer problemer, garanterer support og letter opdateringer.
  • Versionér din docker-compose.ymlTilføj det til dit versionskontrolsystem (f.eks. Git) sammen med resten af ​​projektet for at sikre sporbarhed af ændringer.
  • Gem ikke kun kritiske data i containerenBrug altid eksterne volumener eller databaser for at undgå datatab, hvis du har brug for at fjerne eller opdatere tjenester.
  • Optimer DockerfilesHvis du bygger brugerdefinerede billeder, skal du sørge for, at de er lette og veldokumenterede for at reducere byggetider og fejl. Du kan også lære, hvordan du opretter brugerdefinerede billeder i .
  • Pas på havneSørg for, at de porte, du eksponerer, ikke er optaget på din maskine, og gennemgå sikkerheden ved offentlige eksponeringer.
  • Hold variabler og hemmeligheder ude af arkivetBrug .env-filer eller hemmelige administratorer til følsomme data.

Diagnose og daglig styring af multi-container applikationer

Compose gør det ekstremt nemt at overvåge og diagnosticere en applikations tilstand. Nogle anbefalinger til daglig administration:

  • Tjek logfilerne med docker-compose logs -f at overvåge hver tjenestes adfærd i realtid.
  • Stop og genstart specifikke tjenester hvis du har brug for at køre tests eller midlertidigt frigøre ressourcer.
  • Pause og genoptag den fulde stack hvis du har brug for at udføre vedligeholdelsesopgaver.

Implementering af komplekse applikationer: eksempler og anbefalinger fra det virkelige liv

Mange virkelige applikationer bruger Compose avanceret til at koordinere flere tjenester. Almindelige tilfælde omfatter:

  • Moderne webstablerFor eksempel en React-applikation på frontend, en API i Node/Express og en MongoDB-database.
  • MikrotjenesterForskellige specialiserede tjenester kommunikerer med hinanden via interne netværk, med persistens i separate databaser.
  • Business applikationerForbinder tjenester som RabbitMQ (messaging), Redis (caching), Elasticsearch (søgemaskine) osv., alt sammen under den samme Compose-fil.

Det er vigtigt at tilpasse Compose til projektets specifikke behov, idet der tages højde for isolation mellem tjenester, datapersistens og miljøreplikerbarhed.

Yderligere anbefalinger til produktionsmiljøer

Selvom Compose er ideel til udvikling og præproduktion, har dets brug i produktion nuancer:

  • Brug specifikke miljøvariabler at adskille udviklings- og produktionskonfiguration.
  • Tjek sikkerheden af containere og netværk: eksponér kun de nødvendige porte, brug optimerede billeder, og hold software opdateret.
  • Vær forsigtig med volumenerneI produktion bør du overveje at bruge ekstern, persistent lagring og regelmæssigt sikkerhedskopiere kritiske data.
  • Overvåg status og ydeevne af tjenester med værktøjer som Prometheus og Grafana.

For større projekter eller projekter med høje krav til tilgængelighed og skalerbarhed kan det være nødvendigt at opgradere til orkestratorer som Kubernetes, selvom Docker Compose stadig er perfekt til startups, MVP'er, små teams og hurtig testning.

Administration af multi-container-applikationer har aldrig været mere tilgængeligt og effektivt end med Docker Compose. Med en enkelt konfigurationsfil kan du definere og kontrollere hele infrastrukturer og sikre, at din applikation implementeres, skaleres og yder lige godt i ethvert miljø. Nøglen er at udnytte dens fleksibilitet, opretholde god praksis og frem for alt fuldt ud forstå de muligheder og begrænsninger, den tilbyder. Hvis du mestrer Compose, har du et essentielt værktøj til moderne softwareudvikling og -styring.

Dockerfile-4 brugerdefinerede billeder
relateret artikel:
Sådan opretter du brugerdefinerede Dockerfile-billeder trin for trin

Tilføj som foretrukken kilde