Docker CLIを使用したイメージのプッシュ
Docker CLIを使用してイメージをコンテナ・レジストリにプッシュする方法をご紹介します。
イメージをDocker CLIを使用して、Oracle Cloud Infrastructure Registry (コンテナ・レジストリとも呼ばれる)にプッシュします。
イメージをプッシュするには、最初に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
コマンドを使用すると、イメージの名前が正しい宛先にプッシュされます。
権限によって、コンテナ・レジストリにプッシュできるイメージが制御されます(リポジトリ・アクセスを制御するポリシーを参照)。作成したリポジトリにイメージをプッシュできます(リポジトリの作成を参照)。また、自分が属するグループが適切なアイデンティティ・ポリシーによってアクセス権を付与されているリポジトリに、イメージをプッシュすることもできます。管理者グループに属する場合、テナンシの任意のリポジトリにイメージをプッシュできます。
このトピックの手順では、イメージをプッシュするリポジトリがすでに存在することを前提としています。通常はそうですが、必ずしもそうである必要はありません(リポジトリの作成を参照)。
Container Registryは、Open Container Initiative準拠のレジストリです。その結果、Dockerイメージ、マニフェスト・リスト(マルチアーキテクチャ・イメージとも呼ばれる)、Helmチャートなど、Open Container Initiative仕様に準拠したアーティファクトを格納できます。このトピックの手順では、Dockerイメージを格納し、Docker CLIを使用することを前提としています。
Docker CLIを使用してイメージをコンテナ・レジストリにプッシュするには:
-
認証トークンがすでにある場合は、次のステップに進みます。それ以外の場合:
-
コンソールの右上隅で「プロファイル」メニューを開き、「ユーザー設定」(または「マイ・プロファイル」またはアカウント名)を選択して詳細を表示します。
-
「認証トークン」ページで、「トークンの生成」を選択します。
-
認証トークンのわかりやすい説明を入力します。機密情報の入力は避けてください。
-
「トークンの生成」を選択します。新しい認証トークンが表示されます。
-
認証トークンを保護された場所にただちにコピーして、後で取得できるようにします。これは、コンソールに認証トークンが再度表示されないようにするためです。
-
「トークンの生成」ダイアログを閉じます。
-
-
Dockerを実行しているクライアント・マシンのターミナル・ウィンドウで、
docker login <registry-domain>
を入力してコンテナ・レジストリにログインします。<registry-domain>
には、使用しているコンテナ・レジストリ・リージョンのリージョン・キーまたはリージョン識別子が含まれます。たとえば、docker login ocir.us-ashburn-1.oci.oraclecloud.com
です。リージョン別の可用性を参照してください。 -
ユーザー名を求められたら、
<tenancy-namespace>/<username>
のフォーマットでユーザー名を入力します。ここで、<tenancy-namespace>
はテナンシの自動生成されたオブジェクト・ストレージ・ネームスペース文字列です(テナンシ情報ページに表示されています)。たとえば、ansh81vru1zp/jdoe@acme.com
です。テナンシがOracle Identity Cloud Serviceとフェデレートされている場合は、<tenancy-namespace>/oracleidentitycloudservice/<username>
の書式を使用します。 -
パスワードの入力を求められたら、前にコピーした認証トークンを入力します。
-
次のように、プッシュするクライアント・マシン上のイメージを検索します。
-
クライアント・マシンのターミナル・ウィンドウで、
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
-
コンテナ・レジストリにプッシュするクライアント・マシン上のローカル・イメージを検索します。
docker images
コマンドの出力で、プッシュする特定のイメージを探します。次のいずれかの方法で、後でこのイメージを一意に識別する必要があります。-
idの使用
-
イメージ名を使用します(リポジトリ名とイメージ・タグはコロンで区切ります)。
たとえば、クライアント・マシン上にacme-web-appイメージがあるとします。
docker images
コマンドの出力で、プッシュする特定のacme-web-appイメージを探します。その特定のイメージを次のいずれかの方法で一意に識別できます。-
idの使用(例:
8e0506e14874
) -
イメージ名(
acme-web-app:latest
など、コロンで区切られたリポジトリ名およびイメージ・タグ)を使用します。
-
-
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
-
-
-
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
-
次のように入力して、クライアント・マシンからコンテナ・レジストリに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
-