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. 相关文档