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テナンシのアッシュバーン・リージョン)にproject01/acme-web-appとします。docker tagコマンドを使用する場合は、宛先への完全修飾パスを使用して新しいイメージを<region-key>.ocir.io/<tenancy-namespace>/<repo-name>:<version>のフォーマットで指定します。したがって、この場合は、新規イメージにiad.ocir.io/ansh81vru1zp/project01/acme-web-app:v2.0.testを指定します。その後、docker pushコマンドを使用すると、イメージの名前が正しい宛先にプッシュされます。

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

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

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

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

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

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

  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)
      • イメージ名(リポジトリ名とイメージ・タグをコロンで区切る。例: acme-web-app:latest)
    3. docker tagコマンドを使用して、元のイメージのコピーを新規イメージとして作成します(新規イメージは実際には既存の元のイメージへの参照です)。新しいイメージの名前(またはタグ)として、次のように入力して、イメージをプッシュするコンテナ・レジストリ内のターゲットの場所の完全修飾パスを指定します。

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

      ここでは:

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

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

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

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

    例:

    
    $ docker images
    REPOSITORY                                      TAG                   IMAGE ID      CREATED       SIZE
    iad.ocir.io/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><region-key>.ocir.io/<tenancy-namespace>/<repo-name>:<version>の形式です。ここでは:

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

    例:

    docker push iad.ocir.io/ansh81vru1zp/project01/acme-web-app:v2.0.test