はじめに

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

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

前提

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

目次

    1. 環境構築の作業全体像

 

    1. dockerインストール

 

    1. Dockerfile作成

 

    1. image作成

 

    1. container作成

 

    環境の削除

1. 環境構築の作業全体像

Dockerでの環境構築の基本的な流れは、以下の通り
1. Dockerfileの作成
2. imageの作成
3. containerの作成&起動

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

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

2. dockerインストール

スクリーンショット 2020-11-22 21.09.33.png

3. 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 命令一覧

命令一言解説FROMdocker hubからimageをpullする
(localに該当のイメージがある場合はpullは行われない)RUNlinuxコマンドを実行する
(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)によってカレントディレクトリを代入しています-plocalhostとcontainer内のポートの繋ぎ込みを表します
(上記指定の場合、localhostの1111ポートに接続した時に、container内の8888ポートに接続する)–name生成するcontainerの名前を決めます-itおまじない
(-i:コマンドラインからの入力を受け付ける、-t:コマンドラインの表示を綺麗にする、これらの組み合わせ)

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

image.png

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


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超入門

Docker超入門①〜Dockerってなに?〜【初心者向け】


・udemy講座(網羅的に勉強したい方はこちらおすすめです)
https://www.udemy.com/course/aidocker/