DOCKER.md 6.8 KB

Docker 构建和使用指南

本文档说明如何将 License Admin 项目打包成 Linux x86_64 Docker 镜像并运行。

📦 构建 Docker 镜像

前置要求

重要: Dockerfile 已简化为仅复制已构建的二进制文件,因此需要先编译好二进制文件。

方法一:使用构建脚本(推荐)

构建脚本会自动检查并编译二进制文件(如果不存在):

# 给脚本添加执行权限
chmod +x build.sh

# 构建 latest 版本(会自动编译二进制文件)
./build.sh

# 构建指定版本
./build.sh v1.0.0

# 构建并指定注册表(用于推送到 Docker Hub 或其他注册表)
./build.sh v1.0.0 your-registry.com

方法二:手动编译后构建镜像

# 1. 先编译 Linux x86_64 二进制文件
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o license-admin .

# 2. 构建 Docker 镜像
docker build --platform linux/amd64 -t license-admin:latest .

# 构建指定版本
docker build --platform linux/amd64 -t license-admin:v1.0.0 .

方法三:使用 Docker Compose

# 构建并启动
docker-compose up -d --build

# 仅构建
docker-compose build

🚀 运行容器

基本运行(需要先启动 MySQL)

# 方式1: 连接外部 MySQL(宿主机)
docker run -d \
  --name license-admin \
  -p 8080:8080 \
  -e DB_HOST=host.docker.internal \
  -e DB_PORT=3306 \
  -e DB_USER=root \
  -e DB_PASSWORD=your-password \
  -e DB_NAME=license_admin \
  license-admin:latest

自定义认证 Token 和数据库配置

docker run -d \
  --name license-admin \
  -p 8080:8080 \
  -e DB_HOST=mysql \
  -e DB_PORT=3306 \
  -e DB_USER=root \
  -e DB_PASSWORD=your-password \
  -e DB_NAME=license_admin \
  -e AUTH_TOKEN=your-secret-token \
  license-admin:latest

环境变量说明

变量名 说明 默认值 必填
DB_HOST MySQL 主机地址 mysql
DB_PORT MySQL 端口 3306
DB_USER MySQL 用户名 root
DB_PASSWORD MySQL 密码 password
DB_NAME 数据库名称 license_admin
AUTH_TOKEN 认证 Token admin-token-123456
PORT 应用端口 8080

使用 Docker Compose

# 创建数据目录
mkdir -p ./data

# 设置环境变量(可选)
export AUTH_TOKEN=your-secret-token

# 启动服务
docker-compose up -d

# 查看日志
docker-compose logs -f

# 停止服务
docker-compose down

🔍 查看和管理

查看容器状态

docker ps | grep license-admin

查看日志

# 实时日志
docker logs -f license-admin

# 最近 100 行日志
docker logs --tail 100 license-admin

进入容器

docker exec -it license-admin sh

停止和删除容器

# 停止容器
docker stop license-admin

# 删除容器
docker rm license-admin

# 停止并删除
docker rm -f license-admin

📤 推送镜像到注册表

推送到 Docker Hub

# 登录 Docker Hub
docker login

# 标记镜像
docker tag license-admin:latest your-username/license-admin:latest

# 推送镜像
docker push your-username/license-admin:latest

推送到私有注册表

# 标记镜像
docker tag license-admin:latest registry.example.com/license-admin:latest

# 推送镜像
docker push registry.example.com/license-admin:latest

🔧 配置说明

环境变量

变量名 说明 默认值
AUTH_TOKEN 认证 Token admin-token-123456
PORT 服务端口 8080

MySQL 数据库配置

项目使用 MySQL 数据库,需要配置以下环境变量:

docker run -d \
  --name license-admin \
  -p 8080:8080 \
  -e DB_HOST=your-mysql-host \
  -e DB_PORT=3306 \
  -e DB_USER=root \
  -e DB_PASSWORD=your-password \
  -e DB_NAME=license_admin \
  license-admin:latest

数据持久化

MySQL 数据通过 Docker volume 持久化。使用 Docker Compose 时会自动创建 mysql_data volume。

端口映射

默认端口为 8080,可以通过 -p 参数映射到其他端口:

-p 9000:8080  # 将容器 8080 端口映射到宿主机 9000 端口

🏥 健康检查

镜像内置了健康检查,每 30 秒检查一次:

# 查看健康状态
docker inspect --format='{{.State.Health.Status}}' license-admin

🐛 故障排查

容器无法启动

  1. 查看容器日志:

    docker logs license-admin
    
  2. 检查端口是否被占用:

    netstat -tuln | grep 8080
    

数据库连接问题

如果遇到数据库连接问题:

  1. 检查 MySQL 服务是否运行:

    docker ps | grep mysql
    
  2. 检查数据库连接配置:

    docker exec license-admin env | grep DB_
    
  3. 测试 MySQL 连接:

    docker exec -it license-admin-mysql mysql -u root -p
    
  4. 查看应用日志:

    docker logs license-admin
    

无法访问服务

  1. 检查容器是否运行:

    docker ps | grep license-admin
    
  2. 检查端口映射:

    docker port license-admin
    
  3. 检查防火墙设置

📝 生产环境建议

  1. 使用强密码 Token

    -e AUTH_TOKEN=$(openssl rand -hex 32)
    
  2. 使用 HTTPS

    • 在容器前放置反向代理(如 Nginx)
    • 配置 SSL 证书
  3. 定期备份数据库

    # 备份 MySQL 数据库
    docker exec license-admin-mysql mysqldump -u root -p license_admin > backup_$(date +%Y%m%d).sql
    
  4. 资源限制

    docker run -d \
     --name license-admin \
     --memory="512m" \
     --cpus="1.0" \
     -p 8080:8080 \
     license-admin:latest
    
  5. 使用 Docker Compose 管理

    • 便于配置管理
    • 支持自动重启
    • 便于扩展

🔐 安全建议

  1. 不要使用默认 Token

    • 生产环境必须修改 AUTH_TOKEN
    • 使用强随机密码
  2. 限制网络访问

    • 使用防火墙规则
    • 仅暴露必要端口
  3. 定期更新镜像

    • 关注安全更新
    • 定期重建镜像
  4. 数据加密

    • 考虑对数据库文件进行加密
    • 使用加密的 volume

📊 监控

查看资源使用

docker stats license-admin

查看容器信息

docker inspect license-admin

🎯 快速开始示例

# 1. 构建镜像
./build.sh

# 2. 创建数据目录
mkdir -p ./data

# 3. 运行容器
docker run -d \
  --name license-admin \
  -p 8080:8080 \
  -v $(pwd)/data:/app/data \
  -e AUTH_TOKEN=my-secret-token-123 \
  license-admin:latest

# 4. 访问服务
curl http://localhost:8080/health

# 5. 打开浏览器
open http://localhost:8080

注意: 首次运行会自动创建数据库文件。确保挂载的数据目录有写权限。