|
@@ -0,0 +1,118 @@
|
|
|
+FROM ubuntu:18.04 AS builder
|
|
|
+
|
|
|
+RUN sed -i 's#archive.ubuntu.com#mirrors.aliyun.com#g' /etc/apt/sources.list \
|
|
|
+ && sed -i 's#security.ubuntu.com#mirrors.aliyun.com#g' /etc/apt/sources.list
|
|
|
+
|
|
|
+ENV LANG=zh_CN.UTF-8 LANGUAGE=zh_CN:zh LC_ALL=zh_CN.UTF-8 DEBIAN_FRONTEND=noninteractive
|
|
|
+
|
|
|
+RUN rm -rf /etc/apt/sources.list.d/ && apt update
|
|
|
+
|
|
|
+RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
|
+ supervisor \
|
|
|
+ iputils-ping \
|
|
|
+ wget \
|
|
|
+ zsh \
|
|
|
+ build-essential \
|
|
|
+ cmake \
|
|
|
+ git \
|
|
|
+ curl \
|
|
|
+ vim \
|
|
|
+ ca-certificates \
|
|
|
+ libjpeg-dev \
|
|
|
+ zip \
|
|
|
+ unzip \
|
|
|
+ libpng-dev \
|
|
|
+ openssh-server \
|
|
|
+ autojump \
|
|
|
+ language-pack-zh-hans \
|
|
|
+ ttf-wqy-zenhei \
|
|
|
+ libgl1-mesa-glx \
|
|
|
+ libglib2.0-0 \
|
|
|
+ locales &&\
|
|
|
+ rm -rf /var/lib/apt/lists/*
|
|
|
+
|
|
|
+
|
|
|
+RUN locale-gen zh_CN.UTF-8
|
|
|
+RUN dpkg-reconfigure locales
|
|
|
+
|
|
|
+
|
|
|
+CMD ["supervisord", "-n"]
|
|
|
+
|
|
|
+FROM builder as builder1
|
|
|
+
|
|
|
+ENV PYTHON_VERSION 3
|
|
|
+RUN chsh -s `which zsh`
|
|
|
+RUN curl -o ~/miniconda.sh -O https://repo.anaconda.com/miniconda/Miniconda${PYTHON_VERSION}-latest-Linux-x86_64.sh && \
|
|
|
+ chmod +x ~/miniconda.sh && \
|
|
|
+ ~/miniconda.sh -b -p /opt/conda && \
|
|
|
+ rm ~/miniconda.sh
|
|
|
+
|
|
|
+RUN ln /opt/conda/bin/conda /usr/local/bin/conda
|
|
|
+RUN conda init zsh
|
|
|
+RUN conda install mamba -n base -c conda-forge
|
|
|
+RUN ln /opt/conda/bin/mamba /usr/local/bin/mamba && mamba init zsh
|
|
|
+
|
|
|
+
|
|
|
+FROM builder1 as builder2
|
|
|
+
|
|
|
+ENV WORKDIR /workspace
|
|
|
+WORKDIR ${WORKDIR}
|
|
|
+ADD environment.yml /environment.yml
|
|
|
+RUN mamba update -n base -c defaults conda -y && mamba env create -f /environment.yml && rm -rf /root/.cache
|
|
|
+
|
|
|
+# RUN /opt/conda/envs/py38/bin/python -m ipykernel install --name py38 --display-name "py38"
|
|
|
+# RUN echo "c.MultiKernelManager.default_kernel_name = 'py38'">>/root/.jupyter/jupyter_notebook_config.py
|
|
|
+RUN echo "\
|
|
|
+[program:be]\n\
|
|
|
+directory=%(ENV_WORKDIR)s\n\
|
|
|
+command=/opt/conda/envs/py38/bin/gunicorn server:app --workers 1 --worker-class=uvicorn.workers.UvicornWorker --bind 0.0.0.0:8080 --reload \n\
|
|
|
+autorestart=true\n\
|
|
|
+startretries=0\n\
|
|
|
+redirect_stderr=true\n\
|
|
|
+stdout_logfile=/var/log/be.log\n\
|
|
|
+stdout_logfile_maxbytes=50MB\n\
|
|
|
+environment=PYTHONUNBUFFERED=1\n\
|
|
|
+" > /etc/supervisor/conf.d/be.conf
|
|
|
+
|
|
|
+ADD . ${WORKDIR}
|
|
|
+EXPOSE 8080
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+FROM builder2 as builder3
|
|
|
+
|
|
|
+RUN apt-get update && apt-get install -y --no-install-recommends openssh-server && rm -rf /var/lib/apt/lists/*
|
|
|
+RUN mkdir /var/run/sshd
|
|
|
+RUN echo 'root:root' | chpasswd
|
|
|
+RUN sed -i 's/.*PermitRootLogin .*/PermitRootLogin yes/' /etc/ssh/sshd_config
|
|
|
+# SSH login fix. Otherwise user is kicked off after login
|
|
|
+RUN sed -i 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' /etc/pam.d/sshd
|
|
|
+
|
|
|
+RUN echo "\
|
|
|
+[program:sshd] \n\
|
|
|
+command=/usr/sbin/sshd -D\n\
|
|
|
+autorestart=True\n\
|
|
|
+autostart=True\n\
|
|
|
+redirect_stderr = true\n\
|
|
|
+" > /etc/supervisor/conf.d/sshd.conf
|
|
|
+
|
|
|
+EXPOSE 22
|
|
|
+
|
|
|
+
|
|
|
+# RUN mamba install -y jupyterlab -n base && mamba init zsh
|
|
|
+# RUN /opt/conda/bin/jupyter notebook --generate-config && \
|
|
|
+# echo "c.NotebookApp.password='argon2:\$argon2id\$v=19\$m=10240,t=10,p=8\$+zIUCF9Uk2FiCHlV8njX5A\$I5Mm/64DORArcXYTXWRVng'">>/root/.jupyter/jupyter_notebook_config.py
|
|
|
+
|
|
|
+
|
|
|
+# RUN mkdir -p /data && echo "\
|
|
|
+# [program:jupyter]\n\
|
|
|
+# directory=/data\n\
|
|
|
+# command=/opt/conda/bin/jupyter lab --ip 0.0.0.0 --port 8888 --allow-root --no-browser \n\
|
|
|
+# autorestart=true\n\
|
|
|
+# startretries=0\n\
|
|
|
+# redirect_stderr=true\n\
|
|
|
+# stdout_logfile=/dev/stdout\n\
|
|
|
+# stdout_logfile_maxbytes=0\n\
|
|
|
+# " > /etc/supervisor/conf.d/jupyter.conf
|
|
|
+
|
|
|
+# EXPOSE 8888
|