自宅サーバーで
- 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化
していく予定です。


コメント