Docker容器化遗留应用(三):网络与数据管理

Docker容器化遗留应用(三):网络与数据管理

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

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

Index