# 使用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"]