Docker Compose Cheatsheet - De mest användbara kommandona med exempel
BTW, docker-compose skiljer sig från docker compose...
Här är en Docker Compose cheatsheet med kommenterade exempel för att hjälpa dig behärska Compose-filer och kommandon snabbt.

Compose File Reference: docker-compose.yml
Kärnstruktur:
version: '3' # Compose filformat version
services:
web:
image: nginx:latest
ports:
- "8080:80" # Host port 8080:Container port 80
db:
image: postgres
environment: # Miljövariabler
POSTGRES_PASSWORD: example
volumes:
- db_data:/var/lib/postgresql/data
networks: # Anpassad nätverk
appnet:
driver: bridge
volumes: # Namngiven volym
db_data:
- services: Varje container i din multi-container app. I exemplet ovan har vi två tjänster:
webochdb. - networks & volumes: Definierar isolerade nätverk och permanent lagring - vi har
appnetnätverk ochdb_datavolym här.
Exempel
Enkel tjänst med portmappning
services:
app:
build: .
ports:
- "8000:80" # Host port 8000:Container port 80
Exponerar app på host port 8000 och bygger från Dockerfile i aktuell katalog.
Multi-tjänst med delad volym och anpassat nätverk
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- type: bind
source: ./app
target: /app
networks:
- mynet
db:
image: postgres
volumes:
- db_data:/var/lib/postgresql/data
networks:
- mynet
networks:
mynet:
volumes:
db_data:
Webb och DB på samma nätverk; DB använder permanent namngiven volym - db_data.
Använda build-kontext och Dockerfile-sökväg
Du kan bygga docker image på begäran från den i docker-compose.yam angivna Dockerfile.
services:
app:
build:
context: .
dockerfile: docker/MyDockerfile
Dela data mellan tjänster
services:
web:
image: nginx
volumes:
- shared_data:/usr/share/nginx/html
worker:
image: myworker
volumes:
- shared_data:/usr/src/app/data
volumes:
shared_data:
Båda tjänsterna har åtkomst till samma volym (för statiska filer eller datautbyte) - shared_data.
Avancerade Compose File Alternativ
- environment: Ställ in MILJÖ-variabler för containrar.
- depends_on: Kontrollera tjänstens startordning.
- deploy.replicas: Skala tjänst i Swarm-läge.
Exempel:
services:
web:
image: nginx
deploy:
replicas: 3
depends_on:
- db
Startar 3 webbinstanser; kontrollerar endast startordning (inte beredskap).
Grundläggande Docker Compose Kommandon
| Kommando | Beskrivning | Exempelanvändning |
|---|---|---|
docker-compose up |
Skapar och startar containrar | docker-compose up |
docker-compose up -d |
Kör i bakgrunden | docker-compose up -d |
docker-compose exec |
Kör kommando i körande container | docker-compose exec web bash |
docker-compose build |
Bygg/bygg om bilder | docker-compose build |
docker-compose down |
Stoppar och tar bort containrar, nätverk, volymer och bilder | docker-compose down |
docker-compose logs -f |
Visa och följ loggar | docker-compose logs -f |
docker-compose ps |
Lista körande containrar | docker-compose ps |
docker-compose run |
Kör engångskommandon (ignorera kommando i Compose fil) | docker-compose run web python manage.py migrate |
docker-compose stop |
Stoppar körande containrar (kan startas igen med start) |
docker-compose stop |
docker-compose restart |
Startar om tjänster | docker-compose restart web |
docker-compose pull |
Hämta tjänstbilder | docker-compose pull |
docker-compose rm |
Ta bort stoppade tjänstcontainrar | docker-compose rm web |
docker-compose config |
Validera och visa Compose fil | docker-compose config |
docker-compose up --scale web=3 |
Starta flera instanser av en tjänst | docker-compose up --scale web=3 |
Vanliga Compose Mönster
-
Databaser med permanent data
services: mysql: image: mysql environment: MYSQL_ROOT_PASSWORD: password volumes: - mysql_data:/var/lib/mysql volumes: mysql_data:DB-data bevaras i
mysql_datavolymen vid containrarbörjar om. -
Bind-mounta kod för utveckling
services: app: build: . volumes: - .:/appLive-redigera kod på värden, automatiskt speglas i containern.
Användbara Flaggor
-d: Bakgrundsläge (kör i bakgrunden).--build: Tvinga ombygga bilder innan start.--force-recreate: Skapa om containrar även om oförändrade.--remove-orphans: Ta bort containrar som inte är definierade i Compose fil.
Definiera och Anpassa Tjänster
Du kan definiera och anpassa tjänster, nätverk och volymer i Docker Compose genom att utnyttja filen docker-compose.yml, som centraliserar all din applikations konfiguration och orkestreringsbehov.
- Tjänster definieras under nyckeln
services. - Varje tjänst representerar en containerkonfiguration, där du kan ställa in:
- Image: Välj en bild från Docker Hub eller annat register.
- Ports: Mappa containerns portar till värdens portar.
- Miljövariabler: Skicka konfigureringsvärden.
- Volymer: Bevara data eller dela filer/mappar med värden eller andra tjänster.
- Nätverk: Kontrollera vilka nätverk tjänsten kan komma åt.
Exempel:
services:
web:
image: nginx:latest
ports:
- "8080:80" # Värdport 8080:Containerport 80
environment:
- NGINX_HOST=localhost
volumes:
- web_data:/usr/share/nginx/html
networks:
- frontend
db:
image: postgres:13
environment:
POSTGRES_USER: admin
POSTGRES_PASSWORD: secret
volumes:
- db_data:/var/lib/postgresql/data
networks:
- backend
- Här använder
webtjänsten nginx-bilden, ställer in en miljövariabel, bifogar en volym, öppnar port 80 som 8080 på värden och ansluter tillfrontendnätverket.dbtjänsten gör något liknande för PostgreSQL.
Anpassa Nätverk
- Nätverk kontrollerar vilka tjänster som kan kommunicera. Compose skapar ett standardnätverk, men du kan definiera flera, ange anpassade drivrutiner, ställa in alternativ och bestämma vilken tjänst som ansluter till vilket nätverk för finjustering av isolering.
- Definiera nätverk på toppnivå under
networks, och lista vilka nätverk en tjänst ska ansluta till med tjänstenivånnetworksnyckel.
Exempel:
networks:
frontend:
driver: bridge
backend:
driver: bridge
driver_opts:
com.docker.network.bridge.host_binding_ipv4: "127.0.0.1"
- Anslut nätverk till tjänster:
services:
app:
networks:
- frontend
- backend
db:
networks:
- backend
- Denna konfiguration tillåter
apptjänsten att komma åt både användare påfrontendochbackendnätverken, medandbendast är tillgänglig inombackend.
Anpassa Volymer
- Volymer definieras under toppnivån
volumes. Montera dem till containrar medvolumesnyckeln under en tjänst. - Volymer kan ha namn, använda anpassade drivrutiner och delas mellan flera tjänster för permanent lagring och delning av data.
Exempel:
volumes:
web_data: # Namngiven volym för webbinnehåll
db_data: # Namngiven volym för databas
services:
web:
volumes:
- web_data:/usr/share/nginx/html
db:
volumes:
- db_data:/var/lib/postgresql/data
- I detta exempel är
web_datapermanent och tillgänglig för vilken container som helst som monterar den.db_datasäkerställer att databasen inte går förlorad vid containrarbörjar om. - Du kan definiera bind-mounts med anpassade drivrutinsalternativ för avancerade fall:
volumes:
db_data:
driver: local
driver_opts:
type: none
device: /data/db_data
o: bind
- Denna konfiguration sätter upp en bind-mount från värdsökvägen
/data/db_datain i containern.
Sammanfattning av bästa praxis:
- Använd tjänstnamnet som DNS-värdnamn för kommunikation mellan tjänster.
- Anslut tjänster till flera nätverk efter behov för att kontrollera åtkomst.
- Använd namngivna volymer för permanent lagring och delning av data.
- Definiera allt med YAML, vilket möjliggör versionskontroll och enkla distributionsskript.
Flera compose-filer
För att organisera komplexa fler-tjänst-uppsättningar i Docker Compose kan du använda flera compose-filer och överskriftsfiler, vilket tillåter modulära, miljöspecifika och skalbara konfigurationer. Här är hur detta fungerar:
- Grund- och överskriftsfilstruktur
- Skapa en grundfil (
compose.yamlellerdocker-compose.yml) som innehåller alla gemensamma, standardtjänstdefinitioner. - Lägg till miljöspecifika överskriftsfiler (t.ex.,
docker-compose.override.yml,docker-compose.dev.yml,docker-compose.prod.yml).
Exempel på filstruktur:
/projekt-katalog
|-- docker-compose.yml # Grundkonfiguration
|-- docker-compose.override.yml # Lokala/dev-överskrifter (appliceras automatiskt)
|-- docker-compose.prod.yml # Produktionsöverskrifter
|-- docker-compose.test.yml # Testöverskrifter (om behövligt)
Grundkonfigurationen definierar kärntjänster, medan varje överskrift anpassar inställningar för en specifik miljö eller fall.
- Hur filöverskrifter fungerar
- Sammanfogning: När du kör
docker compose up, sammanfogar Docker Compose grundfilen med eventuella överskrifter i ordning; efterföljande filer överskriver, utökar eller lägger till inställningar i tidigare filer. - Överskrivning av fält: Om en tjänst eller ett fält definieras i flera filer, används värdet från den sist angivna filen. Nya fält läggs till.
Exempel på sammanfogning:
docker-compose.yml:services: web: image: myapp ports: - "8000:80"docker-compose.override.yml:services: web: environment: - DEBUG=true- Resultat: Tjänsten
webanvänder både grundbilden och porten plus den överskrivnaDEBUG-miljövariabeln.
- Kommandon för flera filer
- Standardbeteende: Om den finns, laddar Docker Compose automatiskt
docker-compose.override.ymltillsammans meddocker-compose.ymlnär du kör något kommando. - Manuell specificering: Använd
-fflaggor för att kontrollera vilka filer som sammanfogas och i vilken ordning:docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d- Detta ignorerar standardöverskriften och använder produktionsspecifika inställningar.
- Praktiska organisationsstrategier
- Miljöseparation: Använd en överskrift per miljö: dev, test, prod, etc.
- Mikrotjänster och team: Dela upp konfigurationen i separata filer för olika tjänster eller team, och kombinera efter behov.
- Funktionstogglar: Ytterligare filer kan introducera eller ta bort valfria tjänster eller konfigurationer för tillfälliga behov (t.ex., en
compose.debug.ymlför extra loggning).
- Fördelar
- Klarsynthet: Håller individuella filer små och fokuserade.
- Skalbarhet: Lätt att lägga till nya tjänster, miljöer eller inställningar.
- Underhållbarhet: Endast ändra eller granska relevanta avsnitt för en given distribution.
- Exempel: Byta miljöer
Utveckling:
docker compose -f docker-compose.yml -f docker-compose.dev.yml up
Produktion:
docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d
Varje miljö får endast den konfiguration som är nödvändig för den, med all gemensam konfiguration i grundfilen.
Organisera komplexa Compose-uppsättningar med flera filer - och utnyttja överskrifts/sammanfogningssystemet - säkerställer modularitet, miljöspecifik anpassning och enkel skalbarhet för stora, fler-tjänst-Docker-applikationer.