101 lines
2.6 KiB
Docker
101 lines
2.6 KiB
Docker
# 使用 RockyLinux 8 最小化镜像作为基础
|
|
FROM rockylinux:8.9-minimal
|
|
|
|
# 设置元数据标签
|
|
LABEL maintainer="小蚂蚁云团队" \
|
|
version="1.0" \
|
|
description="基于RockyLinux 8的Go语言运行环境" \
|
|
golang.version="1.27.2"
|
|
|
|
# 设置环境变量
|
|
ENV GO_VERSION=1.27.2 \
|
|
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; \
|
|
\
|
|
# 更新系统并安装基础工具(包括shadow-utils用于用户管理)
|
|
microdnf update -y && \
|
|
microdnf install -y \
|
|
curl \
|
|
tar \
|
|
gzip \
|
|
git \
|
|
make \
|
|
gcc \
|
|
glibc-devel \
|
|
glibc-langpack-en \
|
|
shadow-utils \
|
|
&& \
|
|
\
|
|
# 清理缓存以减少镜像大小
|
|
microdnf clean all && \
|
|
rm -rf /var/cache/dnf; \
|
|
\
|
|
# 配置时区
|
|
ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && \
|
|
echo $TZ > /etc/timezone; \
|
|
\
|
|
# 设置语言环境
|
|
echo 'LANG="en_US.UTF-8"' > /etc/locale.conf && \
|
|
echo 'LC_ALL="en_US.UTF-8"' >> /etc/locale.conf;
|
|
|
|
# 添加Go安装包(确保go1.27.2.linux-amd64.tar.gz在构建上下文)
|
|
ADD go1.27.2.linux-amd64.tar.gz /usr/local/
|
|
|
|
# 创建Go工作目录和配置locale
|
|
RUN set -eux; \
|
|
\
|
|
# 创建Go工作目录
|
|
mkdir -p /go/src /go/bin /go/pkg && \
|
|
chmod -R 755 /go; \
|
|
\
|
|
# 检查系统locale设置
|
|
echo "=== Locale Settings ==="; \
|
|
cat /etc/locale.conf || echo "No locale.conf"; \
|
|
echo "=== Environment Locale ==="; \
|
|
echo "LANG=$LANG"; \
|
|
\
|
|
# 检查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;
|
|
|
|
# 设置工作目录(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;
|
|
|
|
# 设置默认用户(注释掉以便调试)
|
|
# USER esxi
|
|
|
|
# 设置健康检查(可选)
|
|
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
|
|
CMD go version > /dev/null 2>&1 || exit 1
|
|
|
|
# 设置默认启动命令
|
|
CMD ["go", "version"] |