レジストリとは?
説明
ここまでにコンテナーイメージが何であって、どのように動作するのかを理解しました。 そこで疑問に思うかもしれません。 そのイメージはどこに保存されているのだろうと。
コンテナーイメージは手元のコンピューターシステムに保存できます。 しかし友人とそれを共有したいと考えたり、別のマシンでも利用したいと思った場合にはどうしますか? そういったときにレジストリの出番となります。
イメージレジストリは、コンテナーイメージを保存し共有するための場所です。 それをパブリックにもプライベートにもできます。 Docker Hub がまさにパブリックなレジストリであり、誰でも利用できるデフォルトのレジストリです。
Docker Hub がもっとも人気のあるレジストリですが、利用可能なコンテナーレジストリは他にもいろいろとあります。 Amazon Elastic Container Registry(ECR)、 Azure Container Registry (ACR)、 Google Container Registry (GCR) といったものです。 またローカルマシンや組織内部にプライベートなレジストリを立ち上げることもできます。 たとえば Harbor、JFrog Artifactory、GitLab Container registry などがあります。
レジストリ 対 リポジトリ
レジストリを使った作業をしていると、レジストリ と リポジトリ という用語がどちらも同じものと思ってくるかもしれません。 確かに両者には関係がありますが、まるで違うものです。
レジストリ (registry) はコンテナーイメージを保存して管理するための中心的な場所のことです。 一方 リポジトリ (repository) はレジストリ内における関連コンテナーイメージの集合体のことです。 プロジェクトにおいて管理するイメージ収容フォルダーとして考えてみてください。 各リポジトリには 1 つあるいは複数のイメージが含まれます。
以下の図は、レジストリ、リポジトリ、イメージの関係を示すものです。
メモ
Docker Hub の無償版を利用すると、プライベートリポジトリ 1 つと無制限のパブリックリポジトリを生成することができます。 詳しくは Docker Hub サブスクリプションページ を参照してください。
ためしてみよう
このチュートリアルでは、ビルドした Docker イメージを Docker Hub レポジトリに対してプッシュする方法について学んでいきます。
無償 Docker アカウントのサインアップ
まだ Docker アカウントを生成していない場合は、 Docker Hub ページにアクセスして、新規の Docker アカウントをサインアップします。
認証にあたっては Google アカウントや GitHub アカウントを利用することもできます。
はじめてのリポジトリ生成
Docker Hub にサインインします。
右上の Create repository (リポジトリ生成) ボタンを選択します。
名前空間 (たいていは自身のユーザー名) を選択し、リポジトリ名として
docker-quickstart
を入力します。visibility (可視性) を Public (パブリック) に設定します。
Create (生成) ボタンをクリックしてリポジトリを生成します。
やりました。 はじめてのリポジトリ生成が成功しました 🎉
今の時点でこのリポジトリは空です。 ここにイメージをプッシュして作り上げていきます。
Docker Desktop を使ったサインイン
- Docker Desktop をまだインストールしていない場合は ダウンロードおよびインストール します。
- Docker Desktop の GUI 画面の右上にある Sign in (サインイン) ボタンをクリックします。
Node.js サンプルコードのクローン
イメージを生成するためには、プロジェクトの生成が必要です。 すぐにはじめようとするなら、 github.com/dockersamples/helloworld-demo-node にある Node.js のサンプルプロジェクトを利用する方法があります。 このリポジトリには Docker イメージの生成に必要となる Dockerfile がすでに用意されています。
その Dockerfile の中身については気にかける必要はありません。 その内容は後の節において学んでいきます。
以下のコマンドを使って GitHub リポジトリをクローンします。
git clone https://github.com/dockersamples/helloworld-demo-node
新規に生成されたディレクトリに移動します。
cd helloworld-demo-node
以下のコマンドを実行して Docker イメージをビルドします。
YOUR_DOCKER_USERNAME
の部分は自身のユーザー名に置き換えてください。docker build -t <YOUR_DOCKER_USERNAME>/docker-quickstart .
メモ
docker build
コマンドの最後にドット (.) があることを忘れないでください。 これは Docker に対して Dockerfile を探し出す場所を指定するものです。以下のコマンドを実行して、新たに生成された Docker イメージを一覧表示します。
docker images
以下のような出力が得られるはずです。
REPOSITORY TAG IMAGE ID CREATED SIZE <YOUR_DOCKER_USERNAME>/docker-quickstart latest 476de364f70e 2 minutes ago 170MB
イメージの内容を確認するため、以下のコマンドを実行してコンテナーを起動します。 (ユーザー名部分は自身のものに置き換えます。)
docker run -d -p 8080:8080 <YOUR_DOCKER_USERNAME>/docker-quickstart
コンテナーが動作しているかどうかを確認するには、ブラウザーを開いて http://localhost:8080 にアクセスします。
docker tag
コマンドを使って Docker イメージにタグづけを行います。 Docker タグは、イメージに対してラベルやバージョンをつけるものです。docker tag <YOUR_DOCKER_USERNAME>/docker-quickstart <YOUR_DOCKER_USERNAME>/docker-quickstart:1.0
以上により Docker Hub リポジトリに対して、新規ビルドしたイメージをプッシュする準備が整ったので、
docker push
コマンドを実行します。docker push <YOUR_DOCKER_USERNAME>/docker-quickstart:1.0
Docker Hub にアクセスして、自身のリポジトリ画面を開きます。 Tags (タグ) セクションへ進み、新たにプッシュされたイメージを確認します。
このウォークスルーを通じて Docker アカウントにサインアップし、Docker Hub に新規にリポジトリを生成しました。 そしてコンテナーイメージのビルド、タグづけを行って Docker Hub リポジトリにプッシュしました。
さらなる情報
次のステップ
コンテナーとイメージについての基本は理解できました。 次に学ぶのは Docker Compose です。