1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

DockerでUbuntu+Python3.9+JupyterLab3+SSHdなイメージを作る

Last updated at Posted at 2021-03-28

以下

ポイントとしては、

  • 日本語化している
  • SSHサーバが起動している
  • Miniconda + conda-forge リポジトリを利用している
  • Jupyter Lab に Rubyカーネルが追加されている
  • Jupyter Lab に すぐに Perlカーネルを追加できる

セキュリティ的にはいろいろNGかと。

Dockerfile
FROM ubuntu

# 管理ユーザ名
ARG user="[管理ユーザ名]"
# 管理ユーザパスワード
ARG pass="[管理ユーザ名のパスワード]"
# パッケージのインストール時に警告を出さない
ENV DEBIAN_FRONTEND=noninteractive \
    DEBCONF_NOWARNINGS=yes
# rootにパスワードを設定
RUN echo "root:[rootパスワード]" | chpasswd \
\
# パッケージのインストール
    && apt-get update -y \
    && apt-get upgrade -y \
    && apt-get install -y \
        cpanminus \
        curl \
        git \
        less \
        libczmq-dev \
        libffi-dev \
        libtool \
        libzmq3-dev \
        locales \
        make \
        openssh-server \
        perl \
        ruby \
        ruby-dev \
        sudo \
        tzdata \
        vim \
        wget \
    && apt-get clean -y \
    && rm -rf \
        /var/lib/apt/lists/* \
        /var/cache/apt/* \
        /usr/local/src/* \
        /tmp/* \
\
# 日本語環境の設定
    && locale-gen ja_JP.UTF-8 \
    && echo "export TZ=Asia/Tokyo" > /etc/profile.d/ja_tokyo.sh \
    && echo "export LANG=ja_JP.UTF-8" >> /etc/profile.d/ja_tokyo.sh \
    && echo "export LANGUAGE=ja_JP:ja" >> /etc/profile.d/ja_tokyo.sh \
\
# SSHサーバの設定
    && mkdir /var/run/sshd \
    && echo "PermitRootLogin yes" >> /etc/ssh/sshd_config.d/root_pwd.conf \
    && echo "PasswordAuthentication yes" >> /etc/ssh/sshd_config.d/root_pwd.conf \
    && echo "UseDNS no" >> /etc/ssh/sshd_config.d/root_pwd.conf \
\
# 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 \
\
# JupyterにRubyカーネルを追加
    && gem install \
        cztop \
        iruby \
    && iruby register --force \
\
# JupyterにPerlカーネルを追加
# (これだけでは追加できない, コンテナ内で iperl notebook を初回のみ実行することが必要)
    && cpanm Devel::IPerl --notest \
\
# ユーザ作成
    && adduser -q --gecos "" --disabled-login ${user} \
    && usermod -aG sudo ${user} \
    && echo "${user}:${pass}" | chpasswd

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

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

Dockerコマンドの例 (Dockerfileのあるディレクトリで実行)

# イメージ作成
docker image build --tag ubuntu/py/sshd:20210328 .

# コンテナをバックグラウンドで起動
docker container run --rm -d --name ubuntu_py_sshd -h ubuntu -p 33322:22 -p 38888:8888 ubuntu/py/sshd:20210328

# コンテナにログイン
docker container exec -it ubuntu_py_sshd bash --login

# JupyterにPerlのカーネルを追加する(初回1回のみ, 正常にrunningしているのを確認を終了)
iperl notebook
# JupyterLabを起動
jupyter lab --no-browser

# コンテナを停止して削除
docker container stop ubuntu_py_sshd
1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?