Dockerのpython:tagについて

※ Docker初心者なので、誤っているところが多少あるかもしれません

Python

Docker composeを使ってDjangoPostgreSQLなどのコンテナを一気にまとめたいなと思って色々調べてたところ、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-depsPythonなどを入れているイメージになっていました。

現実問題

実際、どちらのほうを用いるのが、私にとって正解なのだろうか。

今作っているプロジェクトのデプロイ先がHerokuなんですが、どちらのほうが良いのだろうか考えたとき、docker composeを用いるのでそれぞれがコンパクトであるほうが値段的にも良いと思うので、python:alpineを用いたいと考えました。

alpineを使って事足りないことがない限り、alpineを使うつもりです。懸念としては、apkパッケージマネージャがどの程度、aptと違うのだろうかということなんですが、

stormcat.hatenablog.com

このサイトによると、ソースコンパイルからビルドすることが可能なので、apkがきちんと操作できれば問題ないとのことです。

お粗末な記事になってしまって申し訳ございませんでした。

Reference