Docker部署
1. 概述
梵医云系统支持使用 Docker 进行容器化部署,提供了一种轻量级、可移植、可扩展的部署方式。本文档介绍如何使用 Docker 部署梵医云系统。
2. 环境要求
2.1 硬件要求
| 组件 | 最低配置 | 推荐配置 |
|---|---|---|
| CPU | 4 核 | 8 核及以上 |
| 内存 | 8 GB | 16 GB 及以上 |
| 硬盘 | 100 GB | 200 GB 及以上 |
| 网络 | 100 Mbps | 1 Gbps |
2.2 软件要求
| 软件 | 版本要求 | 说明 |
|---|---|---|
| 操作系统 | CentOS 7+ / Ubuntu 20.04+ | Linux 发行版 |
| Docker | 20.10+ | 容器运行时 |
| Docker Compose | 1.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-engine3.1.2 安装依赖
bash
sudo yum install -y yum-utils device-mapper-persistent-data lvm23.1.3 添加 Docker 仓库
bash
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo3.1.4 安装 Docker
bash
sudo yum install -y docker-ce docker-ce-cli containerd.io3.1.5 启动 Docker
bash
sudo systemctl start docker
sudo systemctl enable docker3.1.6 验证安装
bash
docker --version
docker run hello-world3.2 Ubuntu/Debian 安装 Docker
3.2.1 卸载旧版本
bash
sudo apt remove docker docker-engine docker.io containerd runc3.2.2 安装依赖
bash
sudo apt update
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common3.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.io3.2.6 启动 Docker
bash
sudo systemctl start docker
sudo systemctl enable docker3.2.7 验证安装
bash
docker --version
docker run hello-world3.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 docker3.4 配置 Docker 用户权限
将当前用户添加到 docker 组:
bash
sudo usermod -aG docker $USER重新登录或执行:
bash
newgrp docker4. 安装 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-compose4.2 设置执行权限
bash
sudo chmod +x /usr/local/bin/docker-compose4.3 创建软链接
bash
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose4.4 验证安装
bash
docker-compose --version5. 创建 Docker 网络
5.1 创建网络
bash
docker network create fanyiyun_default5.2 查看网络
bash
docker network ls5.3 查看网络详情
bash
docker network inspect fanyiyun_default6. 部署 MySQL
6.1 创建数据目录
bash
mkdir -p /data/docker/mysql/data
mkdir -p /data/docker/mysql/conf6.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 = 26.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: true6.4 启动 MySQL
bash
cd /data/docker/mysql
docker-compose up -d6.5 查看日志
bash
docker-compose logs -f fanyiyun-mysql6.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.sql7. 部署 Redis
7.1 创建数据目录
bash
mkdir -p /data/docker/redis/data
mkdir -p /data/docker/redis/conf7.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 everysec7.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: true7.4 启动 Redis
bash
cd /data/docker/redis
docker-compose up -d7.5 查看日志
bash
docker-compose logs -f fanyiyun-redis7.6 测试连接
bash
docker exec -it fanyiyun-redis redis-cli ping8. 部署 Nacos
8.1 创建数据目录
bash
mkdir -p /data/docker/nacos/data
mkdir -p /data/docker/nacos/logs8.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: true8.3 启动 Nacos
bash
cd /data/docker/nacos
docker-compose up -d8.4 查看日志
bash
docker-compose logs -f fanyiyun-nacos8.5 访问 Nacos
打开浏览器访问:
http://your-server-ip:8848/nacos默认账号密码:nacos/nacos
9. 构建应用镜像
9.1 准备工作
确保项目已经编译完成:
bash
cd fanyi-cloud
mvn clean package -DskipTests9.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.jar9.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.jar9.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.jar9.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 fanyi10. 部署应用服务
10.1 创建日志目录
bash
mkdir -p /data/docker/fanyi-cloud/logs10.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: true10.3 启动所有服务
bash
cd /data/docker/fanyi-cloud
docker-compose up -d10.4 查看服务状态
bash
docker-compose ps10.5 查看服务日志
bash
# 查看所有服务日志
docker-compose logs -f
# 查看特定服务日志
docker-compose logs -f fanyi-gateway
docker-compose logs -f fanyi-system11. 容器管理
11.1 查看运行中的容器
bash
docker ps11.2 查看所有容器
bash
docker ps -a11.3 查看容器详情
bash
docker inspect fanyi-gateway11.4 查看容器资源使用
bash
docker stats11.5 进入容器
bash
docker exec -it fanyi-gateway bash11.6 停止容器
bash
# 停止单个容器
docker stop fanyi-gateway
# 停止所有容器
docker-compose stop11.7 启动容器
bash
# 启动单个容器
docker start fanyi-gateway
# 启动所有容器
docker-compose start11.8 重启容器
bash
# 重启单个容器
docker restart fanyi-gateway
# 重启所有容器
docker-compose restart11.9 删除容器
bash
# 删除单个容器
docker rm fanyi-gateway
# 删除所有容器
docker-compose down11.10 删除容器和卷
bash
docker-compose down -v12. 镜像管理
12.1 查看镜像
bash
docker images12.2 删除镜像
bash
# 删除单个镜像
docker rmi fanyi-gateway
# 删除所有未使用的镜像
docker image prune
# 删除所有未使用的镜像(包括未标记的)
docker image prune -a12.3 导出镜像
bash
docker save -o fanyi-gateway.tar fanyi-gateway12.4 导入镜像
bash
docker load -i fanyi-gateway.tar12.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:latest12.6 拉取镜像
bash
docker pull registry.example.com/fanyi/fanyi-gateway:latest13. 日志管理
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-gateway13.2 清理日志
bash
# 清理容器日志
docker system prune -a
# 清理所有未使用的资源
docker system prune -a --volumes14. 数据卷管理
14.1 查看数据卷
bash
docker volume ls14.2 查看数据卷详情
bash
docker volume inspect fanyiyun_mysql_data14.3 删除数据卷
bash
# 删除单个数据卷
docker volume rm fanyiyun_mysql_data
# 删除所有未使用的数据卷
docker volume prune14.4 备份数据卷
bash
# 备份 MySQL 数据卷
docker run --rm -v fanyiyun_mysql_data:/data -v $(pwd):/backup ubuntu tar czf /backup/mysql_backup.tar.gz /data14.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 ls15.2 查看网络详情
bash
docker network inspect fanyiyun_default15.3 删除网络
bash
docker network rm fanyiyun_default15.4 连接容器到网络
bash
docker network connect fanyiyun_default fanyi-gateway15.5 断开容器与网络的连接
bash
docker network disconnect fanyiyun_default fanyi-gateway16. 性能优化
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: 1G16.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.jar17. 安全配置
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.jar17.2 扫描镜像漏洞
bash
docker scan fanyi-gateway17.3 使用私有镜像仓库
bash
# 登录私有镜像仓库
docker login registry.example.com
# 推送镜像
docker push registry.example.com/fanyi/fanyi-gateway:latest18. 监控和告警
18.1 使用 Docker 自带的监控
bash
# 查看容器资源使用
docker stats
# 查看容器事件
docker events18.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: true19. 备份和恢复
19.1 备份容器
bash
# 导出容器配置
docker export fanyi-gateway > fanyi-gateway-container.tar19.2 备份数据卷
bash
# 备份 MySQL 数据卷
docker run --rm -v fanyiyun_mysql_data:/data -v $(pwd):/backup ubuntu tar czf /backup/mysql_backup.tar.gz /data19.3 恢复容器
bash
# 导入容器配置
docker import fanyi-gateway-container.tar fanyi-gateway:backup19.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 容器无法启动
问题:容器启动失败
解决方案:
- 查看容器日志
bash
docker logs fanyi-gateway- 检查容器配置
- 检查依赖服务是否启动
20.2 容器无法连接网络
问题:容器无法访问外部网络
解决方案:
- 检查 Docker 网络配置
- 检查防火墙设置
- 检查 DNS 配置
20.3 容器资源不足
问题:容器因资源不足而崩溃
解决方案:
- 增加容器资源限制
- 优化应用配置
- 增加服务器资源
20.4 镜像拉取失败
问题:无法拉取镜像
解决方案:
- 检查网络连接
- 配置镜像加速
- 使用私有镜像仓库
20.5 数据卷权限问题
问题:容器无法访问数据卷
解决方案:
- 检查数据卷权限
- 修改数据卷所有者
bash
sudo chown -R $USER:$USER /data/docker/mysql/data21. 注意事项
- 资源管理:合理配置容器资源限制,避免资源争抢
- 日志管理:定期清理日志文件,避免磁盘空间不足
- 备份策略:定期备份重要数据和配置
- 安全配置:使用非 root 用户运行容器,定期扫描镜像漏洞
- 监控告警:配置容器监控和告警,及时发现问题
- 版本管理:使用标签管理镜像版本,便于回滚
- 网络隔离:合理规划容器网络,确保安全性
- 数据持久化:使用数据卷持久化重要数据
