はじめに
手元のPCでサーバー上のjupyter labをサクッと使う方法をご紹介いたします。特に研究室配属された学生など初心者の方の助けになれば幸いです!
リモートサーバー上にDockerがインストールされていることを前提に説明します。よくわからない方はとりあえずそのまま設定してみてください
↓ 今回やることのイメージ(この記事では説明のためにそれぞれ異なるPort番号を設定していますが、実際に使うときはすべて8080番にするなど揃えたほうがいろいろと便利だと思います)
1. リモートサーバーへポートフォワーディング
ローカルのポート8000とリモートサーバーの9000にポートフォワーディングしています。(ポート番号は自由に設定してください。)
ここではremoteというサーバーに接続しています
ssh -L 8000:localhost:9000 remote # オプションで -L Port(local):localhost:Port(remote)を追加している
プロキシジャンプする方法がわからない方のために、最後の補足に~/.ssh/configの設定例を書いているので、参考にしてください
2. Dockerfileの作成
以下はjupyter labが使えるようになるDockerfileの一例です。PoetryというPythonのパッケージマネージャー併用していますが、知らない方はとりあえず以下のDockerfileと同じディレクトリに以下のpyproject.tomlというファイルを配置してください(この場合特にサーバー上にPoetryをインストールする必要はありません。)
[tool.poetry]
name = "lab-env"
version = "0.1.0"
description = ""
authors = ["Your Name <you@example.com>"]
readme = "README.md"
[tool.poetry.dependencies]
python = ">=3.10,<3.13"
jupyterlab = "^4.0.7"
pandas = "^2.1.1"
numpy = "^1.26.1"
pandarallel = "^1.6.5"
[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"
FROM python:3.10.13-bookworm
WORKDIR /app
ENV PATH /root/.local/bin:$PATH
RUN apt-get update && apt-get install --no-install-recommends -y \
git \
wget \
curl \
nano \
less \
screen \
tmux
RUN curl -sSL https://install.python-poetry.org | python3 -
RUN pip3 install --upgrade pip
RUN mkdir -p /app/src/DATA
COPY . /app
RUN pip3 install --upgrade pip \
&& pip3 install poetry \
&& poetry config virtualenvs.create false
RUN poetry install
CMD [ "bash" ]
3. Dockerfileをビルド & コンテナの起動
以下のコマンドでdockerイメージを作成します。
docker image build -t lab/env:1 .
次に以下のコマンドでdockerコンテナに入ります(remoteのポート番号をコンテナ内のポート番号に接続している)
docker run -it -v ${PWD}:/app -p 9000:9999 --name lab-env lab/env:1
Dockerfile、pyproject.tomlが配置されたディレクトリでコマンドを入力してください。
また、上記のコマンドでカレントディレクトリをdockerコンテナの/appに繋いでいます。そのため加工したいデータがある場合、カレントディレクトリに配置してください。
4. jupyter labを起動
コンテナ内でjupyter labを起動します。以下のコマンドで起動できます。
root@hoge:/app# jupyter lab --allow-root --ip=* --port 9999
起動後ターミナル上で以下のようなURLが表示されるので、?token=以降をコピーしときます。
http://localhost:9999/lab?token=e61d3f****************
最後に手元のPCでhttp://localhost:8000/lab にアクセスしましょう。ポート番号にご注意を。tokenが求められたら、先程コピーしたtokenを打ち込みましょう。これで手元のPCでリモート上のjupyter labを利用できるはずです。
ポート番号を揃えておくと、ターミナル上に表示されたURLにアクセスするとそのままjupyter labを起動できるメリットがあります
補足. ~/.ssh/config設定
プロキシジャンプしてサーバーに接続できるようにします。以下は一例です。stepが踏み台サーバー、remoteが計算用のサーバーです。
Host step
HostName 100.100.1.1 (踏み台のIPアドレス or *.jpなどの名前)
User hoge (ユーザーの名前)
Port 100 (ポート指定がある場合)
IdentityFile ~/.ssh/hoge.key (鍵へのPATH)
ForwardAgent yes
IdentitiesOnly yes
PasswordAuthentication no
AddKeysToAgent yes
Host remote
HostName 100.100.1.2 (jupyter使うサーバーのIPアドレス or *.jpなどの名前)
User hoge (ユーザーの名前)
ProxyCommand ssh -W %h:%p step (踏み台サーバー設定)
IdentityFile ~/.ssh/hoge.key (鍵へのPATH)
ServerAliveInterval 60
AddKeysToAgent yes