EC2+DockerでJupyter Notebookを動かす part2

前回はEC2インスタンスを作成し、Dockerをインストールしました。
今回はJupyter NotebookをDocker上で動かし、
EC2インスタンスのネットワーク設定をいじることで
外部からJupyter Notebookへアクセスできるようにします。

Jupyter NotebookのDockerイメージ取得・起動

まずはJupyter NotebookのDockerイメージを取得します。

docker pull jupyter/datascience-notebook

Jupyter Notebookのイメージ取得ができたことを確認します。

docker images jupyter/datascience-notebook

REPOSITORY                     TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
jupyter/datascience-notebook   latest              91f5bc10a994        36 hours ago        6.828 GB

イメージの取得ができたら、あとはDockerイメージを起動します。

docker run -it --name notebook -p 80:8888 jupyter/datascience-notebook

上記コマンドを実行するとJupyter Notebookにアクセスするための
トークンが標準出力されますので、それを使ってアクセスします。
その後は”Ctrl-p -> Ctrl-q”でイメージ内からログアウトし、
ターミナル等を閉じても稼働し続けるようにします。

EC2インスタンスのNW設定

次にEC2インスタンスのネットワーク設定を下記の手順で行います。

  1. サイドメニューの「セキュリティグループ」を押下
  2. Jupyter Notebookが稼働しているEC2インスタンスの
    セキュリティグループを選択
  3. 下ウィンドウの「インバウンド」タブを選択
  4. 編集ボタンを押下
  5. 「インバウンドルールの編集」画面で「ルールの追加」を押下
  6. 以下の入力内容でルールを追加
    • タイプ|HTTP
    • プロトコル|TCP
    • ポート範囲|80
    • 送信元|カスタム、0.0.0.0/0
  7. 「保存」ボタンを押下

security group

add rule

以上の設定をすると、EC2インスタンスのグローバルIPを指定すれば
任意のIPからJupyter Notebookにアクセスできます。

Jupyter Notebook Toppage

これで家からはもちろん、出先や会社からでも
手軽にデータ分析ができますね!

Dockerの基本的な使い方まとめ

個人的なメモも兼ねて、Dockerの基本的なコマンドをまとめてみました。

Dockerイメージの起動コマンド

# dockerコマンドで "cnetos6" のDockerイメージを起動
docker run -it -p 80:80 -v /root/botpj:/tmp/share centos:6 /bin/bash
  • -it
    • Dockerイメージ起動後にコンテナ内で操作
    • コマンドの末尾で指定したシェルを利用
  • -p :
    • ホストの指定ポートにDockerの指定ポートをマッピング
  • -v :
    • ホストの指定ディレクトリをDockerの指定ディレクトリにマウント
    • 有効にしている場合はSELinuxの無効化が必要(しないとホストのディレクトリ内を見れない)

Dockerイメージの更新手順

  • Ctrl-p -> Ctrl-q
    • 起動中のDockerイメージから一時的に抜ける
  • docker ps
    • それまでいじっていたDockerイメージのコンテナ名、もしくはコンテナIDを調べる
  • docker commit
    • 新規リポジトリ名で変更したDockerイメージの内容を保存する

抜けたDockerコンテナへの復帰

  • docker attach
    • 指定したコンテナ名の中に入り、bash等で操作を開始する