Docker Compose 使用實(shí)例詳解
一、Docker Compose 簡(jiǎn)介
Docker Compose 是用于定義和運(yùn)行多容器 Docker 應(yīng)用程序的工具,通過 YAML 文件配置應(yīng)用程序服務(wù),一鍵啟動(dòng)所有關(guān)聯(lián)容器。
二、安裝 Docker Compose
Linux:
sudo curl -L "https://mirrors.tuna.tsinghua.edu.cn/docker/compose/releases/download/v2.32.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose
Windows/macOS:
通過 Docker Desktop 安裝(已內(nèi)置 Compose)
驗(yàn)證安裝:
docker-compose --version
三、基礎(chǔ)配置文件示例(docker-compose.yml)
version: '3.8' # Compose文件格式版本
services:
web:
build: . # 使用當(dāng)前目錄的Dockerfile構(gòu)建
ports:
- "8000:80" # 主機(jī)端口:容器端口
depends_on:
- db
environment:
- DB_HOST=db
networks:
- mynetwork
db:
image: mysql:8.0
volumes:
- db_data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: example
MYSQL_DATABASE: myapp
networks:
- mynetwork
healthcheck:
test: ["CMD-SHELL", "mysqladmin ping -h localhost"]
interval: 30s
timeout: 10s
retries: 3
volumes:
db_data:
networks:
mynetwork:
driver: bridge四、關(guān)鍵配置解析
- version:指定Compose文件格式版本(常用3.x)
- services:定義服務(wù)(容器)
build:指定構(gòu)建上下文路徑(含Dockerfile)image:直接使用官方鏡像ports:端口映射depends_on:服務(wù)依賴關(guān)系environment:環(huán)境變量設(shè)置
- volumes:數(shù)據(jù)卷定義(持久化存儲(chǔ))
- networks:自定義網(wǎng)絡(luò)配置
- healthcheck:容器健康檢查
五、常用命令
啟動(dòng)服務(wù):
docker-compose up -d # 后臺(tái)啟動(dòng) docker-compose up --build # 重新構(gòu)建后啟動(dòng)
停止服務(wù):
docker-compose down # 停止并刪除容器、網(wǎng)絡(luò)等 docker-compose stop # 僅停止容器
查看日志:
docker-compose logs -f # 實(shí)時(shí)查看日志 docker-compose logs web # 查看指定服務(wù)日志
進(jìn)入容器:
docker-compose exec web bash # 進(jìn)入web容器
構(gòu)建鏡像:
docker-compose build # 構(gòu)建所有服務(wù)鏡像 docker-compose build web # 僅構(gòu)建web服務(wù)鏡像
六、完整項(xiàng)目示例(Node.js + MySQL + Nginx)
項(xiàng)目結(jié)構(gòu):
myapp/ ├── docker-compose.yml ├── nginx/ │ ├── nginx.conf │ └── Dockerfile ├── app/ │ ├── package.json │ ├── server.js │ └── Dockerfile └── .env
docker-compose.yml:
version: '3.8'
services:
nginx:
build: ./nginx
ports:
- "80:80"
depends_on:
- app
networks:
- frontend
- backend
app:
build: ./app
environment:
- NODE_ENV=production
- DB_HOST=db
networks:
- backend
depends_on:
db:
condition: service_healthy
db:
image: mysql:8.0
volumes:
- db_data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD_FILE: /run/secrets/db_root_password
MYSQL_DATABASE: myapp
secrets:
- db_root_password
networks:
- backend
healthcheck:
test: ["CMD-SHELL", "mysqladmin ping -h localhost"]
interval: 30s
timeout: 10s
retries: 3
volumes:
db_data:
networks:
frontend:
backend:
secrets:
db_root_password:
file: .envapp/Dockerfile:
FROM node:18-alpine WORKDIR /app COPY package*.json ./ RUN npm install --production COPY . . CMD ["npm", "start"]
nginx/Dockerfile:
FROM nginx:alpine COPY nginx.conf /etc/nginx/conf.d/default.conf
nginx/nginx.conf:
server {
listen 80;
location / {
proxy_pass http://app:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}.env:
DB_ROOT_PASSWORD=supersecret
七、高級(jí)功能
擴(kuò)展配置:
# 擴(kuò)展服務(wù)實(shí)例
app:
deploy:
replicas: 3
resources:
limits:
cpus: '0.5'
memory: 512M多環(huán)境配置:
# docker-compose.override.yml(開發(fā)環(huán)境)
version: '3.8'
services:
app:
build: ./app
volumes:
- ./app:/app # 掛載代碼目錄實(shí)現(xiàn)熱更新
environment:
- NODE_ENV=development使用模板文件:
# docker-compose.yml
services:
app:
image: myapp:${TAG}八、最佳實(shí)踐
- 使用
.env文件管理敏感信息 - 為不同環(huán)境創(chuàng)建獨(dú)立的Compose文件(如docker-compose.prod.yml)
- 使用健康檢查確保服務(wù)啟動(dòng)順序
- 對(duì)持久化數(shù)據(jù)使用命名卷
- 定期清理未使用的鏡像和卷:
docker system prune -a
九、調(diào)試技巧
查看容器狀態(tài):
docker-compose ps
檢查網(wǎng)絡(luò)配置:
docker network inspect mynetwork
驗(yàn)證配置文件:
docker-compose config
到此這篇關(guān)于Docker Compose 使用實(shí)例的文章就介紹到這了,更多相關(guān)Docker Compose 使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Docker服務(wù)器存儲(chǔ)資源池不足的問題解決
這篇文章主要給大家介紹了關(guān)于Docker服務(wù)器存儲(chǔ)資源池不足的問題解決方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11
Docker network自定義網(wǎng)絡(luò)方式
這篇文章主要介紹了Docker network自定義網(wǎng)絡(luò)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05
docker-compose部署Java應(yīng)用和相關(guān)依賴方式
介紹如何使用docker-compose一鍵部署Java應(yīng)用及依賴,并實(shí)現(xiàn)MySQL數(shù)據(jù)庫(kù)的自動(dòng)初始化2024-10-10
Docker使用編寫dockerfile啟動(dòng)node.js應(yīng)用
這篇文章主要介紹了Docker使用編寫dockerfile啟動(dòng)node.js應(yīng)用,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-01-01
Docker部署Prometheus的實(shí)現(xiàn)示例
Prometheus是一款開源的監(jiān)控和告警工具,它可以收集系統(tǒng)的各種指標(biāo)數(shù)據(jù),如CPU使用率、內(nèi)存使用量等,本文主要介紹了Docker部署Prometheus的實(shí)現(xiàn)示例,感興趣的可以了解一下2024-08-08

