PythonをDockerで管理する理由【仮想環境との違いを整理】

Docker

自宅サーバーで

  • WordPress
  • Pythonスクリプト
  • Webアプリ

などを動かしています。

これまでPythonはずっと

Python仮想環境(venv)

で管理していました。

ただ、最近は

Dockerで管理した方がいいのでは?

と思うようになりました。

正直なところ、まだ自分も完全には理解しきれていません。

なので今回は

  • Python仮想環境
  • Docker

の違いを整理しながら、
なぜDocker管理が良いと言われているのかをまとめてみます。


今までのPython管理方法(仮想環境)

一般的なPython開発では

venv

という仮想環境を使います。

例えば

python3 -m venv venv

作成

source venv/bin/activate

有効化

pip install flask

パッケージインストール

プロジェクトごとに

venv

を作ることで、

  • Pythonパッケージの衝突
  • バージョン違い

を防ぐことができます。

これはとても便利です。


ただし問題もある

仮想環境は便利ですが、
サーバー運用になると問題も出てきます。

例えば

Python3.10
Python3.11
Python3.12

など、バージョンが増えてくると

環境がかなり複雑になります。

さらに

pip
apt
OSライブラリ

なども関係してくるので

環境の再現が難しくなります。


Dockerの考え方

Dockerは

アプリごとに完全な環境を作る

という考え方です。

例えば

Python
ライブラリ
OS環境

すべてをまとめて

コンテナ

として管理します。

つまり

Pythonアプリ = 1コンテナ

という形になります。


Dockerのメリット

Dockerを使うと

次のメリットがあります。


環境が完全に再現できる

Dockerでは

Dockerfile

で環境を定義します。

FROM python:3.11WORKDIR /appCOPY . .RUN pip install -r requirements.txtCMD ["python", "app.py"]

このファイルがあれば

docker build

するだけで

全く同じ環境が再現できます。


サーバーが汚れない

仮想環境の場合

pip install

を繰り返していると

サーバーがどんどん汚れていきます。

Dockerの場合

コンテナ削除 = 環境削除

なので

サーバー本体は綺麗なままです。


アプリごとに完全分離できる

例えば

アプリA
Python3.8アプリB
Python3.11

のような場合でも

Dockerなら問題ありません。

それぞれ

別コンテナ

で動きます。


自宅サーバーとの相性が良い

自宅サーバーの場合

  • WordPress
  • Pythonスクリプト
  • Webアプリ
  • API

など、色々なものを動かします。

Dockerを使うと

WordPress

コンテナPython API

コンテナ自動投稿スクリプト

コンテナ

という形で

きれいに整理できます。


ただしDockerにもデメリット

もちろんデメリットもあります。


学習コストがある

Dockerは

  • Dockerfile
  • docker-compose
  • コンテナ管理

など覚えることが多いです。

最初はかなり混乱します。


小さいスクリプトには大げさ

例えば

cronで動くPythonスクリプト

程度なら

Dockerにしなくても問題ないかもしれません。


今の自分の環境

現在の自宅サーバーは

Ubuntu Server

Docker

WordPress

という構成です。

ただし

Pythonスクリプト
Webアプリ

などは

Docker導入前に作ってしまったので

サーバー直置き

の状態になっています。

今後は

PythonアプリもDocker化

して整理していこうと思っています。


まとめ

Python管理には

仮想環境(venv)

Docker

があります。

それぞれの特徴は

仮想環境

軽い
シンプル
開発向き

Docker

環境再現
サーバー運用向き
複数アプリ管理に強い

という感じです。

自宅サーバーで色々なサービスを動かす場合は

Docker管理

の方が良さそうだと感じています。

今後は

既存のPythonアプリをDocker化

していく予定です。

コメント

タイトルとURLをコピーしました