From bcb3364092fa340f7e6d65dbb7eaf1d17f6a9b98 Mon Sep 17 00:00:00 2001 From: Vladimir Protsenko Date: Wed, 17 Aug 2022 00:36:57 +0400 Subject: [PATCH] IC --- .dockerignore | 1 + Dockerfile | 25 +++++++++++++++++++++++++ build.sh | 7 +++++++ readme.md | 20 ++++++++++++++++++++ start_daemon.sh | 3 +++ start_interactively.sh | 3 +++ 6 files changed, 59 insertions(+) create mode 100644 .dockerignore create mode 100644 Dockerfile create mode 100644 build.sh create mode 100644 readme.md create mode 100644 start_daemon.sh create mode 100644 start_interactively.sh diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..72e8ffc --- /dev/null +++ b/.dockerignore @@ -0,0 +1 @@ +* diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..3295d4d --- /dev/null +++ b/Dockerfile @@ -0,0 +1,25 @@ +FROM conda/miniconda3 + +ARG USER +ARG GROUP +ARG UID +ARG GID + +RUN groupadd --gid ${GID} ${GROUP} +RUN useradd --shell /bin/bash --uid ${UID} --gid ${GID} --create-home ${USER} +RUN mkdir /wd +RUN chown ${USER}:${GROUP} /wd + +RUN apt-get update && apt-get install -y build-essential + +USER ${USER} + +RUN conda init +RUN conda create -n jupyter-env python==3.9 jupyterlab -y +RUN echo "conda activate jupyter-env" >> /home/${USER}/.bashrc + +SHELL ["/bin/bash", "--login", "-i", "-c"] + +WORKDIR /wd +ENV SHELL=/bin/bash +CMD jupyter lab --ip 0.0.0.0 --no-browser diff --git a/build.sh b/build.sh new file mode 100644 index 0000000..313a66f --- /dev/null +++ b/build.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +docker build . -t ${USER}_${IMAGE_NAME} \ + --build-arg USER=${USER} \ + --build-arg GROUP=${USER} \ + --build-arg UID=$(id -u ${USER}) \ + --build-arg GID=$(id -g ${USER}) diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..b7c035e --- /dev/null +++ b/readme.md @@ -0,0 +1,20 @@ +Как использовать: + +``` +./build.sh +./start_daemon.sh или ./start_interactively.sh +``` +----------------------------------- +Цель - получить контейнер с пользователем, идентичным пользователю в host системе, чтобы: +- новые файлы (логи/модели etm.) принадлежали пользователю, а не root, +- в диспетчере процессов (top/htop) процессы принадлежали пользователю. + +Если в контейнере нужно выполнить действие от root, можно: +- выполнить их в Dockerfile до `USER ${USER}`, +- подключиться к запущенному контейнеру `7sDe`, вызвав на хосте `docker exec -it -u root 7sDe /bin/bash`, +- сконфигурировать sudoers в Dockerfile, выполнить через sudo. +--------------------------------- +``` +-v /home/${USER}:/wd +``` +означает, что /wd в контейнере будет связана с домашней папкой пользователя в /home/ на хосте. diff --git a/start_daemon.sh b/start_daemon.sh new file mode 100644 index 0000000..c28fb77 --- /dev/null +++ b/start_daemon.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +docker run --name ${USER}_${IMAGE_NAME} -d --gpus all -p 8900:8888 -v /home/${USER}:/wd ${USER}_${IMAGE_NAME} diff --git a/start_interactively.sh b/start_interactively.sh new file mode 100644 index 0000000..0618671 --- /dev/null +++ b/start_interactively.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +docker run -it --rm --gpus all -p 8900:8888 -v /home/${USER}:/wd ${USER}_${IMAGE_NAME}