LoginSignup
21
20

More than 3 years have passed since last update.

【Docker入門】〜jupyter lab起動までの最短解説〜

Last updated at Posted at 2020-11-22

#はじめに
この記事では、docker初心者がjupyter labの起動まで最速で到達することを目的としております。
containerやimageなど、dockerの専門用語の深い話は飛ばされているので、気になる部分は適宜ググってみてください。

記事を読んで参考になったと思った方は、LGTM押していただけると幸いです!

#前提
・mac環境で実施しております

#目次

  1. 環境構築の作業全体像
  2. dockerインストール
  3. Dockerfile作成
  4. image作成
  5. container作成
  6. 環境の削除

#1. 環境構築の作業全体像
Dockerでの環境構築の基本的な流れは、以下の通り

  1. Dockerfileの作成
  2. imageの作成
  3. containerの作成&起動

それぞれ一言で解説すると

用語 一言解説 参考URL
Dockerfile 構築する環境の設計書
(このファイルを見ればどんな環境なのか一目でわかります)
Dockerfile のベストプラクティス
image 環境情報を持つ複製可能な環境ファイル
(1つのimageでたくさんの環境を作ることができます)
Dockerイメージの理解を目指すチュートリアル
container imageから生成された環境インスタンス
(トライアンドエラーで環境を立てたり潰したりできます)
Dockerコンテナの作成、起動〜停止まで

image.png
概略図(https://docs.docker.jp/engine/understanding-docker.html)
※クライアントが「Dockerfile」を持っており、それを用いて「image」を「build」します。

#2. dockerインストール
docker hubに登録して、トップページの「Get start with Docker Desktop」からdesktopバージョンをダウンロードする
https://hub.docker.com/
スクリーンショット 2020-11-22 21.09.33.png

#3. Dockerfileの作成
Desktopにdockerディレクトリを作成し、その中に以下のDockerfileを作成します

Desktop/docker/Dockerfile
#anaconda3のimageをdockerhubからpullする(https://hub.docker.com/r/continuumio/anaconda3)
#このimageは、ubuntuOSにanaconda3をセットアップした環境
FROM continuumio/anaconda3:2020.07

#jupyterの設定ファイルに変更を加える(この設定を加えないとjupyter-labが起動しません)
RUN jupyter notebook --generate-config
WORKDIR /root/.jupyter
RUN echo 'c.NotebookApp.allow_root = True' >> jupyter_notebook_config.py && \
    echo 'c.NotebookApp.ip = "0.0.0.0"' >> jupyter_notebook_config.py && \
    echo 'c.NotebookApp.token = ""' >> jupyter_notebook_config.py && \
    echo 'c.NotebookApp.port = 8888' >> jupyter_notebook_config.py && \
    echo 'c.NotebookApp.open_browser = False' >> jupyter_notebook_config.py
#セキュリティー設定については以下のURL参照
#https://jupyter-notebook.readthedocs.io/en/latest/security.html#server-security
#https://qiita.com/SaitoTsutomu/items/aee41edf1a990cad5be6

#作業用ディレクトリを作成する
RUN mkdir -p /home/work
WORKDIR /home/work

#デフォルトコマンドを設定する(containerが起動した時に実行されるコマンド)
CMD [ "jupyter", "lab"]

 
Dockerfile 命令一覧

|命令|一言解説|
|:---|:---|:---|
|FROM|docker hubからimageをpullする
(localに該当のイメージがある場合はpullは行われない)|
|RUN|linuxコマンドを実行する
(pullしたimageの環境内でコマンドを実行し、環境のカスタマイズを行う)|
|WORKDIR|カレントディレクトリを変更する
(linuxのcdコマンドでは、移動は一時的なため注意)|
|CMD|デフォルトコマンドを設定する
(containerが起動した時に実行されるコマンド)|
そんなにコマンドの数は多くないので、気になる方はその他も調べてみてください
http://docs.docker.jp/v17.06/engine/reference/builder.html)

#4. image作成
以下の通りコマンドを実行して、imageの作成&確認を行う

imageの作成

#Dockerfileのあるディレクトリに移動
cd desktop/docker/Dockerfile
#カレントディレクトリを指定して、imageをbuildする(-tのオプションでimageの名前を指定する)
docker build . -t anaconda-env

作成したimageの確認

docker images
REPOSITORY      TAG       IMAGE ID            CREATED             SIZE
anaconda-env    latest    8aacbb4fe3dc        10 hours ago        2.76GB

以上のように表示されていれば、imageの作成完了

#5. container作成
最後に、container作成を行うことでjupyter-labの実行環境の作成完了です!
以下のコマンドを順に入力してください

#ローカルホスト側に保存する用のディレクトリを作成する
mkdir volume
#コンテナを作成する
docker run -v $(pwd)/volume:/home/work -p 1111:8888 --name anaconda-container  -it anaconda-env

オプション解説

オプション 解説
-v ・container内部の一部ディレクトリの保存先をローカルに指定する
・上記コマンドでは、コンテナ:/home/workへの保存は、ホスト:volumeに保存されます
・コンテナを削除しても、データが消えないため、ソースコードや学習データをこのディレクトリで管理します
・絶対パスで指定する必要があるため、$(pwd)によってカレントディレクトリを代入しています
-p localhostとcontainer内のポートの繋ぎ込みを表します
(上記指定の場合、localhostの1111ポートに接続した時に、container内の8888ポートに接続する)
--name 生成するcontainerの名前を決めます
-it おまじない
(-i:コマンドラインからの入力を受け付ける、-t:コマンドラインの表示を綺麗にする、これらの組み合わせ)

上記コマンドを実行すると、jupyter-labが起動するので、以下URLにアクセスしてください
http://localhost:1111

jupyter-lab画面
image.png

ここまでで、dockerによるjupyter-labの起動は完了です!お疲れ様でした!


この章の最後に、作成したコンテナの状態を確認します
linux画面に戻って、下図のjupyter-labを起動している状態から、**「ctrl+p+q」**でコンテナから一時的に抜け出します。(コンテナは停止されません)
image.png
下記コマンドでコンテナが起動されていることがわかります

#containerの状態を確認する
docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                    NAMES
22093b0f68f1        anaconda-env        "jupyter lab"       25 minutes ago      Up 25 minutes       0.0.0.0:1111->8888/tcp   anaconda-container

ちなみにコンテナの停止と実行は、以下コマンドで実行可能です

docker stop anaconda-container

#containerの停止(Exited)を確認(-aで停止中のコンテナも確認できる)
docker ps -a
CONTAINER ID        IMAGE           COMMAND          CREATED             STATUS                      PORTS         NAMES
22093b0f68f1        anaconda-env    "jupyter lab"    37 minutes ago      Exited (0) 26 seconds ago                 anaconda-container

再度起動したい場合は、以下のコマンドを実行してください

docker start anaconda-container
#juypter-labを起動する場合
docker exec -it anaconda-container jupyter lab
#環境のCUIに接続する場合(conda install等をしたい場合)
docker exec -it anaconda-container bash

#6. 環境の削除
以下の手順でcontainerとimageを削除します

#停止しなければ、コンテナは削除できない
docker stop anaconda-container
#containerの削除
docker rm anaconda-container
#imageの削除
docker rmi anaconda-env

 
Dockerfileでimageを作成する時に、セーブポイントとしてchasheが残されています(DockerfileのRUNの命令ごとにchashが生成されます)
chasheは、Dockerfile生成時にミスがあってもセーブポイントまではchashを再利用できるように保存されています
知らぬ間に、chasheが容量を圧迫するケースがあるのでこちらの削除もお忘れなく

#キャッシュの削除
docker builder prune

#さいごに
ここまで一通り流しましたが、意外とすんなり環境構築ができたのではないでしょうか??
dockerになれてしまえば、煩わしい環境構築はDockerfileで自動化できますし、他PC・サーバーへの移行も容易です。
データ分析・AI開発やweb開発の環境構築のスタンダードとなっているようなので、押さえておいて損はないはずです。
細部の解説をかなり飛ばしているので、網羅的に勉強したい方はぜひ参考資料で学んでみてください!(特にudemyの講座はオススメです!)

記事を読んで参考になったと思った方は、LGTM押していただけると幸いです!

##参考
・Docker超入門
https://datawokagaku.com/whatisdocker/
・udemy講座(網羅的に勉強したい方はこちらおすすめです)
https://www.udemy.com/course/aidocker/

21
20
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
21
20