レジストリとは?

説明

ここまでにコンテナーイメージが何であって、どのように動作するのかを理解しました。 そこで疑問に思うかもしれません。 そのイメージはどこに保存されているのだろうと。

コンテナーイメージは手元のコンピューターシステムに保存できます。 しかし友人とそれを共有したいと考えたり、別のマシンでも利用したいと思った場合にはどうしますか? そういったときにレジストリの出番となります。

イメージレジストリは、コンテナーイメージを保存し共有するための場所です。 それをパブリックにもプライベートにもできます。 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 つあるいは複数のイメージが含まれます。

以下の図は、レジストリ、リポジトリ、イメージの関係を示すものです。

IIIIImmmmmaaaaagggggeeeeeR::R:::eeRpppppppeorrorrrgsoosoooiijjijjjsteeteeetoccocccrrttrtttyy--y---aabbbA::B:::vvvvv12112.....00010

メモ

Docker Hub の無償版を利用すると、プライベートリポジトリ 1 つと無制限のパブリックリポジトリを生成することができます。 詳しくは Docker Hub サブスクリプションページ を参照してください。

ためしてみよう

このチュートリアルでは、ビルドした Docker イメージを Docker Hub レポジトリに対してプッシュする方法について学んでいきます。

無償 Docker アカウントのサインアップ

  1. まだ Docker アカウントを生成していない場合は、 Docker Hub ページにアクセスして、新規の Docker アカウントをサインアップします。

    公式 Docker Hub でのサインアップページのスクリーンショット

    認証にあたっては Google アカウントや GitHub アカウントを利用することもできます。

はじめてのリポジトリ生成

  1. Docker Hub にサインインします。

  2. 右上の Create repository (リポジトリ生成) ボタンを選択します。

  3. 名前空間 (たいていは自身のユーザー名) を選択し、リポジトリ名として docker-quickstart を入力します。

    公式 Docker Hub での新規パブリックリポジトリの生成方法を示すスクリーンショット
  4. visibility (可視性) を Public (パブリック) に設定します。

  5. Create (生成) ボタンをクリックしてリポジトリを生成します。

やりました。 はじめてのリポジトリ生成が成功しました 🎉

今の時点でこのリポジトリは空です。 ここにイメージをプッシュして作り上げていきます。

Docker Desktop を使ったサインイン

  1. Docker Desktop をまだインストールしていない場合は ダウンロードおよびインストール します。
  2. Docker Desktop の GUI 画面の右上にある Sign in (サインイン) ボタンをクリックします。

Node.js サンプルコードのクローン

イメージを生成するためには、プロジェクトの生成が必要です。 すぐにはじめようとするなら、 github.com/dockersamples/helloworld-demo-node にある Node.js のサンプルプロジェクトを利用する方法があります。 このリポジトリには Docker イメージの生成に必要となる Dockerfile がすでに用意されています。

その Dockerfile の中身については気にかける必要はありません。 その内容は後の節において学んでいきます。

  1. 以下のコマンドを使って GitHub リポジトリをクローンします。

    git clone https://github.com/dockersamples/helloworld-demo-node
    
  2. 新規に生成されたディレクトリに移動します。

    cd helloworld-demo-node
    
  3. 以下のコマンドを実行して Docker イメージをビルドします。 YOUR_DOCKER_USERNAME の部分は自身のユーザー名に置き換えてください。

    docker build -t <YOUR_DOCKER_USERNAME>/docker-quickstart .
    

    メモ

    docker build コマンドの最後にドット (.) があることを忘れないでください。 これは Docker に対して Dockerfile を探し出す場所を指定するものです。

  4. 以下のコマンドを実行して、新たに生成された Docker イメージを一覧表示します。

    docker images
    

    以下のような出力が得られるはずです。

    REPOSITORY                                 TAG       IMAGE ID       CREATED         SIZE
    <YOUR_DOCKER_USERNAME>/docker-quickstart   latest    476de364f70e   2 minutes ago   170MB
    
  5. イメージの内容を確認するため、以下のコマンドを実行してコンテナーを起動します。 (ユーザー名部分は自身のものに置き換えます。)

    docker run -d -p 8080:8080 <YOUR_DOCKER_USERNAME>/docker-quickstart
    

    コンテナーが動作しているかどうかを確認するには、ブラウザーを開いて http://localhost:8080 にアクセスします。

  6. docker tag コマンドを使って Docker イメージにタグづけを行います。 Docker タグは、イメージに対してラベルやバージョンをつけるものです。

    docker tag <YOUR_DOCKER_USERNAME>/docker-quickstart <YOUR_DOCKER_USERNAME>/docker-quickstart:1.0
    
  7. 以上により Docker Hub リポジトリに対して、新規ビルドしたイメージをプッシュする準備が整ったので、 docker push コマンドを実行します。

    docker push <YOUR_DOCKER_USERNAME>/docker-quickstart:1.0
    
  8. Docker Hub にアクセスして、自身のリポジトリ画面を開きます。 Tags (タグ) セクションへ進み、新たにプッシュされたイメージを確認します。

    公式 Docker Hub にて新規追加したイメージタグが表示されたスクリーンショット

このウォークスルーを通じて Docker アカウントにサインアップし、Docker Hub に新規にリポジトリを生成しました。 そしてコンテナーイメージのビルド、タグづけを行って Docker Hub リポジトリにプッシュしました。

さらなる情報

次のステップ

コンテナーとイメージについての基本は理解できました。 次に学ぶのは Docker Compose です。