背景

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

广告
将在 10 秒后关闭
bannerAds