FROM nvidia/cuda:12.4.1-devel-ubuntu22.04 ENV LANG C.UTF-8 ENV TZ Asia/Tokyo # ============ # System packages # ============ # Collect packages RUN apt update \ && DEBIAN_FRONTEND=noninteractive apt install -y --no-install-recommends sudo wget curl ssh git zip locales ed less neovim ca-certificates jq python3 python3-pip python3-venv build-essential python3-poetry pipx libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev curl libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev # ============ # User settings # ============ ARG USER_NAME=vscode ARG UID=1000 ARG GROUP_NAME=vscode ARG GID=1000 ARG GID_WHEEL=999 ARG USER_SHELL=/bin/bash ARG HOME="/home/${USER_NAME}" ARG LOCAL_BIN="${HOME}/.local/bin" ENV XDG_CONFIG_HOME="${HOME}/.config" ENV XDG_CACHE_HOME="${HOME}/.cache" ENV XDG_DATA_HOME="${HOME}/.local/share" ENV XDG_STATE_HOME="${HOME}/.local/state" ENV PATH="${LOCAL_BIN}:${PATH}" RUN : \ && groupadd --gid ${GID_WHEEL} wheel \ && echo %wheel ALL=\(ALL\) NOPASSWD:ALL >> /etc/sudoers \ && if getent group ${GID} >/dev/null 2>&1; then \ groupmod -n ${GROUP_NAME} $(getent group ${GID} | cut -d: -f1) \ ; \ else \ groupadd --gid ${GID} ${GROUP_NAME} \ ; \ fi \ && if id -u ${UID} >/dev/null 2>&1; then \ usermod \ -l ${USER_NAME} \ -d ${HOME} \ -g ${GROUP_NAME} \ -aG wheel \ $(id -nu ${UID}) \ && chsh -s ${USER_SHELL} ${USER_NAME} \ && mkdir ${HOME} \ && chown -R ${USER_NAME}:${GROUP_NAME} ${HOME} \ ; \ else \ useradd --create-home \ --uid ${UID} \ --shell ${USER_SHELL} \ -g ${GROUP_NAME} \ -G wheel \ ${USER_NAME}\ ; \ fi # ============ # Packages # ============ # ------------ # Initialization # ------------ # do not switch shell; keep using bash # switch user USER ${USER_NAME} # ensure directories RUN mkdir -p \ ${XDG_CONFIG_HOME} \ ${XDG_CACHE_HOME} \ ${XDG_DATA_HOME} \ ${XDG_STATE_HOME} \ ${LOCAL_BIN} \ ${HOME} # ------------ # Shell settings # ------------ # RUN echo "\ # export \\\ # XDG_CONFIG_HOME=\${HOME}/.config \\\ # XDG_CACHE_HOME=\${HOME}/.cache \\\ # XDG_DATA_HOME=\${HOME}/.local/share \\\ # XDG_STATE_HOME=\${HOME}/.local/state \\\ # ZDOTDIR=\${XDG_CONFIG_HOME}/zsh" >> /etc/zsh/zshenv # ------------ # pyenv # ------------ ENV DIR_PYENV=${XDG_DATA_HOME}/pyenv RUN git clone https://github.com/pyenv/pyenv ${DIR_PYENV} \ && cd ${DIR_PYENV} \ && src/configure \ && make -C src \ && ln -s ${DIR_PYENV}/libexec/pyenv ${LOCAL_BIN}/pyenv ENV PATH=${DIR_PYENV}/bin:${PATH} RUN echo 'eval "$(pyenv init -)"' >> ${HOME}/.bashrc RUN eval "$(pyenv init -)" \ && pyenv install 3.11 # ============ # Entrypoint # ============ CMD ["/bin/bash"]