7
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

pip3ベースでデータサイエンス環境を作るためのDockerfile

Last updated at Posted at 2020-01-20

やること

データサイエンス用のDockerコンテナといえばjupyter公式が配布しているscipy-notebookがありますが、Dockerfileを見るとcondaベースで書かれています。
しかし、宗教上の理由でcondaを使いたくありません。
そこで、今回はpip3ベースでデータサイエンス用の環境を作るためのDockerfileを書きます。

参考にした記事
Dockerを使って機械学習の環境を作ろうとした話

方針

・ python公式のDocker imageをベースにする
・ pip3を使う
・ 必要なモジュールのみをrequirements.txtから読み込む
google-cloud-bigqueryでBigQueryと繋ぎたいのでCloudSDKを入れる
・ jupyterlab+plotlyで可視化をしたいのでNode.jsを入れる

出来たもの

Dockerfile

# Pythonの3.8をベースにする
# 参考: https://qiita.com/penpenta/items/3b7a0f1e27bbab56a95f
FROM python:latest

USER root

RUN apt-get update \
    && apt-get upgrade -y \
    && apt-get install -y sudo \
    && apt-get install -y lsb-release \ # google-cloud-sdkのインストール時に必要
    && pip3 install --upgrade pip

# 作業するディレクトリを変更, なくてもいい
# WORKDIR /home/{適当なユーザー名}

# 予め作成してDockerfileと同じフォルダにあるrequirements.txtをインストール
COPY requirements.txt ${PWD}
RUN pip3 install -r requirements.txt

# Cloud SDKをインストール
# https://cloud.google.com/sdk/docs/downloads-apt-get
RUN export CLOUD_SDK_REPO="cloud-sdk-$(lsb_release -c -s)" && \
    echo "deb http://packages.cloud.google.com/apt $CLOUD_SDK_REPO main" | tee -a /etc/apt/sources.list.d/google-cloud-sdk.list && \
    curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add - && \
    apt-get update -y && apt-get install google-cloud-sdk -y

# plotlyを使うため、Node.jsをインストール
# https://github.com/nodesource/distributions/blob/master/README.md
RUN curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash - \
    && sudo apt-get install -y nodejs

# JupyterLabでplotlyをサポートする
ENV NODE_OPTIONS=--max-old-space-size=4096
RUN jupyter labextension install @jupyter-widgets/jupyterlab-manager@1.1 --no-build \
    && jupyter labextension install jupyterlab-plotly@1.4.0 --no-buil \
    && jupyter labextension install plotlywidget@1.4.0 --no-build \
    && jupyter lab build
ENV NODE_OPTIONS=

今回インストールするモジュール群をrequirements.txtに書きます。
バージョン固定はお好みで

requirements.txt
numpy
pandas
matplotlib
seaborn
scikit-learn
scrapy
jupyter
plotly
google-cloud-bigquery
jupyterlab

使い方

適当なフォルダの中に上記2ファイルを入れて、そのディレクトリに移動します。
後は以下のコマンドを順に実行すればOK

# Docker imageを作成
docker build --rm -t {Docker imageの名前} .
# Docker Containerを作成
# Dockerの中と外を繋ぐためにポートフォワーディング(-p)する
# Dockerコンテナを消してもファイルが消えないようにDocker外のフォルダをマウント(-v)する
docker run -itp {コンテナ外のport}:{コンテナ内のport} -v {コンテナ外のフォルダの絶対パス,末尾に"/"はつけない}:{コンテナ内でフォルダをマウントしたい場所の絶対パス+マウントするフォルダのDocker内での名称} --name {コンテナの名前} {作成元のimageの名前} /bin/bash
# jupyterの起動
jupyter lab --ip=0.0.0.0 --allow-root --port {コンテナ内のport}

その他諸々

# cloud SDKの認証
gcloud init
# google-cloud-bigqueryのAPI認証
hogehoge
export GOOGLE_APPLICATION_CREDENTIALS={認証ファイルの絶対パス}
export GOOGLE_CLOUD_PROJECT={繋げるプロジェクト名}
7
10
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
7
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?