Med Compose beskriver du ønsket oppsett i en fil og lar Docker opprette containerne. Her begynner du med en Nginx-webserver fra et ferdig image. Deretter kan du legge til en tjeneste og undersøke hva som opprettes automatisk.
Før du begynner: Docker Engine og Compose fra Docker Level 1 skal virke. Kjør docker compose version i Linux-VM-en. Du trenger ikke en Flask-app, Dockerfile eller GitHub-konto. YAML-oppslaget gir støtte til innrykk og lister; du kan lese det uten å ha laget en GitHub-workflow.
Gjør først «Oppgave 1» og kontroller websvaret. Oppdatering er et oppslag til senere arbeid. «Oppgave 2» lar deg prøve flere tjenester i samme prosjekt.
Hva er Docker Compose?
Med Docker Compose beskriver du én eller flere tjenester i en fil. I denne øvingen kjører hver tjeneste én container. Her brukes docker-compose.yml.
compose.yaml og docker-compose.yml er navn Compose støtter. Bruk ett av dem i prosjektmappen, og kjør kommandoene fra den mappen. Her brukes docker-compose.yml.
services:
web:
image: nginx:latest
ports:
- "127.0.0.1:8083:80"
Én kommando setter opp alt:
docker compose up -d
Compose-filen kan brukes på en annen server, men du må også flytte nødvendige data og lokale filer og sette opp passord, nettverk og andre innstillinger. Tagger som latest kan peke på et nytt image senere. Skal byggene være identiske, må du også låse hvilket image som brukes.
Hvorfor er dette automatisering?
Tenk på forskjellen:
| Manuelt oppsett | Med Docker Compose |
|---|---|
| Installer Nginx manuelt | image: nginx:latest |
| Konfigurer porter | ports: "80:80" |
| Installer Grafana manuelt | image: grafana/grafana:latest |
| Dokumenter alle stegene | Beskriv ønsket oppsett i Compose-filen |
| Gjenta alt på neste server | docker compose up -d |
Compose-filen er en del av den tekniske dokumentasjonen og beskriver ønsket oppsett. Kontroller faktisk tilstand med docker compose ps og loggene. Begrunnelser, testresultater og rutiner for sikkerhetskopiering må dokumenteres i tillegg.
Les det lille eksemplet
services samler tjenestene. web er navnet vi gir webserveren. image velger et ferdig image, mens ports kobler port 8083 på VM-ens tilbakekoblingsadresse til port 80 i containeren. Derfor tester du fra VM-en selv. Bygging fra kildekode kommer i Docker Level 2.
Nyttige Docker-kommandoer
| Kommando | Hva den gjør |
|---|---|
docker compose up -d | Starter alle tjenester i bakgrunnen |
docker compose down | Stopper og fjerner prosjektets containere og nettverk |
docker compose logs -f | Følger loggene i sanntid |
docker compose pull | Henter images som prosjektets tagger peker på |
docker compose restart | Starter prosjektets containere på nytt, uten å bytte image |
docker ps | Viser kjørende containere |
Når tjenesten trenger lagring
Bevar data utenfor containeren forklarer bind mount og navngitt volume. Nginx-øvelsen under trenger ingen database eller lagringskobling. Bruk lagringsstøtten før du utvider prosjektet med en tjeneste som må bevare data.
Oppdatering av tjenester
Å oppdatere en Docker-tjeneste er enkelt:
# Hent siste versjon
docker compose pull
# Restart med ny versjon
docker compose up -d
up -d tar i bruk det nye imaget ved å opprette containeren på nytt. Kontroller at tjenesten fungerer etter oppdateringen; en ny image-versjon kan kreve endringer i innstillinger eller data.
Oppgave 1 - Sett opp Nginx med Docker Compose
Arbeid i VM-ens konsoll. Lag en ny mappe, slik at denne øvingen ikke endrer et annet Compose-prosjekt:
mkdir compose-ovelse
cd compose-ovelse
nano docker-compose.yml
Finnes mappen fra før, åpne den og kontroller innholdet før du fortsetter. Skriv Nginx-eksemplet fra «Hva er Docker Compose?» i filen. Lagre med Ctrl+O, bekreft med Enter og avslutt med Ctrl+X. Kontroller og start:
docker compose config --quiet
docker compose up -d
docker compose ps
curl http://127.0.0.1:8083
config --quiet skal avslutte uten feilmelding. Retter du en feil i filen, kjører du kontrollen på nytt før oppstart. ps skal vise web som kjørende, og curl skal vise Nginx-innhold med Welcome to nginx!.
Hvis porten er opptatt, velg en annen ledig vertsport i filen og bruk samme port i curl. Hvis containeren stopper, les docker compose logs web. Ikke start et nytt prosjekt i en tilfeldig mappe for å prøve igjen.
Forklar før du fortsetter: Hvilken fil beskriver tjenesten, og hva opprettet docker compose up -d? Stopp prosjektet med docker compose stop, start det igjen med docker compose up -d og gjenta curl-testen. Bruker du siden som Compose-støtte til en annen oppgave, kan du gå tilbake dit nå.
Oppgave 2 - Legg til en tjeneste
Utvid docker-compose.yml fra oppgave 1 med en ekstra tjeneste. For eksempel:
- Uptime Kuma på port 3001
- Grafana på port 3000
Bruk et eget tjenestenavn under services, på samme innrykksnivå som web. Les tjenestens offisielle Docker-eksempel for nødvendig image, port og lagring. Bruk en ledig vertsport og begrens tilgang til øvingsmiljøet. En latest-tagg er ikke en låst versjon.
Kjør først docker compose config --quiet. Start så med docker compose up -d og se at begge tjenestene kjører samtidig. Bruker du tilbakekoblingsbinding som for Nginx, tester du porten fra VM-en; tilgang fra en annen maskin krever egen avklaring av adresse, port og nettverk.
Vis docker compose ps og et forventet svar fra hver tjeneste på den adressen og porten du faktisk har satt opp. Forklar muntlig eller skriftlig hva Compose oppretter automatisk, og hva du fortsatt må ordne selv, for eksempel data, innstillinger og sikkerhetskopiering. Hvis én tjeneste stopper, les docker compose logs før du endrer konfigurasjonen. Avslutt eventuell loggfølging med Ctrl+C.
Oppsummering
- Docker Compose lar deg definere flere tjenester i én fil
- Compose-filen er både konfigurasjon og dokumentasjon
- Oppdatering er
docker compose pull+docker compose up -d - Docker gjør det enkelt å flytte tjenester mellom servere
Kilder: Docker Compose: første prosjekt og Compose-tjenester.