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がきちんと操作できれば問題ないとのことです。
お粗末な記事になってしまって申し訳ございませんでした。