Reproducebility 100倍
データサイエンスLT祭り 2夜目
@teramonagi
(HOXO-M所属)
Dockerマン
誰や?
俺や
• ID: @teramonagi
• 職種:データ分析おじさん
• 業務:バッチ運用・emoticon作成
• 言語:/R/Python/Scala/F#/
• 趣味:ドラム&メジャーデビュー
3
脱ぐとスゴい(中性脂肪)
モチベーション
• 手元の結果と分析サーバでの結果が違う!
–OS・ライブラリのバージョンも全部あっ
てる!なんでや!
• 異なるサーバに分析環境整備するの面倒
• アドホックな分析環境とバッチサーバ環境
が揃ってない!
• 皆作業環境がバラバラや!
–“ワタシのところで動かない!”
–“こういうエラーが出ました!”
– ・・・いちいち煩い
4
5
そこでDockerで
すよ、奥さん!!!
Dockerとは
• ホストOS上に仮想的に別のOS(ゲ
スト)を動かすためのコンテナ型
仮想化技術
• 性能劣化がほとんどない
• 仮想マシンの作成や起動が速い
• ディスク使用量が小さい
6
インストール
7
https://docs.docker.com/
https://docs.docker.com/
インストール
• 最近、Docker for(Windows|Mac)
というツールが出た
–使えるならこいつがGood
• Windows 10(Home版)だとダメな
のでDocker toolsってのを使う
–ただしVirtualBox経由なので速
度がイマイチ
8
Docker Hub
• Githubぽく、いろんなDockerfile(レ
シピ的なもん)が公開されている
9https://hub.docker.com/
ここから先の流れ(R)
1. Docker Hubからベースになる
IMAGEをGET
2. 使う
10
元になるDocker image(R)
11https://hub.docker.com/r/rocker/hadleyverse/
ちょろっといじったのを公開
12
https://hub.docker.com/r/tokyor/rstudio/
13
# tokyor imageの取得
$ docker pull tokyor/rstudio
イメージの取得
アドホック分析(Rstudio)
14
# Rstudio server起動
# Rstudioユーザ直下のディレクトリを自分のローカルのホームと重ねると便利
$ docker run -d -p 8787:8787 -v ~:/home/rstudio tokyor/rstudio
ブラウザから localhost:8787に接続し、
ユーザ名・パス共に rstudio でログイン可
バッチ処理(Rscript)
15
# 適当なRファイルを生成
$ echo "print(‘Hello, world’)" > hoge.R
# Dockerを起動
# ボリュームマッピングでファイルのパスを指定
$ docker run -v `pwd`:/host tokyor/rstudio Rscript /host/hoge.R
[1] "Hello, world"
ここから先の流れ(Python)
1. Docker Hubからベースになる
IMAGEをGET
2. 必要に応じたカスタマイズ
1. 日本(語)対応
2. ライブラリ/パッケージの指定
3. ビルドして使う
16
元になるDocker image(Python)
17https://hub.docker.com/r/jupyter/scipy-notebook/
Dockerfileを書く
18
FROM jupyter/scipy-notebook
USER root
# Set local for Japanese
RUN apt-get install -y locales && 
echo "ja_JP.UTF-8 UTF-8" >> /etc/locale.gen && 
/usr/sbin/locale-gen ja_JP.UTF-8 && 
/usr/sbin/update-locale LANG=ja_JP.UTF-8
USER $NB_USER
# set local
ENV LANG=ja_JP.UTF-8
ENV LANGUAGE=ja_JP.UTF-8
ENV LC_ALL=ja_JP.UTF-8
# Install Python 3 packages
RUN conda install --quiet --yes 
'boto3' 
&& conda clean -tipsy
RUN pip3 install xgboost
日本語環境設定・適当なパッケージインストール
(面倒なので3系のみ)だけ
ビルド
19
# Dockerfileを作成したディレクトリで以下を実行
# -tオプションはイメージの名前なので適当でOK
# 結構待つ(はず)
$ docker build -t local/jupyter .
アドホック分析(Jupyter)
20
# Juupyter Notebookの起動
# Docker内の作業ディレクトリを自分のローカルのホームと重ねると便利
# Port のマッピングは適当でOK(ゲスト側は8888 MUST)
$ docker run -d -p 8888:8888 -v ~:/home/jovyan/work local/jupyter
ブラウザから localhost:8888に接続
バッチ処理
21
# 適当なファイルを生成
$ echo "print('Hello, world')" > hoge.py
# 実行
$ docker run -v `pwd`:/host local/jupyter /bin/sh -c
'${CONDA_DIR}/bin/python3 /host/hoge.py'
Hello, world
(社内などの)プライベート環境での管理
• Docker Registry
–運用頑張る
• 💵で
–Docker Hub
–Google Container Registry
–Amazon EC2 Container Registry
22
よくわかってない&困っていること
• マルチユーザの管理
–パスワード管理含め考えるのが超面倒
–というかどうしたらいいの、僕…
• パスワードなどの受け渡し
–環境変数で本当にいいのか…?
• ホストとの結果の連携
–結局、ボリュームマッピングでOKな
のか?
23
まとめ
• Dockerを使うと、分析サーバ・同僚
などとの間での分析環境の共有が容
易に
• 計算結果の担保もしやすくなる
• データ分析用のDockerfileはよくで
きてるので、それをちょいといじれ
ばよい
• 管理・運用はガンバレ
24
お元気で。
Have a happy data analysis life!
25

Reproducebility 100倍 Dockerマン