Docker Compose: ఒకే కమాండ్తో అనేక సేవలు
ఒక యాప్లికేషన్, డేటాబేస్ మరియు వెబ్ సర్వర్ కలయికను ఒకే ఫైల్లో ఎలా వివరించాలి, ఒకే కమాండ్తో ఎలా ప్రారంభించాలి మరియు మాన్యువల్ రీబిల్డ్ లేకుండా ఎలా అప్డేట్ చేయాలి.
23 ఆగస్టు, 2026న నవీకరించబడింది
మీరు ఒకే సేవను పొడవైన docker run కమాండ్తో ప్రారంభించవచ్చు. ఒకదానిని మరొకటి చూడాల్సిన రెండు సేవల విషయంలో — అది ఇక పనిచేయదు: మరుసటి రోజు మీరు పారామితులను మరచిపోతారు. Compose మొత్తం వివరణను మీరు చదవగల, సవరించగల, రిపోజిటరీలో ఉంచగల ఫైల్లోకి మారుస్తుంది.
కనీస ఉదాహరణ
/opt/myapp డైరెక్టరీ, దానిలో compose.yaml:
services:
db:
image: postgres:17
restart: unless-stopped
environment:
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_DB: app
volumes:
- db-data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 10s
retries: 5
app:
image: ghcr.io/example/app:1.4.2
restart: unless-stopped
depends_on:
db:
condition: service_healthy
environment:
DATABASE_URL: postgres://postgres:${DB_PASSWORD}@db:5432/app
ports:
- "127.0.0.1:8080:8080"
volumes:
db-data:
దాని పక్కన, .env ఫైల్:
DB_PASSWORD=long-random-password
chmod 600 .env
docker compose up -d
docker compose ps
docker compose logs -f app
ఇక్కడ ముఖ్యమైనవి
- చిరునామాలకు బదులుగా పేర్లు. అప్లికేషన్
dbఅనే పేరుతో డేటాబేస్ను చేరుకుంటుంది — సేవల పేర్లు స్వయంచాలకంగా resolve అయ్యే షేర్డ్ నెట్వర్క్ను Compose సృష్టిస్తుంది. మీరు డేటాబేస్ పోర్ట్ను బయటకు పబ్లిష్ చేయాల్సిన అవసరం లేదు, చేయకూడదు కూడా. restart: unless-stopped. ఇది లేకుండా, మెషిన్ రీబూట్ అయిన తర్వాత ఏదీ తిరిగి పైకి రాదు.- హెల్త్ చెక్తో
depends_on. సాధారణdepends_onకంటైనర్ ప్రారంభమయ్యే వరకే వేచి ఉంటుంది, డేటాబేస్ కనెక్షన్లను స్వీకరించడానికి సిద్ధంగా ఉందా అని కాదు. అప్లికేషన్ ముందుగానే ప్రారంభమై క్రాష్ అవుతుంది. - ఖచ్చితమైన ఇమేజ్ వెర్షన్లు.
postgres:latestకాదు,postgres:17.latestఉపయోగిస్తే, తదుపరిpullఒక రోజు పాత డేటాను తెరవని మేజర్ వెర్షన్ను తెస్తుంది. 127.0.0.1పై పబ్లిష్ చేయడం. పోర్ట్ను బయటకు సర్టిఫికెట్ ఉన్న వెబ్ సర్వర్ ద్వారానే బహిర్గతం చేయండి.
రోజువారీ కమాండ్లు
docker compose up -d # bring up or apply changes
docker compose down # stop and remove containers (volumes intact)
docker compose down -v # ...and remove volumes too
docker compose restart app # restart one service
docker compose exec app sh # go inside
docker compose pull && docker compose up -d # update images
docker compose config # show final file with substitutions
ప్రారంభించే ముందు ఫైల్ను తనిఖీ చేయడానికి docker compose config ఉత్తమ మార్గం: వేరియబుల్స్ ఏమిగా విస్తరించాయో, ఏదైనా ఇండెంటేషన్ పోయిందా అని అది చూపుతుంది.
docker compose down -vవాల్యూమ్లను డేటాబేస్తో పాటు తొలగిస్తుంది. ఇది తిరిగి మార్చలేనిది.-vఉన్న ఏ ఆపరేషన్ చేసే ముందైనా, మీ దగ్గర కాపీ ఉందని నిర్ధారించుకోండి — బ్యాకప్లు చూడండి.
ఎన్విరాన్మెంట్ ఫైల్లు
ఒకే స్టాక్ను టెస్టింగ్ మరియు ప్రొడక్షన్ కోసం ఓవర్లేలతో వేరు చేయడం సౌకర్యంగా ఉంటుంది:
docker compose -f compose.yaml -f compose.prod.yaml up -d
రెండో ఫైల్ తేడాలను మాత్రమే ఓవర్రైడ్ చేస్తుంది: మెమొరీ పరిమితులు, పబ్లిష్ చేసిన పోర్ట్లు, మరియు లాగ్ లెవల్.
సాధారణ తప్పులు
- రిపోజిటరీలో నిల్వ ఉన్న
compose.yamlలో సీక్రెట్లు. వాటిని 600 అనుమతులతో.envలో ఉంచండి మరియు దానిని కమిట్ చేయకండి. docker-composeమరియుdocker composeకలపడం. పాత v1 వెర్షన్ కొంత సింటాక్స్ను అర్థం చేసుకోదు మరియు ప్రాజెక్ట్లను వేరే పేర్ల కింద నిల్వ చేస్తుంది. ప్లగిన్ను ఇన్స్టాల్ చేయండి — Docker ఇన్స్టాలేషన్ చూడండి.- వాల్యూమ్కు బదులుగా కంటైనర్లో డేటా.
docker compose downతర్వాత, అది అదృశ్యమవుతుంది. వాల్యూమ్లు చూడండి. - మెమొరీ పరిమితులు లేకపోవడం. ఒక సేవ మెషిన్ మొత్తం మెమొరీని తినేస్తుంది, కర్నెల్ దాని పక్కవాటిని చంపేస్తుంది. రిసోర్స్ పరిమితులు చూడండి.