Golang服务器自动重编译与自动重启的Docker镜像(基于1.13.3版本)

Golang服务器自动重编译与自动重启的Docker镜像(基于1.13.3版本)

  • 已更新至 Golang 1.13.3
  • 已开始对镜像进行标记以支持版本管理
  • 如果您喜欢它,请在 GitHub 和 Docker Hub 上为其加星

GitHub

acim/go-reflex

用于自动重新编译和自动重启 Golang 服务器的 Docker 镜像 - acim/go-reflex

https://hub.docker.com/r/acim/go-reflex


更多关于Golang服务器自动重编译与自动重启的Docker镜像(基于1.13.3版本)的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于Golang服务器自动重编译与自动重启的Docker镜像(基于1.13.3版本)的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


这是一个非常实用的Docker镜像项目,专门为Golang开发环境提供了自动重编译和重启功能。基于Golang 1.13.3版本,这个镜像通过集成reflex工具实现了文件监控和自动构建。

核心功能实现

这个镜像的核心是利用reflex监控文件变化并触发重新编译。以下是典型的Dockerfile实现:

FROM golang:1.13.3-alpine

# 安装 reflex 工具
RUN go install github.com/cespare/reflex@latest

# 设置工作目录
WORKDIR /app

# 复制go.mod和go.sum(如果存在)
COPY go.mod go.sum ./
RUN go mod download

# 复制源代码
COPY . .

# 设置默认的reflex命令
CMD ["reflex", "-r", "\\.go$", "-s", "--", "go", "run", "main.go"]

使用示例

1. 基本使用

# 拉取镜像
docker pull acim/go-reflex:1.13.3

# 运行容器
docker run -it --rm \
  -v $(pwd):/app \
  -p 8080:8080 \
  acim/go-reflex:1.13.3

2. 自定义监控配置

# 使用自定义reflex配置
docker run -it --rm \
  -v $(pwd):/app \
  -p 8080:8080 \
  acim/go-reflex:1.13.3 \
  reflex -r '\.(go|html)$' -s -- sh -c 'go build -o app && ./app'

3. Docker Compose配置

version: '3.8'
services:
  go-dev:
    image: acim/go-reflex:1.13.3
    ports:
      - "8080:8080"
    volumes:
      - ./:/app
    environment:
      - GO111MODULE=on
    command: reflex -r '\.go$' -s -- go run main.go

高级监控配置

如果需要更复杂的监控逻辑,可以创建.reflex.conf配置文件:

# .reflex.conf
patterns:
  - regex: \.go$
    command: go build -o app && ./app
    delay: 100ms
  
  - regex: \.(html|css|js)$
    command: echo "Frontend file changed"
    delay: 200ms

然后在Docker中使用:

docker run -it --rm \
  -v $(pwd):/app \
  -v $(pwd)/.reflex.conf:/app/.reflex.conf \
  acim/go-reflex:1.13.3 \
  reflex -c .reflex.conf

性能优化建议

对于大型项目,可以启用增量构建:

# 使用go install进行增量构建
docker run -it --rm \
  -v $(pwd):/app \
  acim/go-reflex:1.13.3 \
  reflex -r '\.go$' -s -- sh -c 'go install ./... && app'

这个镜像特别适合需要快速迭代的Golang API服务开发,通过容器化的开发环境确保了一致性,同时提供了实时的代码重载功能。

回到顶部