2025-09-16 21:25:24 +08:00

124 lines
3.2 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 使用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: 生成localeCentOS 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"]