我来介绍几种常见的 Docker 应用部署方式:(如jump sever docker应用部署)
1. 单容器部署(最简单)
直接运行
bash复制下载
# 拉取镜像 docker pull nginx:latest # 运行容器 docker run -d --name myapp -p 80:80 nginx
使用 Docker Compose
yaml复制下载
# docker-compose.yml
version: '3.8'
services:
web:
image: nginx:latest
container_name: myapp
ports:
- "80:80"
volumes:
- ./html:/usr/share/nginx/html
restart: unless-stopped
运行:
bash复制下载
docker-compose up -d
2. 多服务应用部署
yaml复制下载
version: '3.8'
services:
frontend:
build: ./frontend
ports:
- "3000:3000"
depends_on:
- backend
backend:
build: ./backend
ports:
- "8080:8080"
environment:
- DATABASE_URL=postgres://db:5432/app
depends_on:
- db
db:
image: postgres:15
environment:
POSTGRES_DB: app
POSTGRES_USER: user
POSTGRES_PASSWORD: password
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
postgres_data:
3. 生产环境部署建议
A. 使用 Docker Swarm
bash复制下载
# 初始化 Swarm docker swarm init # 部署 stack docker stack deploy -c docker-compose.yml myapp
B. 使用 Kubernetes
yaml复制下载
# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
spec:
replicas: 3
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: myapp:latest
ports:
- containerPort: 80
4. 最佳实践
Dockerfile 优化
dockerfile复制下载
# 多阶段构建减少镜像大小 FROM node:18-alpine as builder WORKDIR /app COPY package*.json ./ RUN npm ci --only=production COPY . . RUN npm run build FROM nginx:alpine COPY --from=builder /app/build /usr/share/nginx/html COPY nginx.conf /etc/nginx/nginx.conf EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]
环境配置
bash复制下载
# 使用环境变量文件 docker run -d \ --env-file .env \ -p 80:80 \ myapp
健康检查
yaml复制下载
services:
web:
image: myapp
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost/health"]
interval: 30s
timeout: 10s
retries: 3
5. 常用命令
bash复制下载
# 构建镜像 docker build -t myapp:latest . # 查看运行容器 docker ps # 查看日志 docker logs -f container_name # 进入容器 docker exec -it container_name /bin/bash # 清理无用资源 docker system prune -a # 查看资源使用 docker stats
6. 监控和日志
bash复制下载
# 使用 Portainer 进行可视化管理 docker run -d \ -p 9000:9000 \ -v /var/run/docker.sock:/var/run/docker.sock \ portainer/portainer # 集中式日志 docker run -d \ --name loki \ -p 3100:3100 \ grafana/loki # 指标监控 docker run -d \ --name prometheus \ -p 9090:9090 \ prom/prometheus
7. 安全建议
- 使用非 root 用户
- 定期更新基础镜像
- 扫描镜像漏洞bash复制下载docker scan myapp:latest
- 限制资源使用yaml复制下载services: web: deploy: resources: limits: cpus: ‘0.50’ memory: 512M
选择哪种部署方式取决于你的应用复杂度和团队需求。对于简单应用,Docker Compose 就足够了;对于微服务架构,建议使用 Kubernetes。