1. はじめに
私が行った研究において,Pythonイメージのタグについて多くのことを知ることができたので,今回得た知識をまとめてみました.なお,自分でタグをつけるという使い方もありますが,今回はDocker Hubからイメージをpullしてくる際に指定できるタグについて触れていこうと思います.
2. タグとは
Docker Hubからイメージをpullしてくる際に指定できるタグには,主にバージョンを指定するという役割があります.タグを指定するときは,以下のように指定します.
docker image pull python:3.9
コロン(:)以降がタグの内容となっています.
本記事では,Pythonのバージョンを3.9または最新バージョンを用いていきます.
3. タグの種類
タグでは主にバージョンを指定しますが,そうでない場合もあります.それらは厳密にはバージョンを指定するものではあるのですが,直接数値を指定するものではないため,それぞれ固有の指定の仕方をする必要があります.
3-1. latest
タグにlatestと指定すると,そのイメージの最新バージョンがpullされます.
$ docker image pull python:latest
3-2. buster
タグにbusterと指定すると,ベースイメージがDebianのバージョン10であるPythonイメージがpullされます.以下のようなタグを指定すると,pythonバージョンが3.9で,Debianバージョンが10のPythonイメージがpullされます.なお,busterというのは,Debianのバージョン10のコードネームで,Debianには,バージョンごとにコードネームが与えられています.
$ docker image pull python:3.9-buster
3-3. bullseye
タグにbullseyeと指定すると,ベースイメージがDebianのバージョン11であるPythonイメージがpullされます.以下のようなタグを指定すると,pythonバージョンが3.9で,Debianバージョンが11のPythonイメージがpullされます.
$ docker image pull python:3.9-bullseye
3-4. bookworm
bookwormは,2023年12月26日時点のDebianの最新バージョンです.タグにbookwormと指定すると,ベースイメージがDebianのバージョン12であるPythonイメージがpullされます.以下のようなタグを指定すると,pythonバージョンが3.9で,Debianバージョンが12のPythonイメージがpullされます.
$ docker image pull python:3.9-bullseye
3-5. slim
タグにslimと指定すると,よく用いられるライブラリ以外を除外した,サイズが削減されたPythonイメージがpullされます.指定は以下のように行います.
$ docker image pull python:3.9-slim
また,以下のように詳細にタグを指定することもできます.
$ docker image pull python:3.9-slim-bookworm
このように指定すると,pythonのバージョン3.9の,ベースイメージがbookwormの,slimイメージがpullされます.
3-6. alpine
タグにalpineと指定すると,Alpine LinuxをベースイメージとしたPythonイメージがpullされます.指定は以下のように行います.
$ docker image pull python:3.9-alpine
このイメージは,slim以上にライブラリが除外されており,サイズがかなり小さくなっています.しかし,pythonとの相性が悪く,速度が遅くなってしまったり,必要なライブラリを入れる手間が大きくなってしまったりと,デメリットも多くあります.
また,alpineにもバージョンがあり,これを指定することもできます.
$ docker image pull python:3.9-alpine3.19
3-7. windowsservercore
タグにwindowsservercoreと指定すると,windows環境用のPythonイメージがpullされます.指定は以下のように行います.
$ docker image pull python:3.9-windowsservercore
4. タグを指定しない場合
これまで,様々なタグの指定の仕方を紹介してきましたが,逆に,タグを指定しない場合はどのようになるのでしょうか.これは,実行ログを見ると分かります.
$ docker image pull python
Using default tag: latest
latest: Pulling from library/python
bc0734b949dc: Pull complete
b5de22c0f5cd: Pull complete
917ee5330e73: Pull complete
b43bd898d5fb: Pull complete
7fad4bffde24: Pull complete
d685eb68699f: Pull complete
107007f161d0: Pull complete
02b85463d724: Pull complete
Digest: sha256:3733015cdd1bd7d9a0b9fe21a925b608de82131aa4f3d397e465a1fcb545d36f
Status: Downloaded newer image for python:latest
docker.io/library/python:latest
実行開始直後に,Using default tag: latestと表示されています.つまり,タグを指定しない=latest,最新版が指定されるということです.実は,これはDebianのバージョンも同じようになっています.
python:3.9イメージと,python:3.9-bookwormイメージのレイヤを比較してみます.
$ docker image pull python:3.9
3.9: Pulling from library/python
bc0734b949dc: Pull complete
b5de22c0f5cd: Pull complete
917ee5330e73: Pull complete
b43bd898d5fb: Pull complete
7fad4bffde24: Pull complete
cd0903c43c21: Pull complete
b85288e0cb16: Pull complete
7a97f6368ea6: Pull complete
Digest: sha256:30678bb79d9eeaf98ec0ce83cdcd4d6f5301484ef86873a711e69df2ca77e8ac
Status: Downloaded newer image for python:3.9
docker.io/library/python:3.9
$ docker image pull python:3.9-bookworm
3.9-bookworm: Pulling from library/python
bc0734b949dc: Pull complete
b5de22c0f5cd: Pull complete
917ee5330e73: Pull complete
b43bd898d5fb: Pull complete
7fad4bffde24: Pull complete
cd0903c43c21: Pull complete
b85288e0cb16: Pull complete
7a97f6368ea6: Pull complete
Digest: sha256:30678bb79d9eeaf98ec0ce83cdcd4d6f5301484ef86873a711e69df2ca77e8ac
Status: Downloaded newer image for python:3.9-bookworm
docker.io/library/python:3.9-bookworm
3~10行目のコロンより左側の文字列をそれぞれ比べてみると,同じ文字列が表示されています.これは,各レイヤーが共通のものであることを意味しています.この結果から,python:3.9と指定してpullを実行した場合,python:3.9-bookworm,つまりDibianの最新版をベースイメージに使ったpython:3.9イメージがpullされます.
5. 終わりに
本記事では,私が研究を通じて得たpythonイメージのタグについての知識をまとめてみました.この内容が何かの役に立てたのなら幸いです.