# Docker 构建和使用指南 本文档说明如何将 License Admin 项目打包成 Linux x86_64 Docker 镜像并运行。 ## 📦 构建 Docker 镜像 ### 前置要求 **重要:** Dockerfile 已简化为仅复制已构建的二进制文件,因此需要先编译好二进制文件。 ### 方法一:使用构建脚本(推荐) 构建脚本会自动检查并编译二进制文件(如果不存在): ```bash # 给脚本添加执行权限 chmod +x build.sh # 构建 latest 版本(会自动编译二进制文件) ./build.sh # 构建指定版本 ./build.sh v1.0.0 # 构建并指定注册表(用于推送到 Docker Hub 或其他注册表) ./build.sh v1.0.0 your-registry.com ``` ### 方法二:手动编译后构建镜像 ```bash # 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 ```bash # 构建并启动 docker-compose up -d --build # 仅构建 docker-compose build ``` ## 🚀 运行容器 ### 基本运行(需要先启动 MySQL) ```bash # 方式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 和数据库配置 ```bash 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 ```bash # 创建数据目录 mkdir -p ./data # 设置环境变量(可选) export AUTH_TOKEN=your-secret-token # 启动服务 docker-compose up -d # 查看日志 docker-compose logs -f # 停止服务 docker-compose down ``` ## 🔍 查看和管理 ### 查看容器状态 ```bash docker ps | grep license-admin ``` ### 查看日志 ```bash # 实时日志 docker logs -f license-admin # 最近 100 行日志 docker logs --tail 100 license-admin ``` ### 进入容器 ```bash docker exec -it license-admin sh ``` ### 停止和删除容器 ```bash # 停止容器 docker stop license-admin # 删除容器 docker rm license-admin # 停止并删除 docker rm -f license-admin ``` ## 📤 推送镜像到注册表 ### 推送到 Docker Hub ```bash # 登录 Docker Hub docker login # 标记镜像 docker tag license-admin:latest your-username/license-admin:latest # 推送镜像 docker push your-username/license-admin:latest ``` ### 推送到私有注册表 ```bash # 标记镜像 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 数据库,需要配置以下环境变量: ```bash 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` 参数映射到其他端口: ```bash -p 9000:8080 # 将容器 8080 端口映射到宿主机 9000 端口 ``` ## 🏥 健康检查 镜像内置了健康检查,每 30 秒检查一次: ```bash # 查看健康状态 docker inspect --format='{{.State.Health.Status}}' license-admin ``` ## 🐛 故障排查 ### 容器无法启动 1. 查看容器日志: ```bash docker logs license-admin ``` 2. 检查端口是否被占用: ```bash netstat -tuln | grep 8080 ``` ### 数据库连接问题 如果遇到数据库连接问题: 1. 检查 MySQL 服务是否运行: ```bash docker ps | grep mysql ``` 2. 检查数据库连接配置: ```bash docker exec license-admin env | grep DB_ ``` 3. 测试 MySQL 连接: ```bash docker exec -it license-admin-mysql mysql -u root -p ``` 4. 查看应用日志: ```bash docker logs license-admin ``` ### 无法访问服务 1. 检查容器是否运行: ```bash docker ps | grep license-admin ``` 2. 检查端口映射: ```bash docker port license-admin ``` 3. 检查防火墙设置 ## 📝 生产环境建议 1. **使用强密码 Token** ```bash -e AUTH_TOKEN=$(openssl rand -hex 32) ``` 2. **使用 HTTPS** - 在容器前放置反向代理(如 Nginx) - 配置 SSL 证书 3. **定期备份数据库** ```bash # 备份 MySQL 数据库 docker exec license-admin-mysql mysqldump -u root -p license_admin > backup_$(date +%Y%m%d).sql ``` 4. **资源限制** ```bash 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 ## 📊 监控 ### 查看资源使用 ```bash docker stats license-admin ``` ### 查看容器信息 ```bash docker inspect license-admin ``` ## 🎯 快速开始示例 ```bash # 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 ``` --- **注意:** 首次运行会自动创建数据库文件。确保挂载的数据目录有写权限。