Dockerのpython:tagについて
※ Docker初心者なので、誤っているところが多少あるかもしれません
Python
Docker composeを使ってDjangoとPostgreSQLなどのコンテナを一気にまとめたいなと思って色々調べてたところ、Pythonのコンテナのtagによってサイズが全く違っていて驚きました.
一般的にtagがlatestのものを取得した場合
docker pull python
としますが、今回、見比べたかったのがtagがonbuildとalpineのものです
docker pull python:3.5.3-alpine3.4 docker pull python:3.6.2-onbuild
で、まず2つのイメージを取ってきます
sh
で立ち上げたときの違いが、
$ docker exec -it python sh / # pwd / $ docker exec -it python-2 sh # pwd /usr/src/app
このようになっているので、onbuildが用いられる際、docker-compose.ymlはこのようになるのでしょうか
web: restart: always build: ./web [...] volumes: - /usr/src/app [...]
サイズ
気になるのが、それぞれのイメージのサイズなのですが、
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE python 3.6.2-onbuild 16123102e95c 2 days ago 684MB python 3.5.3-alpine3.4 a0d89d607539 8 days ago 88.6MB
となっていました。これほどの違いが発生した理由として、
python:alpine
の方は, alpine Linux
上にPythonを実行できるための最小限のインストールがされているように伺えました。
一方、python:onbuild
では、debian
上にbuildpack-deps
やPythonなどを入れているイメージになっていました。
現実問題
実際、どちらのほうを用いるのが、私にとって正解なのだろうか。
今作っているプロジェクトのデプロイ先がHeroku
なんですが、どちらのほうが良いのだろうか考えたとき、docker compose
を用いるのでそれぞれがコンパクトであるほうが値段的にも良いと思うので、python:alpine
を用いたいと考えました。
alpine
を使って事足りないことがない限り、alpine
を使うつもりです。懸念としては、apk
パッケージマネージャがどの程度、apt
と違うのだろうかということなんですが、
このサイトによると、ソースコンパイルからビルドすることが可能なので、apk
がきちんと操作できれば問題ないとのことです。
お粗末な記事になってしまって申し訳ございませんでした。