本記事では
- Dockerを利用したデータ分析環境の構築
- docker-composeでのpythonとpostgresqlの接続確認
を行っています
imageについて
postgresqlについては、公式のDockerイメージを利用しています。
anaconda環境は、自作のイメージをベースにしたDockerfileを作成しています。
FROM kyobad/anaconda3-alpine
MAINTAINER K.Kato
RUN conda install -y seaborn psycopg2 networkx\
&& pip install chainer
WORKDIR /root/notebook
CMD ["/bin/sh", "-c", "jupyter notebook --no-browser --port=8888 --ip=0.0.0.0"]
こちらは、anaconda環境をベースに、seabornやpsycopg2といった分析環境をインストールしたイメージです。
composeファイルについて
このpython環境と、postgresqlを接続するためのdocker-composeの構成ファイルを作成します。
version: '2'
services:
db:
image:
postgres
restart:
always
environment:
POSTGRES_USER:
pythonist
POSTGRES_PASSWORD:
password
POSTGRES_DB:
mypyenv
ports:
- "5432"
container_name:
postgres-db
volumes:
- ./postgres-db:/var/lib/postgresql/data
- ./docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d
python:
build: .
volumes:
- ./workdir:/root/notebook/
ports:
- "8888:8888"
links:
- db
depends_on:
- db
dbのenvironmentで、ユーザ名やパスワード等を設定しています。これらは適宜変更して使ってください。
volumeで設定している postgres-db/ は、postgresのデータをローカルにマウントしてバックアップを取っています(本当はdataonlyのコンテナを作成することが望ましいとされている?)
docker-entrypoint-initdb.dは、コンテナ起動時の初期設定です。ここに、テーブル作成等のsqlファイルを置いておくと、それらがコンテナ起動時に行われます。
pythonのvolumeは、起動したnotebookをローカルに保存するためのマウントです。
起動方法
これらを置いたディレクトリで、
docker-compose up
コマンドを実行することで、postgresコンテナとjupyter notebookコンテナが立ち上がります。
ブラウザから、localhost:8888にアクセスし、composeファイルに書いてあるdb名やパスワードでdbにアクセス可能です
結論
- Dockerを使うことで簡単に分析環境の構築や再構成等可能になる
- notebookやpostgresデータをローカルにマウントすることでバックアップ&ポータブルが可能