Docker 部署
使用 Docker 是部署 GoSpeedTest 最简单快捷的方式。
前置条件
- Docker 已安装并运行
- 足够的磁盘空间
- 网络连接
快速开始
拉取镜像
bash
docker pull liumou/gospeedtest:latest运行容器
bash
docker run -d \
--name gospeedtest \
-p 8080:8080 \
-p 12306:12306 \
liumou/gospeedtest:latest验证部署
bash
# 查看容器状态
docker ps
# 查看日志
docker logs gospeedtest
# 访问服务
curl http://localhost:8080/healthDocker Compose
创建 docker-compose.yml
yaml
version: '3.8'
services:
gospeedtest:
image: liumou/gospeedtest:latest
container_name: gospeedtest
restart: unless-stopped
ports:
- "8080:8080"
- "12306:12306"
environment:
- GIN_MODE=release
command: ["-port", "8080", "-mode", "release"]
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8080/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 5s启动服务
bash
# 启动
docker-compose up -d
# 查看状态
docker-compose ps
# 查看日志
docker-compose logs -f
# 停止
docker-compose down
# 停止并删除数据
docker-compose down -v自定义配置
环境变量
| 变量 | 说明 | 默认值 |
|---|---|---|
GIN_MODE | Gin 运行模式 | debug |
命令行参数
bash
docker run -d \
--name gospeedtest \
-p 8080:8080 \
-p 12345:12345 \
liumou/gospeedtest:latest \
-port 8080 \
-tcp-port 12345 \
-mode release数据持久化
日志目录
bash
docker run -d \
--name gospeedtest \
-p 8080:8080 \
-p 12306:12306 \
-v ./logs:/app/logs \
liumou/gospeedtest:latest网络配置
主机网络模式
bash
docker run -d \
--name gospeedtest \
--network host \
liumou/gospeedtest:latest自定义网络
bash
# 创建网络
docker network create gospeedtest-net
# 运行容器
docker run -d \
--name gospeedtest \
--network gospeedtest-net \
-p 8080:8080 \
-p 12306:12306 \
liumou/gospeedtest:latest资源限制
CPU 和内存限制
bash
docker run -d \
--name gospeedtest \
-p 8080:8080 \
-p 12306:12306 \
--cpus=2 \
--memory=1g \
--memory-swap=2g \
liumou/gospeedtest:latestDocker Compose 资源限制
yaml
version: '3.8'
services:
gospeedtest:
image: liumou/gospeedtest:latest
deploy:
resources:
limits:
cpus: '2'
memory: 1G
reservations:
cpus: '0.5'
memory: 512M安全配置
只读文件系统
bash
docker run -d \
--name gospeedtest \
-p 8080:8080 \
-p 12306:12306 \
--read-only \
--tmpfs /tmp \
liumou/gospeedtest:latest用户隔离
bash
docker run -d \
--name gospeedtest \
-p 8080:8080 \
-p 12306:12306 \
--user 65534:65534 \
--cap-drop all \
liumou/gospeedtest:latest监控和维护
查看日志
bash
# 查看实时日志
docker logs -f gospeedtest
# 查看最近 100 行
docker logs --tail 100 gospeedtest
# 查看最近 1 小时的日志
docker logs --since 1h gospeedtest健康检查
bash
# 手动健康检查
docker exec gospeedtest curl -f http://localhost:8080/health
# 查看健康状态
docker inspect --format='{{.State.Health.Status}}' gospeedtest更新镜像
bash
# 停止容器
docker stop gospeedtest
# 删除容器
docker rm gospeedtest
# 拉取最新镜像
docker pull liumou/gospeedtest:latest
# 重新启动
docker run -d \
--name gospeedtest \
-p 8080:8080 \
-p 12306:12306 \
liumou/gospeedtest:latest使用 Watchtower 自动更新
bash
docker run -d \
--name watchtower \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower \
--interval 3600 \
gospeedtest构建自定义镜像
Dockerfile
dockerfile
FROM golang:1.21-alpine AS builder
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 go build -o GoSpeedTest server.go
FROM alpine:latest
RUN apk --no-cache add ca-certificates
WORKDIR /app
COPY --from=builder /app/GoSpeedTest .
EXPOSE 8080 12306
CMD ["./GoSpeedTest", "-port", "8080", "-mode", "release"]构建镜像
bash
docker build -t my-gospeedtest .运行自定义镜像
bash
docker run -d \
--name my-gospeedtest \
-p 8080:8080 \
-p 12306:12306 \
my-gospeedtest多平台部署
支持的平台
- linux/amd64
- linux/arm64
- linux/arm/v7
拉取特定平台镜像
bash
docker pull --platform linux/arm64 liumou/gospeedtest:latest故障排除
容器无法启动
bash
# 查看容器状态
docker ps -a
# 查看日志
docker logs gospeedtest
# 检查端口占用
netstat -tlnp | grep 8080网络问题
bash
# 检查容器网络
docker network inspect bridge
# 进入容器调试
docker exec -it gospeedtest sh
# 测试网络连接
docker exec gospeedtest wget -O- http://localhost:8080/health性能问题
bash
# 查看资源使用
docker stats gospeedtest
# 查看详细信息
docker inspect gospeedtest