1+ FROM ubuntu:22.04
2+
3+ # 避免交互式提示
4+ ENV DEBIAN_FRONTEND=noninteractive
5+
6+ # 设置时区
7+ ENV TZ=Asia/Shanghai
8+ RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
9+
10+ # 安装基础工具和依赖
11+ RUN apt-get update && apt-get install -y \
12+ sudo \
13+ curl \
14+ wget \
15+ git \
16+ vim \
17+ bash \
18+ build-essential \
19+ software-properties-common \
20+ apt-transport-https \
21+ ca-certificates \
22+ gnupg \
23+ lsb-release \
24+ zsh \
25+ tmux \
26+ htop \
27+ tree \
28+ jq \
29+ unzip \
30+ openssh-client \
31+ postgresql-client \
32+ redis-tools \
33+ make \
34+ gcc \
35+ g++ \
36+ libssl-dev \
37+ zlib1g-dev \
38+ libbz2-dev \
39+ libreadline-dev \
40+ libsqlite3-dev \
41+ libncursesw5-dev \
42+ xz-utils \
43+ tk-dev \
44+ libxml2-dev \
45+ libxmlsec1-dev \
46+ libffi-dev \
47+ liblzma-dev \
48+ && rm -rf /var/lib/apt/lists/*
49+
50+ # 创建非root用户
51+ RUN useradd -m -s /bin/bash zerocat \
52+ && echo "zerocat ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/zerocat \
53+ && chmod 0440 /etc/sudoers.d/zerocat
54+
55+ # 设置工作目录
56+ WORKDIR /home/zerocat
57+
58+ # 安装 pyenv
59+ USER zerocat
60+ RUN curl https://pyenv.run | bash
61+ ENV PYENV_ROOT="/home/zerocat/.pyenv"
62+ ENV PATH="$PYENV_ROOT/bin:$PATH"
63+ RUN echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc && \
64+ echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc && \
65+ echo 'eval "$(pyenv init --path)"' >> ~/.bashrc && \
66+ echo 'eval "$(pyenv init -)"' >> ~/.bashrc
67+
68+ # 使用 pyenv 安装 Python 版本并安装包
69+ SHELL ["/bin/bash" , "-l" , "-c" ]
70+ RUN pyenv install 3.8.18 && \
71+ pyenv install 3.11.8 && \
72+ pyenv global 3.11.8 && \
73+ eval "$(pyenv init -)" && \
74+ eval "$(pyenv init --path)" && \
75+ $PYENV_ROOT/versions/3.11.8/bin/python -m pip install --upgrade pip && \
76+ $PYENV_ROOT/versions/3.11.8/bin/python -m pip install \
77+ ipython \
78+ poetry \
79+ virtualenv \
80+ black \
81+ flake8 \
82+ mypy \
83+ pytest \
84+ requests
85+
86+ # 安装 nvm
87+ ENV NVM_DIR="/home/zerocat/.nvm"
88+ RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash \
89+ && . "$NVM_DIR/nvm.sh" \
90+ && nvm install 16 \
91+ && nvm install 18 \
92+ && nvm alias default 18 \
93+ && nvm use default \
94+ && npm install -g yarn pnpm typescript ts-node
95+
96+ # 设置权限
97+ USER root
98+ RUN chown -R zerocat:zerocat /home/zerocat
99+
100+ # 切换到非root用户
101+ USER zerocat
102+
103+ # 设置SHELL环境变量
104+ ENV SHELL=/bin/bash
105+
106+ # 配置终端
107+ RUN echo 'export PS1="\[\e [01;32m\]\u @\h\[\e [0m\] :\[\e [01;34m\]\w\[\e [0m\]\$ "' >> ~/.bashrc
108+
109+ # 添加环境变量到 .bashrc
110+ RUN echo 'export NVM_DIR="$HOME/.nvm"' >> ~/.bashrc \
111+ && echo '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"' >> ~/.bashrc \
112+ && echo '[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"' >> ~/.bashrc
113+
114+ # 设置容器启动命令
115+ CMD ["/bin/bash" , "-l" ]
0 commit comments