Skip to content

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/health

Docker 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_MODEGin 运行模式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:latest

Docker 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

基于 LGPL-3.0 许可证发布