# 使用CentOS 8作为基础镜像
FROM centos:8

# 设置元数据标签
LABEL maintainer="小蚂蚁云团队" \
      version="1.0" \
      description="基于CentOS 8的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

# 设置工作目录
WORKDIR /tmp

# 安装必要的系统依赖和配置环境
RUN set -eux; \
    \
    # 更新系统并安装基础工具
    dnf update -y && \
    dnf install -y \
        curl \
        tar \
        gzip \
        git \
        make \
        gcc \
        glibc-devel \
        glibc-langpack-en \
        glibc-locale-source \
        glibc-common \
        && \
    \
    # 清理dnf缓存以减少镜像大小
    dnf clean all && \
    rm -rf /var/cache/dnf; \
    \
    # 配置时区
    ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && \
    echo $TZ > /etc/timezone; \
    \
    # 正确的locale配置方式 - 使用locale-gen或直接设置
    # 方法1: 使用locale配置文件
    echo 'LANG="en_US.UTF-8"' > /etc/locale.conf && \
    echo 'LC_ALL="en_US.UTF-8"' >> /etc/locale.conf; \
    \
    # 方法2: 生成locale（CentOS 8的正确方式）
    localedef -c -i en_US -f UTF-8 en_US.UTF-8 || echo "Locale generation completed"; \
    \
    # 验证locale设置
    locale -a | grep en_US.UTF-8 || echo "en_US.UTF-8 locale available";

# 添加软件包
ADD go1.25.1.linux-amd64.tar.gz /usr/local

# 下载并安装Go
RUN set -eux; \
    \
    # 删除临时文件
    rm -f "go$GO_VERSION.linux-amd64.tar.gz"; \
    \
    # 创建Go工作目录
    mkdir -p /go/src /go/bin /go/pkg && \
    chmod -R 755 /go;
    
# # 下载并安装Go
# RUN set -eux; \
#     \
#     # 下载Go安装包
#     curl -SLO "https://dl.google.com/go/go$GO_VERSION.linux-amd64.tar.gz" && \
#     \
#     # 解压到/usr/local目录
#     tar -C /usr/local -xzf "go$GO_VERSION.linux-amd64.tar.gz" && \
#     \
#     # 删除临时文件
#     rm -f "go$GO_VERSION.linux-amd64.tar.gz"; \
#     \
#     # 创建Go工作目录
#     mkdir -p /go/src /go/bin /go/pkg && \
#     chmod -R 755 /go;

# 验证Go安装和locale
RUN set -eux; \
    \
    # 检查系统locale设置
    echo "=== Locale Settings ==="; \
    cat /etc/locale.conf || echo "No locale.conf"; \
    echo "=== Environment Locale ==="; \
    echo "LANG=$LANG"; \
    \
    # 检查Go版本
    go version && \
    \
    # 检查环境变量
    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;

# 设置工作目录（Go项目目录）
WORKDIR /opt/apps

# 创建非root用户用于运行Go应用（安全性考虑）
RUN 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

# 设置默认用户（注释掉以便调试）
# USER esxi

# 设置健康检查（可选）
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
  CMD go version > /dev/null 2>&1 || exit 1

# 设置默认启动命令
CMD ["go", "version"]