集中力が10分しか持たないハチワレ先生

集中力が10分しか持たないハチワレ先生

技術メインの雑記ブログ

Docker で Python 環境構築を 10 分で整える

初心者エンジニアにとって環境構築が最初にして最大の難関です(私はそうでした...)
そこでDockerを利用することで、環境構築をつまづきポイントを少なくできます
今回は Docker(Docker Compose)を利用することで Python の環境構築を紹介します

この記事を読んで分かること

  • Docker Compose を使うことで Python の実行環境を用意できる
  • ブラウザから Jupyter Notebook を実行できる

前提条件

今回は Python を Docker コンテナ上で動作可能にすることにフォーカスします
Python, Docker の細かい説明には焦点を当てないのでご注意を m(__)m

動作環境は以下の通りです

Docker, DockerCompose をインストールする

※今回は Mac を前提としているため Docker for Mac をインストールします

Docker ドキュメントを日本語翻訳して頂いているサイトに記載があります
(英語を読むのに抵抗がない方は本家ドキュメントを参照してください)

  1. Docker Hubから Docker Desktop for Mac をダウンロードします
  2. インストール方法に従ってインストールすると Docker だけでなく、Docker Compose も一緒にインストールされます

設定ファイルを記述する

Docker を使う時に、毎回長々とオプションをつけるよりも
設定を YAML 形式で記述するDocker Composeを利用する方がとっつきやすいと思っています (ssh する時に config 書いておいた方が早くアクセスできるみたいな...?)

最終的なディレクトリ構成は以下の通りです

docker_python
        ├── .docker
        │   ├── Dockerfile
        │   └── requirements.txt
        ├── docker-compose.yml
        └── sample.py
  • docker-compose.yml
    • Docker Compose の設定ファイル(YAML 形式)
    • Docker のコンテナの設定を記述します
version: "3.7"
services:
  app:
    build: .docker
    volumes:
      - ./:/app
    working_dir: /app
    tty: true
    ports:
      - "8890:8890"
  • .docker/Dockerfile
    • Docker イメージの設計図のようなもの
    • requirements.txtに設定したパッケージ群をインストールした Python の実行環境を用意します
FROM python:3.8

WORKDIR /init

COPY requirements.txt /init

RUN pip3 install -r /init/requirements.txt
  • .docker/requirements.txt
    • Python にインストールするパッケージ群を記述します
    • ※今回はデータ分析でよく使われるパッケージを設定しましたが適宜変更可能です
numpy
pandas
jupyter
  • sample.py

    • ここでは Python の実行確認をするためだけなので、シンプルにしておきます
    • 実行完了後はsample.csvを出力します
import numpy as np
import pandas as pd

data = pd.Series(np.arange(10))
data.to_csv('./sample.csv')

Python を Docker コンテナ上で実行する

  1. Docker Compose の起動

    • docker-compose.yml で設定した Docker コンテナを起動します
docker-compose up -d
  1. Python の実行

    • Docker コンテナ上で sample.py を実行します
    • 実行後、sample.py と同じディレクトリ下に sample.csv が作成されます
docker-compose exec app python sample.py

ここまでで Python の実行環境の構築は完了ですが、Python でデータ分析をする際は
Jupyter Notebook 等を利用することが多いため、その方法についても紹介します

Docker コンテナ上の Jupyter Notebook にブラウザにアクセスする

  1. Docker コンテナ上で bash を起動する
docker-compose exec app bash
  1. Jupyter Notebook を起動する

    • --allow-root, --ip=0.0.0.0
      Docker コンテナ上で Jupyter Notebook を起動するために必要な設定です
    • --port
      docker-compose.yml で設定している(コンテナ側の)ポート番号と合わせる必要があります
    • --NotebookApp.token=''
      つけなくても問題ありませんが、その場合は実行時に発行される URL をブラウザに入力する必要があります
jupyter notebook --allow-root --ip=0.0.0.0 --port=8890 --NotebookApp.token=''
  1. ブラウザから Jupyter Notebook を開く

    • Google Chrome などのブラウザからlocalhost:8890にアクセスすれば OK

まとめ

Docker Compose を利用することで Python の実行環境を用意する方法を紹介しました
つまづきがちな環境構築も Docker をインストールしていれば比較的スムーズになると思います