# 使用Debian 12 (bookworm) 最小化镜像作为基础 FROM debian:bookworm-slim # 设置元数据标签 LABEL maintainer="小蚂蚁云团队" \ version="1.0" \ description="基于Debian的Go语言运行环境" \ golang.version="1.25.1" # 设置环境变量 ENV GO_VERSION=1.25.1 \ GOPATH=/go \ GOROOT=/usr/local/go \ PATH=/usr/local/go/bin:/go/bin:${PATH} \ TZ=Asia/Shanghai \ LANG=en_US.UTF-8 \ LC_ALL=en_US.UTF-8 \ DEBIAN_FRONTEND=noninteractive # 设置工作目录 WORKDIR /tmp # 安装必要的系统依赖和配置环境 RUN set -eux; \ \ # 更新系统并安装基础工具 apt-get update && \ apt-get install -y --no-install-recommends \ ca-certificates \ curl \ tar \ gzip \ git \ make \ gcc \ libc6-dev \ locales \ && \ \ # 配置时区 ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && \ echo $TZ > /etc/timezone; \ \ # 设置语言环境(Debian方式) echo "en_US.UTF-8 UTF-8" > /etc/locale.gen && \ echo "zh_CN.UTF-8 UTF-8" >> /etc/locale.gen && \ locale-gen && \ update-locale LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8; \ \ # 清理apt缓存以减少镜像大小 apt-get clean && \ rm -rf /var/lib/apt/lists/* # 添加Go安装包(确保go1.25.1.linux-amd64.tar.gz在构建上下文) ADD go1.25.1.linux-amd64.tar.gz /usr/local/ # 创建Go工作目录和配置 RUN set -eux; \ \ # 创建Go工作目录 mkdir -p /go/src /go/bin /go/pkg && \ chmod -R 755 /go; \ \ # 验证Go安装 echo "=== 验证Go安装 ==="; \ echo "Go二进制路径: $(which go)"; \ echo "=== Go Version ==="; \ go version && \ \ # 检查环境变量 echo "=== Go Environment ==="; \ go env && \ \ # 简单的Go程序编译测试 echo 'package main; import "fmt"; func main() { fmt.Println("Go环境安装成功!") }' > /tmp/test.go && \ go run /tmp/test.go && \ rm -f /tmp/test.go; \ \ # 验证locale设置 echo "=== Locale验证 ==="; \ echo "系统Locale: $(locale)"; \ echo "环境变量LANG: $LANG"; \ echo "环境变量LC_ALL: $LC_ALL" # 设置工作目录(Go项目目录) WORKDIR /opt/apps # 创建非root用户用于运行Go应用(安全性考虑) RUN set -eux; \ \ # 创建用户和组 groupadd -r esxi && \ useradd -r -g esxi -d /opt/apps -s /bin/bash esxi && \ \ # 设置目录权限 chown -R esxi:esxi /opt/apps && \ chown -R esxi:esxi /go; \ \ # 验证用户创建 echo "=== 用户验证 ==="; \ id esxi && \ echo "家目录权限: $(ls -ld /opt/apps)" # 设置默认用户(注释掉以便调试) # USER esxi # 设置健康检查(可选) HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \ CMD go version > /dev/null 2>&1 || exit 1 # 设置默认启动命令 CMD ["go", "version"]