Docker CLIを使用したイメージのプッシュ

Docker CLIを使用してイメージをコンテナ・レジストリにプッシュする方法をご紹介します。

イメージをOracle Cloud Infrastructure Registry (コンテナ・レジストリとも呼ばれる)にプッシュするには、Docker CLIを使用します。

イメージをプッシュするには、最初にdocker tagコマンドを使用して、ローカル・ソース・イメージのコピーを新規イメージとして作成します(新規イメージは実際には既存のソース・イメージへの参照です)。新しいイメージの名前として、リポジトリの名前など、イメージをプッシュするコンテナ・レジストリ内のターゲットの場所の完全修飾パスを指定します。

たとえば、acme-web-app:latestというローカル・イメージ(acme-web-appのリポジトリ名、latestのイメージ・タグで構成されるイメージ名)があるとします。このイメージをコンテナ・レジストリにプッシュし、バージョン識別子がv2.0.testのリポジトリ(acme-devテナンシのAshburnリージョン)にproject01/acme-web-appという名前のリポジトリに格納するとします。docker tagコマンドを使用する場合は、宛先への完全修飾パスを使用して新しいイメージの名前を<registry-domain>/<tenancy-namespace>/<repo-name>:<version>のフォーマットで指定します。したがって、この場合は、新規イメージにocir.us-ashburn-1.oci.oraclecloud.com/ansh81vru1zp/project01/acme-web-app:v2.0.testという名前を付けます。その後、docker pushコマンドを使用すると、イメージの名前が正しい宛先にプッシュされます。

権限によって、コンテナ・レジストリにプッシュできるイメージが制御されます(リポジトリ・アクセスを制御するポリシーを参照)。作成したリポジトリにイメージをプッシュできます(リポジトリの作成を参照)。また、自分が属するグループが適切なアイデンティティ・ポリシーによってアクセス権を付与されているリポジトリに、イメージをプッシュすることもできます。管理者グループに属する場合、テナンシの任意のリポジトリにイメージをプッシュできます。

このトピックの手順では、イメージをプッシュするリポジトリがすでに存在することを前提としています。通常はそうですが、必ずしもそうである必要はありません(リポジトリの作成を参照)。
ノート

コンテナ・レジストリは、Open Container Initiative準拠のレジストリです。その結果、Dockerイメージ、マニフェスト・リスト(マルチアーキテクチャ・イメージとも呼ばれる)、Helmチャートなど、Open Container Initiative仕様に準拠したアーティファクトを格納できます。このトピックの手順では、Dockerイメージを格納し、Docker CLIを使用することを前提としています。

Docker CLIを使用してイメージをコンテナ・レジストリにプッシュするには:

  1. 認証トークンがすでにある場合は、次のステップに進みます。それ以外の場合:

    1. コンソールの右上隅で「プロファイル」メニューを開き、「ユーザー設定」をクリックして詳細を表示します。
    2. 「認証トークン」ページで、「トークンの生成」をクリックします。
    3. 認証トークンのわかりやすい説明を入力します。機密情報の入力は避けてください。
    4. 「トークンの生成」をクリックします。新しい認証トークンが表示されます。
    5. 認証トークンは、後で取得できる保護された場所にただちにコピーしてください。コンソールに認証トークンが再度表示されないためです。
    6. 「トークンの生成」ダイアログを閉じます。
  2. Dockerを実行しているクライアント・マシンのターミナル・ウィンドウで、docker login <registry-domain>を入力してコンテナ・レジストリにログインします。<registry-domain>には、使用しているコンテナ・レジストリ・リージョンのリージョン・キーまたはリージョン識別子が含まれます。たとえば、docker login ocir.us-ashburn-1.oci.oraclecloud.comです。リージョン別の可用性を参照してください。

  3. ユーザー名を求められたら、<tenancy-namespace>/<username>の形式でユーザー名を入力します。ここで、<tenancy-namespace>はテナンシの自動生成されたオブジェクト・ストレージ・ネームスペース文字列です(テナンシ情報ページに表示されています)。たとえば、ansh81vru1zp/jdoe@acme.comです。テナンシがOracle Identity Cloud Serviceとフェデレートされている場合は、<tenancy-namespace>/oracleidentitycloudservice/<username>の書式を使用します。
  4. パスワードの入力を求められたら、前にコピーした認証トークンを入力します。
  5. 次のように、プッシュするクライアント・マシン上のイメージを探します。

    1. クライアント・マシンのターミナル・ウィンドウで、docker imagesと入力して、使用可能なイメージをリストします。

      例:

          
      $ docker images
      REPOSITORY        TAG              IMAGE ID      CREATED       SIZE
      acme-web-app      latest           8e0506e14874  2 hours ago   162.6 MB
      acme-web-app      v1.0             7d9495d03763  2 hours ago   162.6 MB
      <none>            <none>           6ebd328f833d  5 hours ago   162.6 MB
      hello-world       latest           80b84820d442  5 weeks ago   890 B
      					
    2. コンテナ・レジストリにプッシュするクライアント・マシン上のローカル・イメージを検索します。

      docker imagesコマンドの出力で、プッシュする特定のイメージを探します。次のいずれかの方法で、後でこのイメージを一意に識別する必要があります。

      • idの使用
      • イメージ名の使用(リポジトリ名とイメージ・タグをコロンで区切る)

      たとえば、クライアント・マシン上にacme-web-appイメージがあるとします。docker imagesコマンドの出力で、プッシュする特定のacme-web-appイメージを探します。その特定のイメージを次のいずれかの方法で一意に識別できます。

      • idの使用(例: 8e0506e14874)
      • using its image name (its repository name and image tag separated by a colon, for example acme-web-app:latest)
    3. docker tagコマンドを使用して、元のイメージのコピーを新規イメージとして作成します(新規イメージは実際には既存の元のイメージへの参照です)。新しいイメージの名前(またはタグ)として、次のように入力して、イメージをプッシュするコンテナ・レジストリ内のターゲットの場所の完全修飾パスを指定します:

      docker tag <image-identifier> <target-tag>

      ここでは:

      • <image-identifier>は、イメージのid(例: 8e0506e14874)またはイメージの名前(元のリポジトリ名およびイメージ・タグをコロンで区切ってacme-web-app:latestなど)を使用して、元のイメージを一意に識別します。
      • <target-tag>は、イメージをプッシュするコンテナ・レジストリ内のターゲットの場所への完全修飾パスで、<registry-domain>/<tenancy-namespace>/<repo-name>:<version>の形式です。ここでは:

        • <registry-domain>には、使用しているコンテナ・レジストリ・リージョンのリージョン・キーまたはリージョン識別子が含まれます。たとえば、ocir.us-ashburn-1.oci.oraclecloud.comです。レジストリ・ドメインを参照してください。
        • <tenancy-namespace>は、イメージをプッシュするリポジトリを所有しているテナンシの自動生成されたオブジェクト・ストレージ・ネームスペース文字列です(テナンシ情報ページに表示されています)。たとえば、acme-devテナンシのネームスペースはansh81vru1zpです。一部の古いテナンシでは、ネームスペース文字列は、すべて小文字のテナンシ名(acme-devなど)と同じ場合があることに注意してください。ユーザーがテナンシにアクセスできる必要があることにも注意してください。
        • <repo-name>は、イメージをプッシュするターゲット・リポジトリの名前(project01/acme-web-appなど)です。通常、すでに存在するリポジトリを指定しますが、必ずしもそうである必要はありません(リポジトリの作成を参照)。
        • <version>は、コンテナ・レジストリでイメージを指定するバージョン識別子です(たとえば、v2.0.test)。

      たとえば、前述の例を組み合せると、次のように入力できます:

      docker tag 8e0506e14874 ocir.us-ashburn-1.oci.oraclecloud.com/ansh81vru1zp/project01/acme-web-app:v2.0.test
  6. docker imagesを入力し、イメージのリストに指定したタグのあるイメージが含まれていることを確認することにより、Dockerイメージがクライアント・マシン上で正しくタグ付けされていることを確認します。

    例:

    
    $ docker images
    REPOSITORY                                                                TAG                   IMAGE ID      CREATED       SIZE
    ocir.us-ashburn-1.oci.oraclecloud.com/ansh81vru1zp/project01/acme-web-app v2.0.test             8e0506e14874  1 minute ago  162.6 MB
    acme-web-app                                                              latest                8e0506e14874  2 hours ago   162.6 MB
    acme-web-app                                                              v1.0                  7d9495d03763  2 hours ago   162.6 MB
    <none>                                                                    <none>                6ebd328f833d  5 hours ago   162.6 MB
    hello-world                                                               latest                80b84820d442  5 weeks ago   890 B
    					
  7. 次のように入力して、クライアント・マシンからコンテナ・レジストリにDockerイメージをプッシュします。

    docker push <target-tag>

    ここで、<target-tag><registry-domain>/<tenancy-namespace>/<repo-name>:<version>の形式です。ここでは:

    • <registry-domain>には、使用しているコンテナ・レジストリ・リージョンのリージョン・キーまたはリージョン識別子が含まれます。たとえば、ocir.us-ashburn-1.oci.oraclecloud.comです。レジストリ・ドメインを参照してください。
    • <tenancy-namespace>は、イメージをプッシュするリポジトリを所有しているテナンシの自動生成されたオブジェクト・ストレージ・ネームスペース文字列です(テナンシ情報ページに表示されています)。たとえば、acme-devテナンシのネームスペースはansh81vru1zpです。一部の古いテナンシでは、ネームスペース文字列は、すべて小文字のテナンシ名(acme-devなど)と同じ場合があることに注意してください。ユーザーがテナンシにアクセスできる必要があることにも注意してください。
    • <repo-name>は、イメージをプッシュするターゲット・リポジトリの名前(project01/acme-web-appなど)です。通常、すでに存在するリポジトリを指定しますが、必ずしもそうである必要はありません(リポジトリの作成を参照)。
    • <version>は、コンテナ・レジストリでイメージに付けるバージョン識別子です(たとえば、v2.0.test)。

    例:

    docker push ocir.us-ashburn-1.oci.oraclecloud.com/ansh81vru1zp/project01/acme-web-app:v2.0.test