添加镜像支持

main
huyinsong 3 days ago
parent f374898c6e
commit a6a3c45194
  1. 21
      Makefile
  2. 16
      README.md
  3. 184
      docker/DOCKER_GUIDE.md
  4. 0
      docker/Dockerfile
  5. 73
      docker/README.md
  6. 13
      docker/docker-compose.yml
  7. 77
      test_docker.sh

@ -1,6 +1,6 @@
# Hyperledger Fabric Asset Transfer API Makefile
.PHONY: help build run test clean swagger docker-build docker-run lint fmt vet tidy env-setup
.PHONY: help build run test clean swagger docker-build docker-run docker-compose-up docker-compose-down docker-compose-logs lint fmt vet tidy env-setup
# Default target
help: ## Show this help message
@ -23,7 +23,7 @@ env-setup: ## Setup environment configuration files
# Build the application
build: ## Build the application binary
@echo "Building application..."
go build -o bin/asset-transfer-api cmd/server/main.go
go build -o bin/spiderman cmd/server/main.go
# Run the application
run: ## Run the application
@ -65,7 +65,7 @@ swagger: ## Generate swagger documentation
# Build docker image
docker-build: ## Build docker image
@echo "Building docker image..."
docker build -t spiderman .
docker build -t spiderman -f docker/Dockerfile .
# Run docker container
docker-run: ## Run docker container
@ -77,6 +77,21 @@ docker-run-dev: ## Run docker container in development mode
@echo "Running docker container in development mode..."
docker run -p 8080:8080 -e ENVIRONMENT=development spiderman
# Run with docker-compose
docker-compose-up: ## Run with docker-compose
@echo "Starting services with docker-compose..."
cd docker && docker-compose up -d
# Stop docker-compose services
docker-compose-down: ## Stop docker-compose services
@echo "Stopping docker-compose services..."
cd docker && docker-compose down
# View docker-compose logs
docker-compose-logs: ## View docker-compose logs
@echo "Viewing docker-compose logs..."
cd docker && docker-compose logs -f
# Run linting
lint: ## Run golangci-lint
@echo "Running linter..."

@ -368,23 +368,23 @@ curl -X PUT http://localhost:8080/api/v1/assets/asset123/transfer \
```bash
# 构建镜像
docker build -t asset-transfer-api .
docker build -t spiderman -f docker/Dockerfile .
# 运行容器
docker run -p 8080:8080 asset-transfer-api
docker run -p 8080:8080 spiderman
```
### 使用Docker Compose
```bash
# 启动服务
docker-compose up -d
cd docker && docker-compose up -d
# 查看日志
docker-compose logs -f
cd docker && docker-compose logs -f
# 停止服务
docker-compose down
cd docker && docker-compose down
```
## 项目结构
@ -400,8 +400,10 @@ docker-compose down
│ └── swagger.yaml # YAML格式API规范
├── go.mod # Go模块配置
├── go.sum # 依赖项校验和
├── Dockerfile # Docker镜像构建文件
├── docker-compose.yml # Docker Compose配置
├── docker/ # Docker相关文件
│ ├── Dockerfile # Docker镜像构建文件
│ ├── docker-compose.yml # Docker Compose配置
│ └── DOCKER_GUIDE.md # Docker使用指南
├── start.sh # 启动脚本
├── test_api.sh # API测试脚本
└── README.md # 项目文档

@ -0,0 +1,184 @@
# Spiderman Docker 使用指南
## 镜像信息
- **镜像名称**: `spiderman`
- **镜像大小**: 66.2MB
- **版本标签**: `latest`, `v1.0.0`
- **基础镜像**: Alpine Linux 3.18
- **Go版本**: 1.23
## 构建Docker镜像
### 1. 构建镜像
```bash
docker build -t spiderman:latest .
```
### 2. 构建并添加版本标签
```bash
docker build -t spiderman:latest .
docker tag spiderman:latest spiderman:v1.0.0
```
## 运行Docker容器
### 1. 基本运行
```bash
docker run -p 8080:8080 spiderman:latest
```
### 2. 后台运行
```bash
docker run -d -p 8080:8080 --name spiderman-api spiderman:latest
```
### 3. 环境变量配置运行
```bash
docker run -p 8080:8080 \
-e PORT=8080 \
-e CHAINCODE_NAME=basic \
-e CHANNEL_NAME=mychannel \
-e LOG_LEVEL=info \
-e LOG_FORMAT=json \
spiderman:latest
```
### 4. 挂载Fabric证书目录
```bash
docker run -p 8080:8080 \
-v /path/to/crypto-config:/crypto-config:ro \
-v /path/to/test-network:/test-network:ro \
spiderman:latest
```
## 使用Docker Compose
### 启动服务
```bash
docker-compose up -d
```
### 查看日志
```bash
docker-compose logs -f spiderman-api
```
### 停止服务
```bash
docker-compose down
```
## 健康检查
容器包含内置健康检查,每30秒检查一次API健康状态:
```bash
# 检查容器健康状态
docker ps
# 或
docker inspect --format='{{.State.Health.Status}}' <container_id>
```
## 端口说明
- **8080**: API服务端口
- **健康检查**: `GET /health`
- **Swagger文档**: `GET /swagger/index.html`
## 容器特性
- ✅ 多阶段构建,最小化镜像大小
- ✅ 非root用户运行,增强安全性
- ✅ 内置健康检查
- ✅ CA证书支持HTTPS请求
- ✅ 支持环境变量配置
## 环境变量
| 变量名 | 默认值 | 说明 |
|--------|--------|------|
| `PORT` | 8080 | API服务端口 |
| `CHAINCODE_NAME` | basic | 链码名称 |
| `CHANNEL_NAME` | mychannel | 通道名称 |
| `LOG_LEVEL` | info | 日志级别 |
| `LOG_FORMAT` | text | 日志格式 |
| `CRYPTO_PATH` | /crypto-config | 证书路径 |
| `PEER_ENDPOINT` | localhost:7051 | Peer节点地址 |
| `GATEWAY_PEER` | peer0.org1.example.com | 网关Peer |
| `MSPID` | Org1MSP | MSP ID |
## 容器管理
### 查看运行中的容器
```bash
docker ps | grep spiderman
```
### 查看容器日志
```bash
docker logs <container_id>
```
### 进入容器
```bash
docker exec -it <container_id> /bin/sh
```
### 停止容器
```bash
docker stop <container_id>
```
### 删除容器
```bash
docker rm <container_id>
```
## 镜像管理
### 查看镜像
```bash
docker images | grep spiderman
```
### 删除镜像
```bash
docker rmi spiderman:latest
```
### 导出镜像
```bash
docker save spiderman:latest -o spiderman.tar
```
### 导入镜像
```bash
docker load -i spiderman.tar
```
## 故障排除
### 1. 容器启动失败
```bash
# 查看容器日志
docker logs <container_id>
# 检查环境变量
docker inspect <container_id>
```
### 2. 网络连接问题
```bash
# 检查端口映射
docker port <container_id>
# 检查网络连接
docker exec -it <container_id> wget -O- http://localhost:8080/health
```
### 3. 证书路径问题
```bash
# 检查挂载的证书目录
docker exec -it <container_id> ls -la /crypto-config
```

@ -0,0 +1,73 @@
# Docker 配置文件
这个目录包含了Spiderman项目的所有Docker相关配置文件。
## 文件说明
### Dockerfile
多阶段构建的Docker镜像配置文件:
- 基于Alpine Linux,镜像大小仅66.2MB
- 非root用户运行,增强安全性
- 内置健康检查
- 支持环境变量配置
### docker-compose.yml
Docker Compose服务编排配置:
- 服务名:`spiderman-api`
- 端口映射:`8888:8888`
- 环境变量配置
- 健康检查
- 重启策略
### DOCKER_GUIDE.md
详细的Docker使用指南,包含:
- 镜像构建说明
- 容器运行方法
- 环境变量配置
- 故障排除指南
## 快速开始
### 构建镜像
```bash
# 在项目根目录执行
docker build -t spiderman -f docker/Dockerfile .
```
### 运行容器
```bash
# 单独运行
docker run -p 8888:8888 spiderman
# 使用docker-compose
cd docker && docker-compose up -d
```
### 使用Makefile
```bash
# 构建镜像
make docker-build
# 运行容器
make docker-run
# 使用docker-compose
make docker-compose-up
```
## 端口说明
- **8888**: API服务端口(可通过环境变量PORT修改)
- **健康检查**: `GET /health`
- **Swagger文档**: `GET /swagger/index.html`
## 环境变量
主要环境变量配置:
- `PORT`: 服务端口 (默认: 8888)
- `CHAINCODE_NAME`: 链码名称 (默认: basic)
- `CHANNEL_NAME`: 通道名称 (默认: mychannel)
- `LOG_LEVEL`: 日志级别 (默认: info)
- `LOG_FORMAT`: 日志格式 (默认: json)
详细配置请参考 `DOCKER_GUIDE.md`

@ -1,12 +1,12 @@
version: '3.8'
services:
asset-transfer-api:
build: .
spiderman-api:
image: spiderman:latest
ports:
- "8080:8080"
- "8888:8888"
environment:
- PORT=8080
- PORT=8888
- CHAINCODE_NAME=basic
- CHANNEL_NAME=mychannel
- LOG_LEVEL=info
@ -18,12 +18,11 @@ services:
- fabric-network
restart: unless-stopped
healthcheck:
test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost:8080/health"]
test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost:8888/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
networks:
fabric-network:
external: true
fabric-network:

@ -0,0 +1,77 @@
#!/bin/bash
echo "=== Spiderman Docker 镜像测试 ==="
echo
# 检查Docker是否运行
if ! docker info > /dev/null 2>&1; then
echo "❌ Error: Docker is not running"
exit 1
fi
# 检查镜像是否存在
if ! docker images | grep -q "spiderman"; then
echo "❌ Error: spiderman Docker image not found"
echo "Please run: docker build -t spiderman:latest -f docker/Dockerfile ."
exit 1
fi
echo "✅ Docker is running"
echo "✅ Spiderman image found"
echo
# 显示镜像信息
echo "📋 Image Information:"
docker images | head -n 1
docker images | grep spiderman
echo
# 检查镜像大小
IMAGE_SIZE=$(docker images spiderman:latest --format "{{.Size}}")
echo "📏 Image Size: $IMAGE_SIZE"
echo
# 测试容器启动(快速测试)
echo "🚀 Testing container startup..."
CONTAINER_ID=$(docker run -d -p 8888:8080 spiderman:latest)
if [ $? -eq 0 ]; then
echo "✅ Container started successfully"
echo "📦 Container ID: $CONTAINER_ID"
# 等待容器启动
echo "⏳ Waiting for container to be ready..."
sleep 3
# 检查容器状态
STATUS=$(docker ps --filter "id=$CONTAINER_ID" --format "{{.Status}}")
echo "📊 Container Status: $STATUS"
# 测试健康检查端点(如果容器正在运行)
if docker ps | grep -q $CONTAINER_ID; then
echo "🏥 Testing health endpoint..."
# 注意:这需要容器能够正常启动,如果没有Fabric网络可能会失败
# docker exec $CONTAINER_ID wget -O- http://localhost:8080/health 2>/dev/null || echo "⚠ Health check failed (expected without Fabric network)"
echo "⚠ Health check skipped (requires Fabric network configuration)"
fi
# 清理容器
echo "🧹 Cleaning up test container..."
docker stop $CONTAINER_ID > /dev/null
docker rm $CONTAINER_ID > /dev/null
echo "✅ Test container cleaned up"
else
echo "❌ Container failed to start"
exit 1
fi
echo
echo "=== 测试完成 ==="
echo "✅ Docker镜像构建成功!"
echo
echo "使用方法:"
echo " docker run -p 8080:8080 spiderman:latest"
echo " cd docker && docker-compose up -d"
echo
echo "更多信息请查看 docker/DOCKER_GUIDE.md"
Loading…
Cancel
Save