#はじめに
この記事では、docker初心者がjupyter labの起動まで最速で到達することを目的としております。
containerやimageなど、dockerの専門用語の深い話は飛ばされているので、気になる部分は適宜ググってみてください。
記事を読んで参考になったと思った方は、LGTM押していただけると幸いです!
#前提
・mac環境で実施しております
#目次
- 環境構築の作業全体像
- dockerインストール
- Dockerfile作成
- image作成
- container作成
- 環境の削除
#1. 環境構築の作業全体像
Dockerでの環境構築の基本的な流れは、以下の通り
- Dockerfileの作成
- imageの作成
- containerの作成&起動
それぞれ一言で解説すると
用語 | 一言解説 | 参考URL |
---|---|---|
Dockerfile | 構築する環境の設計書 (このファイルを見ればどんな環境なのか一目でわかります) |
Dockerfile のベストプラクティス |
image | 環境情報を持つ複製可能な環境ファイル (1つのimageでたくさんの環境を作ることができます) |
Dockerイメージの理解を目指すチュートリアル |
container | imageから生成された環境インスタンス (トライアンドエラーで環境を立てたり潰したりできます) |
Dockerコンテナの作成、起動〜停止まで |
概略図(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/
#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 命令一覧
|命令|一言解説|
|:---|:---|:---|
|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
ここまでで、dockerによるjupyter-labの起動は完了です!お疲れ様でした!
この章の最後に、作成したコンテナの状態を確認します
linux画面に戻って、下図のjupyter-labを起動している状態から、**「ctrl+p+q」**でコンテナから一時的に抜け出します。(コンテナは停止されません)
下記コマンドでコンテナが起動されていることがわかります
#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/