概要
以下のページでWSL上にDockerの環境を立ち上げた.
これだけでもいろいろできるのだが,何かの開発をしようとすると結構面倒.
そこでとりあえずDocker image内でjupyterを立ち上げて,そこにWindowsからアクセスする方法をメモしておく.
Docker imageの作成
少し面倒だが,以下のような内容のDockerfileファイルをWSL上に作成する.
FROM nvidia/cuda:11.8.0-base-ubuntu22.04 RUN apt update RUN apt install python3.10 -y RUN apt install python3-pip -y RUN pip install jupyterlab
FROMは元となるDocker image,以降は追加で処理するコマンドをRUNで指定する.
内容としては、python3.10とpython3-pipをインストールして,jupyterlabをインストールする.
そしてこのDockerfileがある場所で以下を使ってビルド作業を行う.
docker build -t jupyter .
これでDocker images
を実行してもらうと,jupyterというコンテナができている.
Docker runの実行で注意すること
必要なのはホスト側とコンテナ側のポート接続が必要になる.こうしないとホスト側でそのポートを認識できなくなる.実行例は以下.
docker container run -it --rm --gpus all --publish 18888:8888 jupyter
色々とオプションを付けてるが,ここで重要なのは--publish 18888:8888
で,ホストの18888ポートとコンテナの8888ポートを接続することになる.
jupyter lab立ち上げ時に注意すること
後はコンテナが立ち上がったらjupyterlabを立ち上げるだけなのだが,ここでも注意点がある.
以下が大丈夫なコマンド.
jupyter lab --ip=0.0.0.0 --allow-root
--allow-root
は無いとつけないとエラーが起きる.
--ip=0.0.0.0
は無いとアクセスができない.原因はよくわからない.
とりあえずこれでDocker上で実行しているjupyterにアクセスできるようになる.
もっと簡単にしたい
あれこれと実行時に指定していくのは結構面倒なので,それを簡略化する方法を記載する.
コンテナに入った後にjupyter labを立ち上げる部分を省略する
Dockerfilesを以下のように修正する.
FROM nvidia/cuda:11.8.0-base-ubuntu22.04 RUN apt update RUN apt install python3.10 -y RUN apt install python3-pip -y RUN pip install jupyterlab RUN cd mnt RUN mkdir host_src CMD ["jupyter", "lab", "--ip=0.0.0.0", "--allow-root"]
RUN cd mnt
とRUN mkdir host_src
は別のところで使うので一応記載している部分.
CMD ["jupyter", "lab", "--ip=0.0.0.0", "--allow-root"]
はこのコマンドをコンテナ立ち上げ時に実行する命令文になっている.
これでコンテナ立ち上げ時に毎回jupyterlabを手動で実行する必要がなくなる.
docker-composeの利用
後はやりたいこととして - ホストとコンテナのport接続 - ついでにホスト側のディレクトリをコンテナ側でマウントしてソースコードを読み込めるようにする
この2点を自動化することになる.
これらを行うのにdocker-compose.ymlを利用する.
以下のページを参考にdocker-compose.ymlを作成してみた.
version: '2.21' services: jupyter: container_name: jupyter build: context: . ports: - '18888:8888' volumes: - type: bind source: /home/lua/src target: /mnt/host_src
各箇所の解説は上のページを参照してもらいたい.
ともかくこれで開発は少し楽ができることが分かった.docker-compose.ymlはGPUの利用宣言なんかもできて便利.
最後に
VSCodeを利用するともっと楽できるかもしれないとのことなので,今度はそっちについても調べてみようと思う.