Docker上でミニマムPython環境を作ってみました。
その中で感じた、Docker上で環境を作るメリットを整理しました。
結論
pythonファイルを書いて実行するための超シンプルな環境が出来た。
https://hub.docker.com/r/rimacdocker/ubuntu_pythondockerを使うメリットを整理出来た。
Dockerとは
ざっくり説明すると以下のような感じです。
・軽量で高速に起動、停止などが可能な仮想化基盤
・ミドルウェアのインストールや各種環境設定をコード化して管理できる
分かりやすくまとめられた記事がたくさんあったので、詳細な説明はそれらを参照されるといいかと思います。
何でdockerでやりたかったのか
- マシンサーバーの環境を汚さずに、簡単に、環境構築がしたかった。
- 移植が容易な環境を、色々作りたかった。
本題:今回作った環境(DockerImage)
OSはUbuntu18.04を入れました。
dockerのubuntuイメージは本当に最低限のものしか入ってないので、
とりあえずvimをインストール。
(そのままだとviコマンドすら効きません…)
さらに、言語python3をインストール、
python3のパッケージマネージャとしてpip3も入れてます。
OS:
- Ubuntu18.04
インストールしたパッケージ:
- Python 3.6.7
- pip 9.0.1
- Vim 8.0
コンテナ内で実行したコマンド一覧
apt update
apt upgrade
apt install vim
apt install python3
apt install python3-pip --fix-missing
Docker上で環境を作ることで享受できる良いこと
移植が圧倒的に楽
もはや言い尽くされた感もありますが、
dockerコンテナとして構築することで
使用するPCにdockerさえ入っていれば
OSやライブラリ、ミドルウェアを意識せずにその環境を使えるのがメリットです。
やろうと思えば、
会社の端末、家の端末、出先の端末、
どこでも同じインフラ環境で作業出来るのはとても便利です。
マシンサーバーとしてのOSは意識しなくて良いのが嬉しいです。
docker cpコマンドでコンテナ-ホスト間のファイルのやりとりも簡単に出来ます。
(マウントポイントとか作らなくて良いんですね)
環境構築のやり直しが出来る
環境作ってる時に想定外のエラーが起こることは多々あります。
・ ライブラリのインストールに失敗して中途半端に何かが入っちゃうとか…
・ パッケージが足りないと言われて、パッケージインストールしたのに結局上手くいかないとか…
・ 何かをインストールしたせいで、それまで上手くいってたものまで動かなくなったとか…
(考えただけで頭が痛くなりますね…。)
そんな時に、dockerであれば
exitコマンドでコンテナから抜けて、
ごちゃごちゃした環境をリセット出来るのはとても有り難いです。
ここでは説明を割愛しますが、
こまめにdocker commitしておけば、
exitしてもcommit時点の環境から作り直せるので
その点でも環境構築のコストは大幅に削減出来ます。
不要なもの運用上必要なものを入れなくて良い
例えば、pythonをインストールして使うとき、
python自体のバージョン管理として
virtualenvとかpyenvを入れて運用することが多いですが、
docker上で環境を作る時はそれらのミドルウェアを入れなくて良いと(個人的には)思っています。
他のバージョンのpythonを入れたいときは
別のコンテナやイメージを作れば解決しますからね。
簡単な構成にしておくことは
環境を作る上でも、運用上でもメリットは大きいです。
(少なくとも、ある日突然、pyenvコマンドが効かない…みたいな絶望からは距離をおくことが出来るんじゃないですかね)
まとめ
dockerコンテナ毎に様々な環境を、独立して作れるので
ややこしいライブラリを気にせず入れたり、
各言語、ライブラリの最適化環境を作ったりできるのが嬉しいですね。
環境構築コストも軽減できるので、気軽に試せて良いと思います。