LoginSignup
12
15

More than 5 years have passed since last update.

Docker+Mysql+Jupyterで即座にデータ解析環境を用意する

Last updated at Posted at 2017-11-11

背景

  • データ解析するときに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

12
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
15