Skip to content

Docker部署 ​

1. 概述 ​

梵医云系统支持使用 Docker 进行容器化部署,提供了一种轻量级、可移植、可扩展的部署方式。本文档介绍如何使用 Docker 部署梵医云系统。

2. 环境要求 ​

2.1 硬件要求 ​

组件最低配置推荐配置
CPU4 核8 核及以上
内存8 GB16 GB 及以上
硬盘100 GB200 GB 及以上
网络100 Mbps1 Gbps

2.2 软件要求 ​

软件版本要求说明
操作系统CentOS 7+ / Ubuntu 20.04+Linux 发行版
Docker20.10+容器运行时
Docker Compose1.29+容器编排工具

3. 安装 Docker ​

3.1 CentOS/RHEL 安装 Docker ​

3.1.1 卸载旧版本 ​

bash
sudo yum remove docker \
                docker-client \
                docker-client-latest \
                docker-common \
                docker-latest \
                docker-latest-logrotate \
                docker-logrotate \
                docker-engine

3.1.2 安装依赖 ​

bash
sudo yum install -y yum-utils device-mapper-persistent-data lvm2

3.1.3 添加 Docker 仓库 ​

bash
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

3.1.4 安装 Docker ​

bash
sudo yum install -y docker-ce docker-ce-cli containerd.io

3.1.5 启动 Docker ​

bash
sudo systemctl start docker
sudo systemctl enable docker

3.1.6 验证安装 ​

bash
docker --version
docker run hello-world

3.2 Ubuntu/Debian 安装 Docker ​

3.2.1 卸载旧版本 ​

bash
sudo apt remove docker docker-engine docker.io containerd runc

3.2.2 安装依赖 ​

bash
sudo apt update
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common

3.2.3 添加 Docker GPG 密钥 ​

bash
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

3.2.4 添加 Docker 仓库 ​

bash
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

3.2.5 安装 Docker ​

bash
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io

3.2.6 启动 Docker ​

bash
sudo systemctl start docker
sudo systemctl enable docker

3.2.7 验证安装 ​

bash
docker --version
docker run hello-world

3.3 配置 Docker 镜像加速 ​

编辑 Docker 配置文件 /etc/docker/daemon.json:

json
{
  "registry-mirrors": [
    "https://docker.mirrors.ustc.edu.cn",
    "https://hub-mirror.c.163.com",
    "https://mirror.ccs.tencentyun.com"
  ],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m",
    "max-file": "3"
  }
}

重启 Docker:

bash
sudo systemctl daemon-reload
sudo systemctl restart docker

3.4 配置 Docker 用户权限 ​

将当前用户添加到 docker 组:

bash
sudo usermod -aG docker $USER

重新登录或执行:

bash
newgrp docker

4. 安装 Docker Compose ​

4.1 下载 Docker Compose ​

bash
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

4.2 设置执行权限 ​

bash
sudo chmod +x /usr/local/bin/docker-compose

4.3 创建软链接 ​

bash
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

4.4 验证安装 ​

bash
docker-compose --version

5. 创建 Docker 网络 ​

5.1 创建网络 ​

bash
docker network create fanyiyun_default

5.2 查看网络 ​

bash
docker network ls

5.3 查看网络详情 ​

bash
docker network inspect fanyiyun_default

6. 部署 MySQL ​

6.1 创建数据目录 ​

bash
mkdir -p /data/docker/mysql/data
mkdir -p /data/docker/mysql/conf

6.2 创建 MySQL 配置文件 ​

创建 /data/docker/mysql/conf/my.cnf:

ini
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
max_connections=1000
default-time-zone='+08:00'
innodb_buffer_pool_size = 1G
innodb_log_file_size = 256M
innodb_flush_log_at_trx_commit = 2

6.3 创建 docker-compose.yml ​

创建 /data/docker/mysql/docker-compose.yml:

yaml
version: '3.6'
services:
  fanyiyun-mysql:
    image: mysql:8.0.39
    restart: always
    container_name: fanyiyun-mysql
    environment:
      - TZ=Asia/Shanghai
      - MYSQL_ROOT_PASSWORD=JdNkGqbZe9a7N4v5
    command:
      --default-authentication-plugin=mysql_native_password
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --explicit_defaults_for_timestamp=true
      --lower_case_table_names=1
    ports:
      - "3306:3306"
    volumes:
      - ./data:/var/lib/mysql
      - ./conf/my.cnf:/etc/mysql/conf.d/my.cnf
    networks:
      - fanyiyun_default

networks:
  fanyiyun_default:
    external: true

6.4 启动 MySQL ​

bash
cd /data/docker/mysql
docker-compose up -d

6.5 查看日志 ​

bash
docker-compose logs -f fanyiyun-mysql

6.6 初始化数据库 ​

bash
# 进入容器
docker exec -it fanyiyun-mysql bash

# 连接 MySQL
mysql -u root -p

# 创建数据库
CREATE DATABASE `db-fanyi-cloud` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

# 退出
exit
exit

# 导入初始化脚本
docker cp sql/fanyi-cloud.sql fanyiyun-mysql:/tmp/
docker exec -it fanyiyun-mysql mysql -u root -pJdNkGqbZe9a7N4v5 db-fanyi-cloud < /tmp/fanyi-cloud.sql

7. 部署 Redis ​

7.1 创建数据目录 ​

bash
mkdir -p /data/docker/redis/data
mkdir -p /data/docker/redis/conf

7.2 创建 Redis 配置文件 ​

创建 /data/docker/redis/conf/redis.conf:

ini
bind 0.0.0.0
protected-mode no
port 6379
timeout 0
tcp-keepalive 300
daemonize no
supervised no
loglevel notice
databases 16
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir /data
maxmemory 1gb
maxmemory-policy allkeys-lru
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec

7.3 创建 docker-compose.yml ​

创建 /data/docker/redis/docker-compose.yml:

yaml
version: '3.6'
services:
  fanyiyun-redis:
    container_name: fanyiyun-redis
    image: redis:6.2.13
    restart: always
    command: redis-server /usr/local/etc/redis/redis.conf
    ports:
      - "6379:6379"
    volumes:
      - ./data:/data
      - ./conf/redis.conf:/usr/local/etc/redis/redis.conf
    networks:
      - fanyiyun_default

networks:
  fanyiyun_default:
    external: true

7.4 启动 Redis ​

bash
cd /data/docker/redis
docker-compose up -d

7.5 查看日志 ​

bash
docker-compose logs -f fanyiyun-redis

7.6 测试连接 ​

bash
docker exec -it fanyiyun-redis redis-cli ping

8. 部署 Nacos ​

8.1 创建数据目录 ​

bash
mkdir -p /data/docker/nacos/data
mkdir -p /data/docker/nacos/logs

8.2 创建 docker-compose.yml ​

创建 /data/docker/nacos/docker-compose.yml:

yaml
version: '3.6'
services:
  fanyiyun-nacos:
    image: nacos/nacos-server:v2.2.3
    container_name: fanyiyun-nacos
    restart: always
    environment:
      - MODE=standalone
      - SPRING_DATASOURCE_PLATFORM=mysql
      - MYSQL_SERVICE_HOST=fanyiyun-mysql
      - MYSQL_SERVICE_PORT=3306
      - MYSQL_SERVICE_DB_NAME=nacos
      - MYSQL_SERVICE_USER=root
      - MYSQL_SERVICE_PASSWORD=JdNkGqbZe9a7N4v5
      - NACOS_AUTH_ENABLE=true
      - NACOS_AUTH_TOKEN_SECRET_KEY=SecretKey012345678901234567890123456789012345678901234567890123456789
      - NACOS_AUTH_IDENTITY_KEY=serverIdentity
      - NACOS_AUTH_IDENTITY_VALUE=security
    ports:
      - "8848:8848"
      - "9848:9848"
    volumes:
      - ./data:/home/nacos/data
      - ./logs:/home/nacos/logs
    networks:
      - fanyiyun_default
    depends_on:
      - fanyiyun-mysql

networks:
  fanyiyun_default:
    external: true

8.3 启动 Nacos ​

bash
cd /data/docker/nacos
docker-compose up -d

8.4 查看日志 ​

bash
docker-compose logs -f fanyiyun-nacos

8.5 访问 Nacos ​

打开浏览器访问:

http://your-server-ip:8848/nacos

默认账号密码:nacos/nacos

9. 构建应用镜像 ​

9.1 准备工作 ​

确保项目已经编译完成:

bash
cd fanyi-cloud
mvn clean package -DskipTests

9.2 构建 Gateway 镜像 ​

9.2.1 Dockerfile 内容 ​

dockerfile
FROM eclipse-temurin:21-jre

RUN mkdir -p /fanyi-gateway
WORKDIR /fanyi-gateway
COPY ./target/fanyi-gateway.jar app.jar

ENV TZ=Asia/Shanghai JAVA_OPTS="-Xms512m -Xmx512m"

EXPOSE 48080

CMD java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -jar app.jar

9.2.2 构建镜像 ​

bash
cd fanyi-gateway
docker build -t fanyi-gateway .

9.3 构建 System 镜像 ​

9.3.1 Dockerfile 内容 ​

dockerfile
FROM eclipse-temurin:21-jre

RUN mkdir -p /fanyi-module-system-biz
WORKDIR /fanyi-module-system-biz
COPY ./target/fanyi-module-system-biz.jar app.jar

ENV TZ=Asia/Shanghai JAVA_OPTS="-Xms512m -Xmx512m"

EXPOSE 48081

CMD java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -jar app.jar

9.3.2 构建镜像 ​

bash
cd fanyi-module-system/fanyi-module-system-biz
docker build -t fanyi-module-system-biz .

9.4 构建 Infra 镜像 ​

9.4.1 Dockerfile 内容 ​

dockerfile
FROM eclipse-temurin:21-jre

RUN mkdir -p /fanyi-module-infra-biz
WORKDIR /fanyi-module-infra-biz
COPY ./target/fanyi-module-infra-biz.jar app.jar

ENV TZ=Asia/Shanghai JAVA_OPTS="-Xms512m -Xmx512m"

EXPOSE 48082

CMD java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -jar app.jar

9.4.2 构建镜像 ​

bash
cd fanyi-module-infra/fanyi-module-infra-biz
docker build -t fanyi-module-infra-biz .

9.5 构建其他服务镜像 ​

按照相同的方式构建其他服务镜像:

bash
# Member
cd fanyi-module-member/fanyi-module-member-biz
docker build -t fanyi-module-member-biz .

# Pay
cd fanyi-module-pay/fanyi-module-pay-biz
docker build -t fanyi-module-pay-biz .

# BPM
cd fanyi-module-bpm/fanyi-module-bpm-biz
docker build -t fanyi-module-bpm-biz .

# Report
cd fanyi-module-report/fanyi-module-report-biz
docker build -t fanyi-module-report-biz .

# MP
cd fanyi-module-mp/fanyi-module-mp-biz
docker build -t fanyi-module-mp-biz .

# Product
cd fanyi-module-mall/fanyi-module-product-biz
docker build -t fanyi-module-product-biz .

# Promotion
cd fanyi-module-mall/fanyi-module-promotion-biz
docker build -t fanyi-module-promotion-biz .

# Trade
cd fanyi-module-mall/fanyi-module-trade-biz
docker build -t fanyi-module-trade-biz .

# Statistics
cd fanyi-module-mall/fanyi-module-statistics-biz
docker build -t fanyi-module-statistics-biz .

# CRM
cd fanyi-module-crm/fanyi-module-crm-biz
docker build -t fanyi-module-crm-biz .

# ERP
cd fanyi-module-erp/fanyi-module-erp-biz
docker build -t fanyi-module-erp-biz .

# AI
cd fanyi-module-ai/fanyi-module-ai-biz
docker build -t fanyi-module-ai-biz .

# Appointment
cd fanyi-module-appointment/fanyi-module-appointment-biz
docker build -t fanyi-module-appointment-biz .

# Partner
cd fanyi-module-partner/fanyi-module-partner-biz
docker build -t fanyi-module-partner-biz .

9.6 查看镜像 ​

bash
docker images | grep fanyi

10. 部署应用服务 ​

10.1 创建日志目录 ​

bash
mkdir -p /data/docker/fanyi-cloud/logs

10.2 创建 docker-compose.yml ​

创建 /data/docker/fanyi-cloud/docker-compose.yml:

yaml
version: '3'
services:
  fanyi-gateway:
    image: fanyi-gateway
    container_name: fanyi-gateway
    restart: always
    environment:
      - TZ=Asia/Shanghai
      - SPRING_PROFILES_ACTIVE=prod
      - SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=fanyiyun-nacos:8848
      - SPRING_CLOUD_NACOS_CONFIG_NAMESPACE=prod
      - SPRING_CLOUD_NACOS_SERVER_ADDR=fanyiyun-nacos:8848
      - SPRING_CLOUD_NACOS_DISCOVERY_NAMESPACE=prod
    volumes:
      - ./logs:/root/logs/
    ports:
      - "48080:48080"
    networks:
      - fanyiyun_default
    depends_on:
      - fanyiyun-nacos

  fanyi-system:
    image: fanyi-module-system-biz
    container_name: fanyi-system
    restart: always
    environment:
      - TZ=Asia/Shanghai
      - SPRING_PROFILES_ACTIVE=prod
      - SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=fanyiyun-nacos:8848
      - SPRING_CLOUD_NACOS_CONFIG_NAMESPACE=prod
      - SPRING_CLOUD_NACOS_SERVER_ADDR=fanyiyun-nacos:8848
      - SPRING_CLOUD_NACOS_DISCOVERY_NAMESPACE=prod
    volumes:
      - ./logs:/root/logs/
    ports:
      - "48081:48081"
    networks:
      - fanyiyun_default
    healthcheck:
      test: [ "CMD","curl","-f","http://localhost:48081" ]
      interval: 30s
      timeout: 10s
      retries: 5
      start_period: 60s
    depends_on:
      - fanyi-gateway

  fanyi-infra:
    image: fanyi-module-infra-biz
    container_name: fanyi-infra
    restart: always
    environment:
      - TZ=Asia/Shanghai
      - SPRING_PROFILES_ACTIVE=prod
      - SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=fanyiyun-nacos:8848
      - SPRING_CLOUD_NACOS_CONFIG_NAMESPACE=prod
      - SPRING_CLOUD_NACOS_SERVER_ADDR=fanyiyun-nacos:8848
      - SPRING_CLOUD_NACOS_DISCOVERY_NAMESPACE=prod
    volumes:
      - ./logs:/root/logs/
    ports:
      - "48082:48082"
    networks:
      - fanyiyun_default
    healthcheck:
      test: [ "CMD","curl","-f","http://localhost:48082" ]
      interval: 30s
      timeout: 10s
      retries: 5
      start_period: 60s
    depends_on:
      fanyi-system:
        condition: service_healthy

  fanyi-member:
    image: fanyi-module-member-biz
    container_name: fanyi-member
    restart: always
    environment:
      - TZ=Asia/Shanghai
      - SPRING_PROFILES_ACTIVE=prod
      - SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=fanyiyun-nacos:8848
      - SPRING_CLOUD_NACOS_CONFIG_NAMESPACE=prod
      - SPRING_CLOUD_NACOS_SERVER_ADDR=fanyiyun-nacos:8848
      - SPRING_CLOUD_NACOS_DISCOVERY_NAMESPACE=prod
    volumes:
      - ./logs:/root/logs/
    ports:
      - "48087:48087"
    networks:
      - fanyiyun_default
    depends_on:
      - fanyi-infra:
        condition: service_healthy

  fanyi-pay:
    image: fanyi-module-pay-biz
    container_name: fanyi-pay
    restart: always
    environment:
      - TZ=Asia/Shanghai
      - SPRING_PROFILES_ACTIVE=prod
      - SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=fanyiyun-nacos:8848
      - SPRING_CLOUD_NACOS_CONFIG_NAMESPACE=prod
      - SPRING_CLOUD_NACOS_SERVER_ADDR=fanyiyun-nacos:8848
      - SPRING_CLOUD_NACOS_DISCOVERY_NAMESPACE=prod
    volumes:
      - ./logs:/root/logs/
    ports:
      - "48083:48083"
    networks:
      - fanyiyun_default
    depends_on:
      - fanyi-infra:
        condition: service_healthy

  fanyi-bpm:
    image: fanyi-module-bpm-biz
    container_name: fanyi-bpm
    restart: always
    environment:
      - TZ=Asia/Shanghai
      - SPRING_PROFILES_ACTIVE=prod
      - SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=fanyiyun-nacos:8848
      - SPRING_CLOUD_NACOS_CONFIG_NAMESPACE=prod
      - SPRING_CLOUD_NACOS_SERVER_ADDR=fanyiyun-nacos:8848
      - SPRING_CLOUD_NACOS_DISCOVERY_NAMESPACE=prod
    volumes:
      - ./logs:/root/logs/
    ports:
      - "48084:48084"
    networks:
      - fanyiyun_default
    depends_on:
      - fanyi-infra:
        condition: service_healthy

  fanyi-report:
    image: fanyi-module-report-biz
    container_name: fanyi-report
    restart: always
    environment:
      - TZ=Asia/Shanghai
      - SPRING_PROFILES_ACTIVE=prod
      - SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=fanyiyun-nacos:8848
      - SPRING_CLOUD_NACOS_CONFIG_NAMESPACE=prod
      - SPRING_CLOUD_NACOS_SERVER_ADDR=fanyiyun-nacos:8848
      - SPRING_CLOUD_NACOS_DISCOVERY_NAMESPACE=prod
    volumes:
      - ./logs:/root/logs/
    ports:
      - "48085:48085"
    networks:
      - fanyiyun_default
    depends_on:
      - fanyi-infra:
        condition: service_healthy

  fanyi-mp:
    image: fanyi-module-mp-biz
    container_name: fanyi-mp
    restart: always
    environment:
      - TZ=Asia/Shanghai
      - SPRING_PROFILES_ACTIVE=prod
      - SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=fanyiyun-nacos:8848
      - SPRING_CLOUD_NACOS_CONFIG_NAMESPACE=prod
      - SPRING_CLOUD_NACOS_SERVER_ADDR=fanyiyun-nacos:8848
      - SPRING_CLOUD_NACOS_DISCOVERY_NAMESPACE=prod
    volumes:
      - ./logs:/root/logs/
    ports:
      - "48086:48086"
    networks:
      - fanyiyun_default
    depends_on:
      - fanyi-infra:
        condition: service_healthy

  fanyi-product:
    image: fanyi-module-product-biz
    container_name: fanyi-product
    restart: always
    environment:
      - TZ=Asia/Shanghai
      - SPRING_PROFILES_ACTIVE=prod
      - SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=fanyiyun-nacos:8848
      - SPRING_CLOUD_NACOS_CONFIG_NAMESPACE=prod
      - SPRING_CLOUD_NACOS_SERVER_ADDR=fanyiyun-nacos:8848
      - SPRING_CLOUD_NACOS_DISCOVERY_NAMESPACE=prod
    volumes:
      - ./logs:/root/logs/
    ports:
      - "48088:48088"
    networks:
      - fanyiyun_default
    depends_on:
      - fanyi-infra:
        condition: service_healthy

  fanyi-promotion:
    image: fanyi-module-promotion-biz
    container_name: fanyi-promotion
    restart: always
    environment:
      - TZ=Asia/Shanghai
      - SPRING_PROFILES_ACTIVE=prod
      - SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=fanyiyun-nacos:8848
      - SPRING_CLOUD_NACOS_CONFIG_NAMESPACE=prod
      - SPRING_CLOUD_NACOS_SERVER_ADDR=fanyiyun-nacos:8848
      - SPRING_CLOUD_NACOS_DISCOVERY_NAMESPACE=prod
    volumes:
      - ./logs:/root/logs/
    ports:
      - "48089:48089"
    networks:
      - fanyiyun_default
    depends_on:
      - fanyi-infra:
        condition: service_healthy

  fanyi-trade:
    image: fanyi-module-trade-biz
    container_name: fanyi-trade
    restart: always
    environment:
      - TZ=Asia/Shanghai
      - SPRING_PROFILES_ACTIVE=prod
      - SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=fanyiyun-nacos:8848
      - SPRING_CLOUD_NACOS_CONFIG_NAMESPACE=prod
      - SPRING_CLOUD_NACOS_SERVER_ADDR=fanyiyun-nacos:8848
      - SPRING_CLOUD_NACOS_DISCOVERY_NAMESPACE=prod
    volumes:
      - ./logs:/root/logs/
    ports:
      - "48090:48090"
    networks:
      - fanyiyun_default
    depends_on:
      - fanyi-infra:
        condition: service_healthy

  fanyi-statistics:
    image: fanyi-module-statistics-biz
    container_name: fanyi-statistics
    restart: always
    environment:
      - TZ=Asia/Shanghai
      - SPRING_PROFILES_ACTIVE=prod
      - SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=fanyiyun-nacos:8848
      - SPRING_CLOUD_NACOS_CONFIG_NAMESPACE=prod
      - SPRING_CLOUD_NACOS_SERVER_ADDR=fanyiyun-nacos:8848
      - SPRING_CLOUD_NACOS_DISCOVERY_NAMESPACE=prod
    volumes:
      - ./logs:/root/logs/
    ports:
      - "48091:48091"
    networks:
      - fanyiyun_default
    depends_on:
      - fanyi-infra:
        condition: service_healthy

  fanyi-crm:
    image: fanyi-module-crm-biz
    container_name: fanyi-crm
    restart: always
    environment:
      - TZ=Asia/Shanghai
      - SPRING_PROFILES_ACTIVE=prod
      - SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=fanyiyun-nacos:8848
      - SPRING_CLOUD_NACOS_CONFIG_NAMESPACE=prod
      - SPRING_CLOUD_NACOS_SERVER_ADDR=fanyiyun-nacos:8848
      - SPRING_CLOUD_NACOS_DISCOVERY_NAMESPACE=prod
    volumes:
      - ./logs:/root/logs/
    ports:
      - "48092:48092"
    networks:
      - fanyiyun_default
    depends_on:
      - fanyi-infra:
        condition: service_healthy

  fanyi-erp:
    image: fanyi-module-erp-biz
    container_name: fanyi-erp
    restart: always
    environment:
      - TZ=Asia/Shanghai
      - SPRING_PROFILES_ACTIVE=prod
      - SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=fanyiyun-nacos:8848
      - SPRING_CLOUD_NACOS_CONFIG_NAMESPACE=prod
      - SPRING_CLOUD_NACOS_SERVER_ADDR=fanyiyun-nacos:8848
      - SPRING_CLOUD_NACOS_DISCOVERY_NAMESPACE=prod
    volumes:
      - ./logs:/root/logs/
    ports:
      - "48093:48093"
    networks:
      - fanyiyun_default
    depends_on:
      - fanyi-infra:
        condition: service_healthy

  fanyi-ai:
    image: fanyi-module-ai-biz
    container_name: fanyi-ai
    restart: always
    environment:
      - TZ=Asia/Shanghai
      - SPRING_PROFILES_ACTIVE=prod
      - SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=fanyiyun-nacos:8848
      - SPRING_CLOUD_NACOS_CONFIG_NAMESPACE=prod
      - SPRING_CLOUD_NACOS_SERVER_ADDR=fanyiyun-nacos:8848
      - SPRING_CLOUD_NACOS_DISCOVERY_NAMESPACE=prod
    volumes:
      - ./logs:/root/logs/
    ports:
      - "48094:48094"
    networks:
      - fanyiyun_default
    depends_on:
      - fanyi-infra:
        condition: service_healthy

  fanyi-appointment:
    image: fanyi-module-appointment-biz
    container_name: fanyi-appointment
    restart: always
    environment:
      - TZ=Asia/Shanghai
      - SPRING_PROFILES_ACTIVE=prod
      - SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=fanyiyun-nacos:8848
      - SPRING_CLOUD_NACOS_CONFIG_NAMESPACE=prod
      - SPRING_CLOUD_NACOS_SERVER_ADDR=fanyiyun-nacos:8848
      - SPRING_CLOUD_NACOS_DISCOVERY_NAMESPACE=prod
    volumes:
      - ./logs:/root/logs/
    ports:
      - "48095:48095"
    networks:
      - fanyiyun_default
    depends_on:
      - fanyi-infra:
        condition: service_healthy

  fanyi-partner:
    image: fanyi-module-partner-biz
    container_name: fanyi-partner
    restart: always
    environment:
      - TZ=Asia/Shanghai
      - SPRING_PROFILES_ACTIVE=prod
      - SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=fanyiyun-nacos:8848
      - SPRING_CLOUD_NACOS_CONFIG_NAMESPACE=prod
      - SPRING_CLOUD_NACOS_SERVER_ADDR=fanyiyun-nacos:8848
      - SPRING_CLOUD_NACOS_DISCOVERY_NAMESPACE=prod
    volumes:
      - ./logs:/root/logs/
    ports:
      - "48096:48096"
    networks:
      - fanyiyun_default
    depends_on:
      - fanyi-infra:
        condition: service_healthy

networks:
  fanyiyun_default:
    external: true

10.3 启动所有服务 ​

bash
cd /data/docker/fanyi-cloud
docker-compose up -d

10.4 查看服务状态 ​

bash
docker-compose ps

10.5 查看服务日志 ​

bash
# 查看所有服务日志
docker-compose logs -f

# 查看特定服务日志
docker-compose logs -f fanyi-gateway
docker-compose logs -f fanyi-system

11. 容器管理 ​

11.1 查看运行中的容器 ​

bash
docker ps

11.2 查看所有容器 ​

bash
docker ps -a

11.3 查看容器详情 ​

bash
docker inspect fanyi-gateway

11.4 查看容器资源使用 ​

bash
docker stats

11.5 进入容器 ​

bash
docker exec -it fanyi-gateway bash

11.6 停止容器 ​

bash
# 停止单个容器
docker stop fanyi-gateway

# 停止所有容器
docker-compose stop

11.7 启动容器 ​

bash
# 启动单个容器
docker start fanyi-gateway

# 启动所有容器
docker-compose start

11.8 重启容器 ​

bash
# 重启单个容器
docker restart fanyi-gateway

# 重启所有容器
docker-compose restart

11.9 删除容器 ​

bash
# 删除单个容器
docker rm fanyi-gateway

# 删除所有容器
docker-compose down

11.10 删除容器和卷 ​

bash
docker-compose down -v

12. 镜像管理 ​

12.1 查看镜像 ​

bash
docker images

12.2 删除镜像 ​

bash
# 删除单个镜像
docker rmi fanyi-gateway

# 删除所有未使用的镜像
docker image prune

# 删除所有未使用的镜像(包括未标记的)
docker image prune -a

12.3 导出镜像 ​

bash
docker save -o fanyi-gateway.tar fanyi-gateway

12.4 导入镜像 ​

bash
docker load -i fanyi-gateway.tar

12.5 推送镜像到镜像仓库 ​

bash
# 登录镜像仓库
docker login registry.example.com

# 标记镜像
docker tag fanyi-gateway registry.example.com/fanyi/fanyi-gateway:latest

# 推送镜像
docker push registry.example.com/fanyi/fanyi-gateway:latest

12.6 拉取镜像 ​

bash
docker pull registry.example.com/fanyi/fanyi-gateway:latest

13. 日志管理 ​

13.1 查看容器日志 ​

bash
# 查看实时日志
docker logs -f fanyi-gateway

# 查看最近 100 行日志
docker logs --tail 100 fanyi-gateway

# 查看最近 10 分钟的日志
docker logs --since 10m fanyi-gateway

# 查看指定时间段的日志
docker logs --since "2024-01-01T00:00:00" --until "2024-01-01T23:59:59" fanyi-gateway

13.2 清理日志 ​

bash
# 清理容器日志
docker system prune -a

# 清理所有未使用的资源
docker system prune -a --volumes

14. 数据卷管理 ​

14.1 查看数据卷 ​

bash
docker volume ls

14.2 查看数据卷详情 ​

bash
docker volume inspect fanyiyun_mysql_data

14.3 删除数据卷 ​

bash
# 删除单个数据卷
docker volume rm fanyiyun_mysql_data

# 删除所有未使用的数据卷
docker volume prune

14.4 备份数据卷 ​

bash
# 备份 MySQL 数据卷
docker run --rm -v fanyiyun_mysql_data:/data -v $(pwd):/backup ubuntu tar czf /backup/mysql_backup.tar.gz /data

14.5 恢复数据卷 ​

bash
# 恢复 MySQL 数据卷
docker run --rm -v fanyiyun_mysql_data:/data -v $(pwd):/backup ubuntu tar xzf /backup/mysql_backup.tar.gz -C /

15. 网络管理 ​

15.1 查看网络 ​

bash
docker network ls

15.2 查看网络详情 ​

bash
docker network inspect fanyiyun_default

15.3 删除网络 ​

bash
docker network rm fanyiyun_default

15.4 连接容器到网络 ​

bash
docker network connect fanyiyun_default fanyi-gateway

15.5 断开容器与网络的连接 ​

bash
docker network disconnect fanyiyun_default fanyi-gateway

16. 性能优化 ​

16.1 限制容器资源 ​

在 docker-compose.yml 中添加资源限制:

yaml
services:
  fanyi-gateway:
    image: fanyi-gateway
    container_name: fanyi-gateway
    deploy:
      resources:
        limits:
          cpus: '2'
          memory: 2G
        reservations:
          cpus: '1'
          memory: 1G

16.2 优化 JVM 参数 ​

修改 Dockerfile 中的 JVM 参数:

dockerfile
ENV JAVA_OPTS="-Xms1024m -Xmx1024m -XX:+UseG1GC -XX:MaxGCPauseMillis=200"

16.3 使用多阶段构建 ​

优化镜像大小:

dockerfile
# 构建阶段
FROM maven:3.8-openjdk-17 AS builder
WORKDIR /app
COPY pom.xml .
COPY src ./src
RUN mvn clean package -DskipTests

# 运行阶段
FROM eclipse-temurin:21-jre
WORKDIR /app
COPY --from=builder /app/target/fanyi-gateway.jar app.jar
CMD java -jar app.jar

17. 安全配置 ​

17.1 使用非 root 用户运行 ​

修改 Dockerfile:

dockerfile
FROM eclipse-temurin:21-jre

RUN groupadd -r fanyi && useradd -r -g fanyi fanyi
RUN mkdir -p /fanyi-gateway && chown -R fanyi:fanyi /fanyi-gateway

WORKDIR /fanyi-gateway
COPY --chown=fanyi:fanyi ./target/fanyi-gateway.jar app.jar

USER fanyi

ENV TZ=Asia/Shanghai JAVA_OPTS="-Xms512m -Xmx512m"

EXPOSE 48080

CMD java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -jar app.jar

17.2 扫描镜像漏洞 ​

bash
docker scan fanyi-gateway

17.3 使用私有镜像仓库 ​

bash
# 登录私有镜像仓库
docker login registry.example.com

# 推送镜像
docker push registry.example.com/fanyi/fanyi-gateway:latest

18. 监控和告警 ​

18.1 使用 Docker 自带的监控 ​

bash
# 查看容器资源使用
docker stats

# 查看容器事件
docker events

18.2 集成 Prometheus 和 Grafana ​

创建监控服务的 docker-compose.yml:

yaml
version: '3'
services:
  prometheus:
    image: prom/prometheus
    container_name: prometheus
    restart: always
    ports:
      - "9090:9090"
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
    networks:
      - fanyiyun_default

  grafana:
    image: grafana/grafana
    container_name: grafana
    restart: always
    ports:
      - "3000:3000"
    environment:
      - GF_SECURITY_ADMIN_PASSWORD=admin
    volumes:
      - grafana-data:/var/lib/grafana
    networks:
      - fanyiyun_default

volumes:
  grafana-data:

networks:
  fanyiyun_default:
    external: true

19. 备份和恢复 ​

19.1 备份容器 ​

bash
# 导出容器配置
docker export fanyi-gateway > fanyi-gateway-container.tar

19.2 备份数据卷 ​

bash
# 备份 MySQL 数据卷
docker run --rm -v fanyiyun_mysql_data:/data -v $(pwd):/backup ubuntu tar czf /backup/mysql_backup.tar.gz /data

19.3 恢复容器 ​

bash
# 导入容器配置
docker import fanyi-gateway-container.tar fanyi-gateway:backup

19.4 恢复数据卷 ​

bash
# 恢复 MySQL 数据卷
docker run --rm -v fanyiyun_mysql_data:/data -v $(pwd):/backup ubuntu tar xzf /backup/mysql_backup.tar.gz -C /

20. 常见问题 ​

20.1 容器无法启动 ​

问题:容器启动失败

解决方案:

  1. 查看容器日志
bash
docker logs fanyi-gateway
  1. 检查容器配置
  2. 检查依赖服务是否启动

20.2 容器无法连接网络 ​

问题:容器无法访问外部网络

解决方案:

  1. 检查 Docker 网络配置
  2. 检查防火墙设置
  3. 检查 DNS 配置

20.3 容器资源不足 ​

问题:容器因资源不足而崩溃

解决方案:

  1. 增加容器资源限制
  2. 优化应用配置
  3. 增加服务器资源

20.4 镜像拉取失败 ​

问题:无法拉取镜像

解决方案:

  1. 检查网络连接
  2. 配置镜像加速
  3. 使用私有镜像仓库

20.5 数据卷权限问题 ​

问题:容器无法访问数据卷

解决方案:

  1. 检查数据卷权限
  2. 修改数据卷所有者
bash
sudo chown -R $USER:$USER /data/docker/mysql/data

21. 注意事项 ​

  1. 资源管理:合理配置容器资源限制,避免资源争抢
  2. 日志管理:定期清理日志文件,避免磁盘空间不足
  3. 备份策略:定期备份重要数据和配置
  4. 安全配置:使用非 root 用户运行容器,定期扫描镜像漏洞
  5. 监控告警:配置容器监控和告警,及时发现问题
  6. 版本管理:使用标签管理镜像版本,便于回滚
  7. 网络隔离:合理规划容器网络,确保安全性
  8. 数据持久化:使用数据卷持久化重要数据

22. 相关文档 ​