DockerでCentOS7+Python3.9+JupyterLab+SSHdなイメージを作る

以下

ポイントとしては、

- 日本語化している
- SSHサーバを起動させている
- Miniconda + conda-forgeリポジトリを利用している
- Jupyter Lab が起動できる

セキュリティ的にはいろいろNGなところがあるかと。
コード補完ツールのkiteを入れて動かしたかったんですが、動かなくて断念しました。

```dockerfile:Dockerfile
FROM centos:centos7

# 管理ユーザ名
ARG user="[管理ユーザ名]"
# 管理ユーザパスワード
ARG pass="[管理ユーザ名のパスワード]"
# rootにパスワードを設定
RUN echo "root:[rootパスワード]" | chpasswd \
\
# yum.confの設定
    && sed -i "/^override_install_langs=/d" /etc/yum.conf \
\
# パッケージのインストール
    && yum update -y \
    && yum install -y \
        git \
        less \
        openssh-server \
        perl \
        ruby \
        sudo \
        vim \
        wget \
        which \
\
# 日本語環境の設定
    && yum reinstall -y glibc-common \
    && localedef -f UTF-8 -i ja_JP ja_JP.UTF-8 \
    && echo "ZONE=Asia/Tokyo" > /etc/sysconfig/clock \
    && echo "LANG=ja_JP.UTF-8" > /etc/locale.conf \
    && rm -f /etc/localtime \
    && ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime \
    && echo "export LANG=ja_JP.UTF-8" >> /etc/profile.d/locale.sh \
    && echo "export LANGUAGE=ja_JP:ja" >> /etc/profile.d/locale.sh \
    && yum clean all \
    && rm -rf /var/cache/yum/* \
\
# SSHサーバの設定
    && sed -i -e "s/^#UseDNS yes/UseDNS no/" /etc/ssh/sshd_config \
    && ssh-keygen -A \
\
# Minicondaのインストール
    && curl -LO https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh \
    && bash ./Miniconda3-latest-Linux-x86_64.sh -bfp /opt/miniconda \
    && rm -f ./Miniconda3-latest-Linux-x86_64.sh \
    && echo 'PATH="/opt/miniconda/bin:$PATH"' >> /etc/profile.d/miniconda.sh \
\
# pythonモジュールをcondaでインストール
    && . /etc/profile.d/miniconda.sh \
    && conda config --add channels conda-forge \
    && conda config --remove channels defaults \
    && conda install -y python=3.9 \
    && conda update -y conda \
    && conda update -y --all\
    && conda install -y \
        imageio \
        ipywidgets \
        jupyterlab \
        matplotlib \ 
        numpy \
        nodejs \
        openpyxl \
        pandas \
        scikit-learn \
        scipy \
        seaborn \
        xeus-python \
    && conda clean -y --all \
\
# condaでインストールできないモジュールをpipでインストール
    && python -m pip install \
        japanize-matplotlib \
        mglearn \
    && rm -rf /root/.cache \
\
# JupyterLabの設定
    && mkdir /etc/jupyter \
    && echo "c = get_config()" >> /etc/jupyter/jupyter_notebook_config.py \
    && echo "c.NotebookApp.allow_remote_access = True" >> /etc/jupyter/jupyter_notebook_config.py \
    && echo "c.NotebookApp.allow_root = True" >> /etc/jupyter/jupyter_notebook_config.py \
    && echo "c.NotebookApp.ip = '0.0.0.0'" >> /etc/jupyter/jupyter_notebook_config.py \
    && echo "c.NotebookApp.open_browser = False" >> /etc/jupyter/jupyter_notebook_config.py \
    && echo "c.NotebookApp.port = 8888" >> /etc/jupyter/jupyter_notebook_config.py \
    && echo "c.NotebookApp.token = ''" >> /etc/jupyter/jupyter_notebook_config.py \
    && echo "c.LabBuildApp.minimize = False" >> /etc/jupyter/jupyter_notebook_config.py \
\
# JupyterLabの拡張機能のインストール
    && . /etc/profile.d/miniconda.sh \
    && jupyter labextension install \
        @jupyterlab/debugger \
        @jupyterlab/toc \
    && jupyter labextension update --all --minimize=False \
    && jupyter lab build --minimize=False \
\
# ユーザ作成
    && useradd ${user} \
    && usermod -aG wheel ${user} \
    && echo "${user}:${pass}" | chpasswd

# 作業ディレクトリ
WORKDIR /root/
# 使用ポート
EXPOSE 22 8888

# SSHサーバを起動する
CMD ["/usr/sbin/sshd", "-D"]
```