【環境構築】Docker上でJupyter Labを使いたい

【環境構築】Docker上でJupyter Labを使いたい

pip installが動かなくなったのを機に、今までローカルにAnacondaをローカルに直接インストールしていた環境を見直し、Dockerを使用して再構築することにしました。

Dockerを使用する目的

下記の理由でDockerを使うことにしました。

  1. 案件ごとに環境を分けたい(ある案件での環境変更が他の案件に影響を与えないようにしたい)
  2. PCを変更しても同じ環境が使えるようにしたい
  3. 同じ案件を複数人で行うときに、環境差分が出ないようにしたい

環境構築方法

参考サイト

Dockerについては、かめ@米国データサイエンティストさんのDocker超入門①〜Dockerってなに?〜【初心者向け】で勉強しました。

環境構築についても同じブログのデータサイエンスのためのPython入門①〜DockerでJupyter Labを使う〜を参考に構築させて頂きました。

ちなみにDocker上にdjangoアプリ開発環境を作成する際は、下記を参考にさせて頂きました。

環境構築の流れ

上記のサイトがとても丁寧に説明して下さっているので、その通りにやれば、Docker上でJupyterLabを簡単に使えるようになりました。一点だけ、インストールするパッケージを管理したいので、変更しました。Dockerfileからrequirements .txtを参照させて、指定のパッケージを指定のバージョンで一括インストールできるようにしました。

ざっくりと流れを...

  1. 適当なディレクトリにDockerフォルダ作成
  2. 1.のフォルダ内にRequirement.txtを作成
  3. 1.のフォルダ内にDockerfileを作成
  4. Dockerfileをビルドしてimageを作成
  5. Docker tagコマンドでimageに名前をつける
  6. imageをrunしてコンテナを作成


一回imageを作成しておけば、次実施するときは、5でimageをrunするだけでOK。imageを他の人に渡せば、他の人も同じ環境を構築できる。すごい便利...今まで嫌厭してましたが、早く勉強すべきでした...

imageを更新したいときは?

  1. Dockerfileを更新(最後の行に付け足すのが基本)。新しいパッケージインストールだけなら、requirements.txtを更新してビルドしなおせば大丈夫。
  2. コンテナを直接更新してcommitしてdocker imageにする

    2の方法は、image更新箇所や履歴がわからなくなるので、非推奨とのこと。

Dockerfileとrequirements.txtの例

■ Dockerfile

■ requirements.txt

Dockerコマンド集

コンテナ一覧と稼働状況を表示 : docker ps -a

コンテナを削除する : docker rm [コンテナID/コンテナ名]

停止中(STATUS : Exites)のコンテナを再起動する:docker restart [コンテナ名]

稼働中(STATUS : Up)のコンテナに入る:docker exec -it [コンテナ名]

コンテナから抜けて停止させる : exit

exitで抜けた後に「docker ps -a」でStatusを確認するとExitedになっている。再度入りたい時は、再起動「docker restart xxx」させる必要がある。

コンテナから停止させずに抜ける(detach):read escape sequence (Ctrl+p+q)

抜けた後に「docker ps -a」でStatusを確認するとUPになっている。

稼働中(STATUS : Up)のコンテナを終了させる : docker attach [コンテナ名] -> exit

上記のdetachで抜けると、「docker exec」で再度コンテナに入り、exitさせてもdetachした時のプロセスが残り続ける。そのため、「docker ps -a」でStatusを確認するとUpになっている。このプロセスを停止するためには、下記のコマンドを実行する必要がある。

image一覧を確認する:docker images

imageをrunさせる : docker run -it [image名] bash

runさせると必要なimageを勝手にpullして、コンテナを作成してくれる。

コンテナをcommitして新しいdocker imageとして保存する : docker commit [コンテナ名] [新しいimage名]

commitすることでimageとして保存して、現状のコンテナを他の人に共有することができる。

imageに名前をつける : docker tag [image ID] [image名] : [タグ]

後からわかりやすいようにimage名をつけておく。タグはversion情報を入れることが多い。タグを指定しない場合は、「latest」が自動でつけられる。