Pythonは2022年プログラミング言語ランキングで1位を取るなど現在最も人気のあるプログラミング言語の一つです。
理由としてはコードがシンプルで学びやすいことが特徴のひとつ、そしてAI開発・機械学習・データ分析などの現在人気のある分野においても利用され、今後のマーケットに期待されているからです。
Pythonはローカル環境に直接インストールして使用することも可能ですが、今回はローカル環境を汚す(不要なファイルをインストールすること)なく構築したいため「docker」を使って環境構築を作成したいと思います。
Python 環境構築
Dockerのインストール
まずはお使いのPCに「Docker」をインストールしてください。
※今回はインストール手順を省略します。
インストール手順はこちらの記事にまとめましたので、もしよければこちらを参考にしてください。
Dockerに使用するディレクトリの作成
今回はホームディレクトリに「docker」ディレクトリを作成し、その中に python環境構築 用として「python」ディレクトリを作成します。
Users/ユーザー名/docker/python
Users/
└ ユーザー名/
└ docker/
└ python/
※ディレクトリの構成はお好みで変更してください。
Dockerfile、 docker-compose.yml等の作成
「python」ディレクトリの中に「src」←ディレクトリ、「.env」、「dockerfile」、「docker-compose.yml」、「requirements.txt」を作成してください。
ディレクトリの構成は下記のようになります。
python/ ├── src/ ├── .env ├── dockerfile ├── docker-compose.yml └── requirements.txt
また「dockerfile」「docker-compose.yml」の中身は下記をコピーして貼り付けて保存をしてください。
・dockerfile (※拡張子は無しなので注意してください)
FROM python:3.10
USER root
ENV LANG=ja_JP.UTF-8 \
LAUGUAGE=ja_JP:ja
LC_ALL=ja_JP.UTF-8 \
TZ=JST-9 \
TERM=xterm
RUN apt-get update && apt-get upgrade -y && \
apt-get install -y libgl1-mesa-dev && \
apt-get -y install locales && \
localedef -f UTF-8 -i ja_JP ja_JP.UTF-8 && \
apt-get -y install ffmpeg && \
apt-get install -y vim less && \
rm -rf /var/lib/apt/lists/*
RUN mkdir -p /src
COPY requirements.txt /src
WORKDIR /src
RUN pip install --upgrade pip && \
pip install --upgrade setuptools && \
pip install -r requirements.txt
・docker-compose.yml
version: '3'
services:
python:
restart: always
build:
context: . #Dockerfileがあるディレクトリ
dockerfile: ./Dockerfile #Dockerfile を指定
image: python-img:${TAG} #build時にイメージ名を宣言
container_name: 'dev_python' #build時にコンテナ名を宣言
tty: true
volumes:
- type: bind
source: "./src"
target: "/src"
・requirement.txt
## 機械学習 scikit-learn numpy scipy pandas pandas-datareader tensorflow matplotlib ##web解析・操作 beautifulsoup4 selenium
・.env
TAG=1.00
※こちらは 作成するdockerイメージのバージョン管理するために使用します。
以上でpythonの環境構築は完成です。
あとは dockerコマンド を実行するだけです。
dockerコマンドの実行
まずはコンテナをビルドします。
下記のコマンドを実行してください。
コンテナのビルド
docker build -t python-img:1.00 /Users/ユーザ名/docker/python
※さきほど作成した「dockerfile」があるディレクトリを指定しています。ビルドには数分かかると思います。しばらくお待ち下さい。
ビルドが完了しましたら、コンテナを実行します。
下記のコマンドを実行します。
コンテナの実行
docker run -v /Users/ユーザー名/docker/python/src:/src –name dev_python -it イメージID /bin/bash
イメージIDは下記コマンドで調べることがきます。
イメージの一覧
docker images -a
※「REPOSITORY」「TAG」「IMAGE ID」「CREATED」「SIZE」の項目が表示されます。
※「IMAGE ID」の項目がイメージIDとなります。
さて、さきほどの説明ではコンテナを実行するとき下記のコマンドを使用しました
docker run -v /Users/ユーザー名/docker/python/src:/src –name dev_python -it イメージID /bin/bash
コマンドがとても長いです。
コマンドの詳細な説明は省きますが、コンテナの名前を「dev_python」に、ホスト側の「src」ディレクトリにコンテナの「src」をマウントするように指定します。
コンテナはコンテナをダウンする毎(パソコンの電源を落としたり)にコンテナ内のデータは消えてしまうため、ホスト側と同期(バインドマウント)をして消えないようにしています。
ですが毎回このコマンドを入力するのは手間です。
そこで「docker compose」コマンドの登場です
docker comose コマンドを使用する
「docker compose」コマンドを使用すると便利なことがあります。
「docker compose」コマンドを実行するために、「docker-compose.yml」を作成しました。
こちらのファイルにポートを繋げる設定や、マウントする場所を予め指定おいてこのファイルの実行することによってコマンドの入力の手間を簡単にします。
下記コマンドを実行してください。(こちらのコマンドもターミナルで先に「Users/ユーザー名/docker/pyhton」ディレクトリに移動してから実行してください)
#初回起動時
docker compose up -d
※ docker compose up コマンドは 「build」と「run」を同時に行ってくれます(「-d」はバックグランドで動かすオプションです)
#2回目以降 (コンテナ作成後)
docker compose start
#コンテナの停止
docker compose stop
#コンテナの停止・削除
#コンテナ削除後、再実行する際は docker compose up -d を実行してください
docker compose down
さきほどのコマンドと比べるととても短く覚えやすくなったと思います。
「docker-compose.yml」は複数のコンテナを同時に起動するときに使用するファイルですが、今回はその機能を利用しました。
最後に
今回イメージ作成の元をpython公式イメージを利用しました。
作成イメージ元を 「Ubuntu」「Alpine」などに変更し、そこからpythonをインストールをしても全く問題ありません。お好みで変更してください
また今回「requirement.txt」は私がよく使うライブラリを書きましたが、使用する際はお好みのライブラリに書き換えてください。
Python環境環境の構築を考えてられる方の一助になれば幸いです。
わからないことなどあれば質問をコメントでいただければ私の分かる範囲であればお答えしますのでお気軽に質問してください。
※おまけ よく使うコマンド
現在起動中のコンテの確認
docker ps
全てのコンテナの確認
docker ps -a
ポート衝突時ポートが衝突していないか調べる
lsof -I:[調べたいポート番号]
使用中プログラムを止める
kill -9 [process id]
コンテナ内部に入るコマンド
docker exec -it dev_python bash
※コンテナから出る場合は 「exit」で出れます
コンテナ削除
docker rm [コンテナID]
イメージの削除
docker rmi [イメージID]