背景
-
- データ解析するときにDockerでサクッとそれっぽい環境つくれたら便利
-
- pythonでデータ分析と実行結果の記録が並行して行えるjupyter-notebookというものがある
- 使ったことないけど、便利そうなので、とりあえずDockerで構築してみよう(という動機で始めた)
概要
Dockerでjupyter(notebook)、mysqlのコンテナを立ち上げて、
jupyterからmysqlコンテナに格納しているデータを参照する。
docker-compose.yml
db(mysql), jupyter(notebook)の2コンテナ
version: '2'
services:
db:
build: db
environment:
- MYSQL_DATABASE=analysis
- MYSQL_ROOT_PASSWORD=password
- TZ=Japan
networks:
- default
ports:
- '3306:3306'
jupyter:
build: jupyter
volumes:
- ./jupyter/work/:/home/jovyan/work/
ports:
- '8888:8888'
jupyterのホームディレクトリをマウントしておくことで、
データ解析結果や途中結果をローカル環境にも保持することができる
environment:
- MYSQL_DATABASE=analysis
mysqlにこの記述をしておくと、コンテナ起動時に指定したDBを自動で作成してくれる(便利)
Dockerfile
2コンテナに用意
jupyter
FROM jupyter/datascience-notebook
WORKDIR /home/jovyan/work
COPY requirements.txt ./
RUN pip install -r requirements.txt
ちょっと引っかかりやすいのですが、私の構成では
COPY requirements.txt ./
が正解で
COPY jupyter/requirements.txt ./
ではないです
docker-composeのbuildで指定した場所がカレントになるようですね。
db
mysqlは日本語データを扱う場合に、設定が必要なので以下のように設定。
日本語扱わないならば、Dockerfileを用意しなくても良い
FROM mysql:5.7
RUN apt-get update && \
apt-get install -y locales && \
rm -rf /var/lib/apt/lists/* && \
echo "ja_JP.UTF-8 UTF-8" > /etc/locale.gen && \
locale-gen ja_JP.UTF-8
ENV LC_ALL ja_JP.UTF-8
RUN { \
echo '[mysqld]'; \
echo 'character-set-server=utf8mb4'; \
echo 'collation-server=utf8mb4_general_ci'; \
echo '[client]'; \
echo 'default-character-set=utf8mb4'; \
} > /etc/mysql/conf.d/charset.cnf
追記
久しぶりに立ち上げたら動かなかった。mysqlのバージョンを指定して(下げたら)うまくいった
Docker立ち上げ
$docker-compose build
$docker-compose up
jupyter-notebook
コンテナ立ち上げ時に以下のようなログをコンソールが吐くと思うので、そのurlにアクセスすればOKです。
http://localhost:8888/?token=hogehoge
あとは、こんな感じでnotebookからDocker上のmysqlコンテナに接続することができます。
connection = pymysql.connect(host="db", db="analysis", user="root",
password="password", charset='sjis', cursorclass=pymysql.cursors.DictCursor)
あとは、そこでデータを作成したり、集計したり、加工したり、グラフ化してみたり、お好きなように。
リポジトリ
ご参考にどうぞ
https://github.com/SLEAZOIDS/jupyter-on-docker