EnsekiTT Blog

EnsekiTTが書くブログです。

うっかりコンテナを削除しても大丈夫なようにdocker-composeを使うことにした話

つまりなにしたの?

Jupyter Docker Stacksを導入したはいいもののうっかりコンテナを削除すると辛いのでDocker-composeを使って
ホストとコンテナのボリュームを共有することにした。扱うイメージはjupyter/datascience-notebook
f:id:ensekitt:20180726012319j:plain

Jupyter Docker Stacksについて

JupyterをDocker上で動かして、どこでも同じ分析環境を展開できるようなもの。
ensekitt.hatenablog.com
詳しくはこちら

docker-composeについて

docker-composeは、複数コンテナを使ったDockerアプリケーションを定義して実行するためのツール。
たとえば、学習サーバと実行サーバを毎回同じ構成で立ち上げたい時に使う。
今回は一つのコンテナを立ち上げるために使うけど、立ち上げるためのオプションを設定できることを強みとして使う。
docs.docker.com

環境について

すでにインストール済とする。
docs.docker.com

以降の環境は

Docker CE
Version 18.06.0-ce-mac70 (26399)
Engine: 18.06.0-ce
Compose: 1.22.0
Machine: 0.15.0
Notary: 0.6.1
Credential Helper: 0.6.0
Kubernetes: v1.10.3

でできている。
なお、Dockerのバージョン確認は
f:id:ensekitt:20180725234345p:plain:w300
ここからできる。

ディレクトリ構造

作業用のディレクトリを作成する。すべてこの中で閉じるのでありがたい。

 % tree .
.
└── docker-compose.yaml

一旦こんなディレクトリを作る

docker-compose.yaml

中身はこんな感じ

version: '3'
services:
    env:
        image: jupyter/datascience-notebook
        environment:
            LANG: C.UTF-8
        expose:
            - "8888"
        ports:
             - "8888:8888"
        volumes:
            - ./:/home/jovyan/

imageのところにほかのイメージ名を入れて、
volumesを対象のイメージのログインした時に入るパスに変更すれば、
jupyter docker stacks以外でも同じように使える。

jovyanとは誰か

JupyterNotebookを起動するとホームディレクトリはjovyanさんの名前で作られている。
こいつだれ?って思ったので調べてみたら、
Jovianには木星(Jupiter)の〜みたいな意味があって、
それのJupyter版ということでJovyanになったようだ。
つまり、JovyanはJupyterの住人ってことみたい。
github.com

実行してみる

% docker-compose up

同じくトークン付きで起動してみると、ちゃんと使えた。

内部のファイルをいじる

f:id:ensekitt:20180726010829p:plain:w500
ディレクトリやNotebookを作ってみた。

ローカルディレクトリも更新された

 % tree .
.
├── Untitled.ipynb
├── db
└── docker-compose.yaml

停止し、うっかりコンテナを削除してみる。

Ctrl+c

# 停止中のコンテナを確認
 % docker ps -a
CONTAINER ID        IMAGE                          COMMAND                  CREATED             STATUS                       PORTS               NAMES
3d6870fe7128        jupyter/datascience-notebook   "tini -g -- start-no…"   7 minutes ago       Exited (137) 4 seconds ago                       datasci_env_1

# 削除してみる
 % docker-compose down
#もしくは % docker rm datasci_env_1

# 削除を確認
 % docker ps -a
CONTAINER ID        IMAGE                          COMMAND                  CREATED             STATUS                       PORTS               NAMES

再開してみる

% docker-compose up

f:id:ensekitt:20180726011645p:plain
中身は無事だった。

おわりに

これで、ローカルにもファイルを置いて管理することができるようになった。
ipynbはGitで管理しにくいけど、Githubならプレビューも出してくれるのでそういうものと連携するのもやりやすくなったと思う。
起動コマンドもシンプルになって良い。

クリエイティブ・コモンズ・ライセンス
この 作品 は クリエイティブ・コモンズ 表示 4.0 国際 ライセンスの下に提供されています。