dockerイメージを公開する
目的
Dockerイメージの公開方法と、その周辺用語を理解する
用語の整理
レジストリ
イメージのホスティングと配布を受け持つサービス。 デフォルトのレジストリはDocker hub。プライベートレジストリとしてGCPのContainer Registryなどがある。リポジトリ
関連するイメージの集合(通常は、同じアプリケーションもしくはサービスの様々なバージョンを提供する)タグ
リポジトリ内のイメージに与えられる識別子(7.4.6やlatestなど)
docker pull tanaka/apache-php:latest
というコマンドは、レジストリであるDocker hubのtanaka/apache-phpリポジトリから、latestというタグのついたイメージを取得している。
イメージの名前空間
Dockerイメージが属する名前空間には3種類あり、イメージ名から判断できる。
user名前空間
tanaka/apache-php
というように、文字列と / でプレフィックスされた名前は、'user'の名前空間に属している。
これらのイメージはユーザによってDocker hub上にアップロードされたもの。root名前空間
プレフィックスや / を持たない名前(debianやphpなど)は、'root' の名前空間に属している。 この名前空間はDocker Inc. が管理しており、Docker hubから入手できる、広く使われているソフトウェアやディストリビューションの公式イメージのために予約されている。サードパーティ名前空間
ホスト名もしくはIPがプレフィックスになっているイメージは、サードパーティのレジストリがホストしているイメージ。(gcr.ioなど)
この名前空間の構成によって、ユーザはイメージがどこから来たものなのか、混乱せずに済む。
イメージを公開する
今回は、この記事で作ったDockerイメージを公開する。
公開するにはレジストリの認証が必要なので、Docker hubの場合は docker login コマンドで事前にログインを行う。
$docker login
認証に成功したら公開するために docker push コマンドを実行する。
docker push [オプション] 名前[:タグ]
$ docker push repo/cowsay-fortune The push refers to repository [docker.io/repo/cowsay-fortune] 304429cbf295: Pushed 10782bf6eac8: Pushed 8c02234b8605: Mounted from library/debian latest: digest: sha256:8fd21c04afa00c95d392afea5deec89702c492f2974518a6abe681bcc912d2ad size: 948
ここでは、リポジトリ名の後にタグを指定していないので、自動的にlatestというタグが割り当てられる。 アップロードが完了したら docker pull コマンドでイメージをダウンロードできる。
docker pull [オプション] 名前[:タグ] | [レジストリ・ホスト[:レジストリ・ポート]/]名前[:タグ]
手元のイメージを削除して pull してみる。
$docker pull repo/cowsay-fortune Using default tag: latest latest: Pulling from repo/cowsay-fortune 376057ac6fa1: Already exists 99b463bdca15: Pull complete 2588e1ff2246: Pull complete Digest: sha256:8fd21c04afa00c95d392afea5deec89702c492f2974518a6abe681bcc912d2ad Status: Downloaded newer image for repo/cowsay-fortune:latest docker.io/repo/cowsay-fortune:latest