Files
2025-09-18 22:45:06 +08:00

122 lines
3.6 KiB
Docker

# 使用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; \
\
# 配置阿里云Debian镜像源
echo "deb http://mirrors.aliyun.com/debian/ bookworm main non-free non-free-firmware" > /etc/apt/sources.list; \
echo "deb http://mirrors.aliyun.com/debian/ bookworm-updates main non-free non-free-firmware" >> /etc/apt/sources.list; \
echo "deb http://mirrors.aliyun.com/debian/ bookworm-backports main non-free non-free-firmware" >> /etc/apt/sources.list; \
echo "deb http://mirrors.aliyun.com/debian-security bookworm-security main non-free non-free-firmware" >> /etc/apt/sources.list; \
\
# 更新系统并安装基础工具
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 && \
\
# 设置GOPROXY为国内镜像加速后续的go get操作
go env -w GOPROXY=https://goproxy.cn,direct; \
go env -w GOSUMDB=off; \
\
# 简单的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"]