Sign inSign up

heyaotang/devcontainers

By heyaotang

•Updated 5 months ago

Image
0

210

heyaotang/devcontainers repository overview

# 1. Root 用户下场:负责搞地基、装系统级软件
FROM mcr.microsoft.com/devcontainers/base:ubuntu-24.04

# 切换到 root 执行系统级命令
USER root

# ==========================================
# A. 安装常用的底层工具和依赖
# ==========================================
RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \
    && apt-get install -y \
    git \
    iputils-ping \
    net-tools \
    curl \
    wget \
    zip \
    unzip \
    ripgrep \
    jq \
    build-essential \
    ca-certificates \
    gnupg \
    # 安装 JDK 所需的字体库和依赖 (避免无头模式下某些报错)
    fontconfig \
    locales \
    # 安装 SSH 并修改配置允许密码登录
    openssh-server \
    && sed -i 's/#PasswordAuthentication yes/PasswordAuthentication yes/g' /etc/ssh/sshd_config \
    && apt-get clean -y && rm -rf /var/lib/apt/lists/*

# ==========================================
# B. 安装 Amazon Corretto 21 (使用 SDKMAN 方案)
# ==========================================
# 设定 SDKMAN 目录
ENV SDKMAN_DIR="/usr/local/sdkman"

# 一键安装 SDKMAN,并通过它安装 Amazon Corretto 21
RUN curl -s "https://get.sdkman.io" | bash \
    && bash -c "source $SDKMAN_DIR/bin/sdkman-init.sh \
    && sdk install java 21.0.3-amzn \ 
    && sdk install maven 3.9.6" 
# 注意:我把 MAVEN 也放进 SDKMAN 里一起装了,这是 Java 圈最推荐的做法,自动配好环境变量!

# 把 Java 和 Maven 的路径加到全局环境变量里,确保所有用户都能用
ENV JAVA_HOME="/usr/local/sdkman/candidates/java/current"
ENV MAVEN_HOME="/usr/local/sdkman/candidates/maven/current"
ENV PATH="$JAVA_HOME/bin:$MAVEN_HOME/bin:$PATH"

# ==========================================
# C. 收尾工作
# ==========================================
# 确保工作目录属于 vscode 用户
ARG USERNAME=vscode
ARG USER_UID=1000
ARG USER_GID=1000
RUN mkdir -p /workspaces && chown -R ${USER_UID}:${USER_GID} /workspaces

# 给我们的 vscode 用户设定一个密码 (你可以把 123456 改成你想要的)
RUN echo "vscode:123456" | chpasswd

# 开放 22 端口
EXPOSE 22

# 切回普通用户 (这是容器的最终默认用户)
#USER vscode

COPY setup.sh /tmp/

# 让 SSH 在前台一直跑,Docker 就绝不会自动停止了!
#docker run --rm -it heyaotang/devcontainers:ubuntu-24.04-260417A tail -f /dev/null
#docker exec -it fc7959460b7237c6c64217547b77d3968da98ed91ebe31b3a5ce11018ebba39f /bin/bash
#docker cp .claude fc7959460b7237c6c64217547b77d3968da98ed91ebe31b3a5ce11018ebba39f:/tmp/.claude/

CMD ["echo", "hello"]
#!/bin/bash
set -e

echo "🚀 以普通用户身份配置用户级环境..."

# ==========================================
# NVM + Node.js 22 + NRM (这些必须在用户目录下)
# ==========================================
echo "🟢 安装 NVM 和 Node.js 22..."

# 安装 nvm 到用户目录
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash

# 加载 nvm
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"

# 安装 Node 22 并设为默认
nvm install 22
nvm alias default 22
echo "Node 版本: $(node -v)"
echo "NPM 版本: $(npm -v)"

# 安装 nrm 并切换淘宝镜像
echo "🚀 安装 nrm 并切换淘宝镜像..."
npm install -g nrm
nrm use taobao

npm i -g @anthropic-ai/[email protected]

echo "✅ 用户级环境配置完毕!准备开始战斗!"
{
  "name": "Safe & Ultimate Dev Environment",
  "build": {
    "dockerfile": "Dockerfile"
  },
  
  // 指定容器内用户的 UID 和 GID,与本地用户对齐,避免权限错乱
  "remoteUser": "vscode",
  "containerUser": "vscode",
  "updateRemoteUserUID": true,

  // 以 vscode 用户身份执行安装脚本
  "postCreateCommand": "bash .devcontainer/setup.sh",

  // 常用的 VS Code 插件,会自动安装到容器里
  "customizations": {
    "vscode": {
      "extensions": [
        "dbaeumer.vscode-eslint",
        "esbenp.prettier-vscode",
        "vscjava.vscode-java-pack"
      ]
    }
  }
}

Tag summary

Content type

Image

Digest

sha256:fcbc73329…

Size

739.7 MB

Last updated

5 months ago

docker pull heyaotang/devcontainers:ubuntu-24.04-260417B