【Jupyter】DockerfileでシンプルなBinderコンテナを起動する

Dockerfileでbinder環境をカスタマイズ

binderhubで利用できる環境ファイルの中でも、応用的な位置づけになっている「DockerfileによるBinder環境のカスタマイズ」。

ここではその一例として、ご存じGitのバージョン管理に、大容量ファイルの「分散管理」を可能にするgit-annexを組み合わせたツール「Datalad」を導入した状態で、mybinder.orgで起動するコンテナのDockerfileサンプルを作ってみました。

FROM python:3.7-slim-buster

# install debian package (datalad-cli etc.)
RUN apt-get update -y \
    && apt-get upgrade -y \
    && apt-get autoremove -y \
    && apt-get install -y datalad \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*

# install the notebook package etc.
RUN pip install --no-cache --upgrade pip \
    && pip install --no-cache notebook jupyterlab \
    && pip install --no-cache datalad==0.15.4

# create user with a home directory
ARG NB_USER=jovyan
ARG NB_UID=1000
ENV USER ${NB_USER}
ENV HOME /home/${NB_USER}

WORKDIR ${HOME}
COPY . ${HOME}
USER root
RUN chown -R ${NB_UID} ${HOME}

RUN adduser --disabled-password \
    --gecos "Default user" \
    --uid ${NB_UID} \
    ${NB_USER}
USER ${NB_USER}

最初にapt/pipのアップデート・パッケージのインストールを行い、その後にコンテナ起動に必要な処理を行っています。

# create user with a home directory 以下はBinderhubの公式ドキュメントを参考にしました。まずbinder起動に際して、uidが1000のユーザを定義する必要があるようなので、そう設定します。

ARG NB_USER=jovyan
ARG NB_UID=1000
ENV USER ${NB_USER}
ENV HOME /home/${NB_USER}

その後に、/home/${NB_USER}(上の例では/home/jovyan)をワーキングディレクトリとし、rootユーザとしてDocerfileが配置されているディレクトリの構成をそのワーキングディレクトリへコピー。

そして各内容の所有権を中盤で作成したuidが1000番のユーザに渡し、利活用できるようにしています。

This chown is required because Docker will be default set the owner to root, which would prevent users from editing files. Note that the repository should in general be clone with COPY; although RUN git clone … is a valid command for the Dockerfile, it does not invalidate the build cache of mybinder. Thus, if available, the the cached repository will be used even after changes to the repository.

(拙訳:Dockerはデフォルトでオーナーをrootに設定するためにユーザーがファイルを編集できないので、このchownは必須です。RUN git clone …はDockerfileでは有効なコマンドですが、mybinderのビルドキャッシュを無効にするものではありませんので、ご注意ください。したがって、もし利用可能であれば、リポジトリに変更があった場合でも、キャッシュされたリポジトリが使用されます。)

binder user guide より

サンプルリポジトリ

上に示したDockerfileで、実際に立ち上げを試してみてもらえるリポジトリを作りました。
binder-docker-sample

参考