2025-09-18 22:06:42 +08:00

112 lines
2.9 KiB
Docker
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.

# 使用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; \
\
# 更新系统并安装基础工具
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 && \
\
# 简单的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"]