diff --git a/Dockerfile b/Dockerfile index 3e2296e..834d3aa 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,23 +1,38 @@ FROM pytorch/pytorch:2.0.0-cuda11.7-cudnn8-runtime -#FROM tensorflow/tensorflow:2.12.0-gpu +ENV TZ=Europe/Samara +RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone ARG USER ARG GROUP ARG UID ARG GID +RUN apt update +RUN apt install sudo -y +RUN sed -i 's/^%sudo.*/%sudo ALL=(ALL) NOPASSWD: ALL/' /etc/sudoers + RUN groupadd --gid ${GID} ${GROUP} -RUN useradd --shell /bin/bash --uid ${UID} --gid ${GID} --create-home ${USER} +RUN useradd --shell /bin/bash --uid ${UID} --gid ${GID} -G sudo --create-home ${USER} RUN mkdir /wd RUN chown ${USER}:${GROUP} /wd -# SYSTEM INITIALIZATION -# RUN pip install jupyter +# SYSTEM CONFIGURATION +RUN apt install vim htop mc curl wget git tree -y +RUN curl -fsSL https://code-server.dev/install.sh | sh +RUN code-server --install-extension ms-python.python + USER ${USER} -# USER INITIALIZATION +# USER CONFIGURATION # RUN ... +RUN openssl req -x509 -newkey rsa:4096 -keyout /home/${USER}/key.pem -out /home/${USER}/cert.pem -sha256 -nodes -days 365 -subj "/C=RU/ST=SamaraRegion/L=Samara/O=SSAU/OU=LIAV/CN=vscode.ssau.ru/" +RUN mkdir -p /home/${USER}/.config/code-server +RUN echo 'bind-addr: 0.0.0.0:8443' >> /home/${USER}/.config/code-server/config.yaml +RUN echo "cert: /home/${USER}/cert.pem" >> /home/${USER}/.config/code-server/config.yaml +RUN echo "cert-key: /home/${USER}/key.pem" >> /home/${USER}/.config/code-server/config.yaml + +ENV SHELL=/bin/bash SHELL ["/bin/bash", "--login", "-i", "-c"] WORKDIR /wd diff --git a/daemon.sh b/daemon.sh deleted file mode 100755 index 6e8d780..0000000 --- a/daemon.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash -CURDIRNAME=${PWD##*/} - -docker run -d --gpus "device=0" -p 8888:8888 -v $(pwd):/wd --name ${USER}_${CURDIRNAME} ${USER}_${CURDIRNAME} \ No newline at end of file diff --git a/interactively.sh b/interactively.sh deleted file mode 100755 index 8f5e83e..0000000 --- a/interactively.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash -CURDIRNAME=${PWD##*/} - -docker run -it --rm --gpus "device=0" -p 8888:8888 -v $(pwd):/wd --name ${USER}_${CURDIRNAME} ${USER}_${CURDIRNAME} \ No newline at end of file diff --git a/readme.md b/readme.md index aecffe7..9bee5c4 100644 --- a/readme.md +++ b/readme.md @@ -1,14 +1,10 @@ - -``` -git clone https://git.ai.ssau.ru/liav/docker_template myproject -cd myproject -``` -Модифицируйте `Dockerfile` для выбора базового образа из https://hub.docker.com/ и установки зависимостей. Отредактируйте .dockerfile, если хотите скопировать файлы в образ командой COPY (по-умолчанию файлы не отправляются в контекст для ускорения сборки). +Для запуска vscode на сервере скопируйте в терминал и запустите: ``` -./build.sh -./start_daemon.sh или ./start_interactively.sh +git clone https://git.ai.ssau.ru/liav/docker_template --branch vscode my_project_name; ./build.sh; ./vscode.sh ``` ------------------------------------ + При использовании этой схемы будет получен контейнер с пользователем, идентичным пользователю в `host` системе. Новые файлы (логи/модели etm.) и процессы в диспетчере процессов (top/htop) хоста будут принадлежать вашему пользователю. Параметр `-v $(pwd):/wd ` в `start` скриптах означает, что директория `/wd` в контейнере будет связана с текущей папкой на хосте. + +Для остановки vscode используйте `./stop.sh`. diff --git a/stop.sh b/stop.sh new file mode 100755 index 0000000..c81688e --- /dev/null +++ b/stop.sh @@ -0,0 +1,4 @@ +#!/bin/bash +CURDIRNAME=${PWD##*/} + +docker stop ${USER}_${CURDIRNAME}_vscode diff --git a/vscode.sh b/vscode.sh new file mode 100755 index 0000000..fad597a --- /dev/null +++ b/vscode.sh @@ -0,0 +1,21 @@ +#!/bin/bash +CURDIRNAME=${PWD##*/} + +PORT=8400 +PASSWORD=$(openssl rand -base64 45) +docker run \ + -d \ + --rm \ + --gpus "device=0" \ + -p $PORT:8443 \ + -v $(pwd):/wd \ + --shm-size=10gb \ + --name ${USER}_${CURDIRNAME}_vscode \ + -e PASSWORD="${PASSWORD}" \ + ${USER}_${CURDIRNAME} \ + code-server +sleep 1 +docker logs ${USER}_${CURDIRNAME}_vscode +echo "" +echo "Address: https://$(hostname -i | awk '{ print $1; }'):${PORT}" +echo "Password: $PASSWORD"