識別子多すぎません?
イメージにせよコンテナにせよ、識別子の種類がちょっと多すぎる気がしなくもない。
イメージ
Repository
名前にあたる、のか。スラッシュで区切られている場合は前半がユーザー名や管理者名、後半がイメージ名という扱いになる。レポジトリってなんのレポジトリだよと言うと、Docker Hubの、とか、立ててる場合ではプライベートの、ということになる。実際 docker push
する際はここでレポジトリが判断される。
Tag
同一Repositoryでも例えばOSバージョン違いなどがあり、Tagで識別される。例えばdocker.io/centosのタグ7.1であれば、docker.io/centos:7.1と表記される。Tagを指定せず、Repositoryだけでイメージを指定した場合は、デフォルトではlatestが選ばれる。
なお docker tag
といういかにもタグを変更できそうなコマンドがあるが、実際のところこのコマンドではレポジトリ名も変更できる。
$ docker tag 7d9495d03763 maryatdocker/docker-whale:latest
# 公式docs https://docs.docker.com/mac/step_six/ から抜粋
ID
ローカルでイメージを識別するためのユニークID。当然ながら一意にイメージを指定できるが、覚えにくいし打ちにくい。
コンテナ
ID
イメージと同様のユニークID。やはり人間にやさしいものではない。
Name
こちらもユニークに付けられるものだが、人間が読みやすい文字列になっている。自動でランダムに無意味な文字列が付与されるが、docker run --name="foobar"
で任意の名前を持たせることも可能。コンテナ操作系のコマンド(start/stop/attach等)にはNameを渡すことができるので、基本的には手動でつけた方がいい。
面白いけど意味のあるような意味のない不思議な名前が付くので、どういう生成してんだろなと調べようとしたら先駆者がいらっしゃった。
結論
- イメージは
repository:tag
で一意に指定。 - コンテナはNameを付けてNameで指定。