本文档说明如何将 License Admin 项目打包成 Linux x86_64 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 up -d --build
# 仅构建
docker-compose build
# 方式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
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 |
否 |
# 创建数据目录
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 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 数据库,需要配置以下环境变量:
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
查看容器日志:
docker logs license-admin
检查端口是否被占用:
netstat -tuln | grep 8080
如果遇到数据库连接问题:
检查 MySQL 服务是否运行:
docker ps | grep mysql
检查数据库连接配置:
docker exec license-admin env | grep DB_
测试 MySQL 连接:
docker exec -it license-admin-mysql mysql -u root -p
查看应用日志:
docker logs license-admin
检查容器是否运行:
docker ps | grep license-admin
检查端口映射:
docker port license-admin
检查防火墙设置
使用强密码 Token
-e AUTH_TOKEN=$(openssl rand -hex 32)
使用 HTTPS
定期备份数据库
# 备份 MySQL 数据库
docker exec license-admin-mysql mysqldump -u root -p license_admin > backup_$(date +%Y%m%d).sql
资源限制
docker run -d \
--name license-admin \
--memory="512m" \
--cpus="1.0" \
-p 8080:8080 \
license-admin:latest
使用 Docker Compose 管理
不要使用默认 Token
AUTH_TOKEN限制网络访问
定期更新镜像
数据加密
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
注意: 首次运行会自动创建数据库文件。确保挂载的数据目录有写权限。