Docker容器化遗留应用(三):网络与数据管理
系列导读
这是《Docker容器化遗留应用》系列的第三篇,前两篇介绍了容器化优势和基本步骤,本篇将深入讲解网络配置和数据持久化。
网络配置:让容器之间"说得上话"
端口映射:打开对外的窗口
# 将主机的8080端口映射到容器的80端口
docker run -d -p 8080:80 --name web-server nginx
# 访问 http://localhost:8080 即可看到Nginx欢迎页
端口映射格式:主机端口:容器端口
容器间通信:建立内部专线
默认桥接网络
# 启动数据库容器
docker run -d --name my-database mongo
# 应用容器连接数据库
docker run -d --name my-app --link my-database:db my-legacy-app
自定义桥接网络(推荐)
# 创建自定义网络
docker network create crm-network
# 数据库容器加入网络
docker run -d --network=crm-network \
--name database --network-alias=db mongo
# 应用容器通过别名访问
docker run -d --network=crm-network \
--name app -e DB_HOST=db my-legacy-app
优势:
- ✅ 自动DNS解析
- ✅ 网络隔离
- ✅ 容器间可通过名称访问
Docker Compose:一键编排多容器
# docker-compose.yml
version: '3.8'
services:
web:
build: .
ports:
- "5000:5000"
environment:
- DB_HOST=database
depends_on:
- database
networks:
- crm-network
database:
image: mongo:latest
volumes:
- mongo-data:/data/db
networks:
- crm-network
networks:
crm-network:
driver: bridge
volumes:
mongo-data:
一键启动:
docker compose up -d
数据持久化:别让数据随容器消失
容器是短暂的,删除容器后数据也会消失。对于数据库等有状态应用,必须使用数据卷。
三种卷类型对比
| 类型 | 特点 | 适用场景 |
|---|---|---|
| 匿名卷 | 随机名称,难管理 | 临时任务 |
| 命名卷 | 显式创建,易管理 | 生产环境 |
| 主机卷 | 直接挂载主机目录 | 开发调试 |
命名卷:生产环境首选
# 创建命名卷
docker volume create my-mongo-data
# 挂载到容器
docker run -d --name my-mongodb \
-v my-mongo-data:/data/db \
mongo
主机卷:开发调试利器
# 挂载主机目录到容器
docker run -d --name my-mongodb \
-v /path/on/host:/data/db \
mongo
# 主机上的文件修改会实时同步到容器
Docker Compose卷配置
services:
database:
image: mongo
volumes:
- mongo-data:/data/db
volumes:
mongo-data:
运行时自动创建和挂载卷。
数据备份:安全第一
# 从容器复制数据到主机
docker cp my-mongodb:/data/db /backup/mongo-$(date +%Y%m%d)
# 或者使用命名卷备份
docker run --rm -v my-mongo-data:/data -v /backup:/backup \
busybox tar czf /backup/mongo-$(date +%Y%m%d).tar.gz /data
实战:搭建一个Web应用栈
完整的docker-compose.yml
version: '3.8'
services:
# 反向代理
nginx:
image: nginx:alpine
ports:
- "80:80"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
networks:
- app-network
# Web应用
web:
build: .
environment:
- DB_HOST=database
depends_on:
- database
networks:
- app-network
# 数据库
database:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
MYSQL_DATABASE: myapp
volumes:
- mysql-data:/var/lib/mysql
networks:
- app-network
networks:
app-network:
driver: bridge
volumes:
mysql-data:
一键启动
# 启动所有服务
docker compose up -d
# 查看服务状态
docker compose ps
# 查看日志
docker compose logs -f
# 停止所有服务
docker compose down
下篇预告
下一篇:《Docker容器化遗留应用(四):实战案例》
将详细介绍:
- Apache服务器容器化
- 数据库容器化考量
- 配置与环境变量管理
- 安全加固措施
系列导航
- (一)为什么要容器化 - 容器化优势与基本概念
- (二)容器化三步走 - 从零到一的实践指南
- (三)网络与数据管理 ← 当前
- (四)实战案例 - Apache与数据库容器化
- (五)综合案例 - 遗留CRM系统容器化全流程
掌握了网络和数据管理,你的容器化应用就可以投入生产了!
Views: 1
