はじめに
この記事では、docker初心者がjupyter labの起動まで最速で到達することを目的としております。
containerやimageなど、dockerの専門用語の深い話は飛ばされているので、気になる部分は適宜ググってみてください。
記事を読んで参考になったと思った方は、LGTM押していただけると幸いです!
前提
・mac環境で実施しております
目次
-
- 環境構築の作業全体像
-
- dockerインストール
-
- Dockerfile作成
-
- image作成
-
- container作成
- 環境の削除
1. 環境構築の作業全体像
Dockerでの環境構築の基本的な流れは、以下の通り
1. Dockerfileの作成
2. imageの作成
3. containerの作成&起動
それぞれ一言で解説すると
(このファイルを見ればどんな環境なのか一目でわかります)Dockerfile のベストプラクティスimage環境情報を持つ複製可能な環境ファイル
(1つのimageでたくさんの環境を作ることができます)Dockerイメージの理解を目指すチュートリアルcontainerimageから生成された環境インスタンス
(トライアンドエラーで環境を立てたり潰したりできます)Dockerコンテナの作成、起動〜停止まで
![image.png](https://cdn.silicloud.com/blog-img/blog/img/657d654f37434c4406d06b85/11-0.png)
2. dockerインストール
![スクリーンショット 2020-11-22 21.09.33.png](https://cdn.silicloud.com/blog-img/blog/img/657d654f37434c4406d06b85/13-0.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 命令一覧
(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
オプション解説
・上記コマンドでは、コンテナ:/home/workへの保存は、ホスト:volumeに保存されます
・コンテナを削除しても、データが消えないため、ソースコードや学習データをこのディレクトリで管理します
・絶対パスで指定する必要があるため、$(pwd)によってカレントディレクトリを代入しています-plocalhostとcontainer内のポートの繋ぎ込みを表します
(上記指定の場合、localhostの1111ポートに接続した時に、container内の8888ポートに接続する)–name生成するcontainerの名前を決めます-itおまじない
(-i:コマンドラインからの入力を受け付ける、-t:コマンドラインの表示を綺麗にする、これらの組み合わせ)
上記コマンドを実行すると、jupyter-labが起動するので、以下URLにアクセスしてください
http://localhost:1111
![image.png](https://cdn.silicloud.com/blog-img/blog/img/657d654f37434c4406d06b85/33-0.png)
ここまでで、dockerによるjupyter-labの起動は完了です!お疲れ様でした!
![image.png](https://cdn.silicloud.com/blog-img/blog/img/657d654f37434c4406d06b85/36-0.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超入門
・udemy講座(網羅的に勉強したい方はこちらおすすめです)
https://www.udemy.com/course/aidocker/