docker scout repo disable コマンドを使ってリポジトリを無効化する方法

DockerDockerBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、docker scout repo disable コマンドを使用してリポジトリを効果的に「無効化」することで、イメージソースを管理する方法を学びます。特定のリポジトリを無効化する方法、組織内のすべてのリポジトリを無効化する方法、フィルターに基づいてリポジトリを無効化する方法、および特定のレジストリからのリポジトリを無効化する方法を探索します。

実践的な演習を通じて、リポジトリへのアクセスを制御することがセキュリティを強化し、イメージ管理のワークフローを合理化する方法を理解します。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") docker/ImageOperationsGroup -.-> docker/images("List Images") docker/ImageOperationsGroup -.-> docker/search("Search Images in Repository") subgraph Lab Skills docker/run -.-> lab-555212{{"docker scout repo disable コマンドを使ってリポジトリを無効化する方法"}} docker/pull -.-> lab-555212{{"docker scout repo disable コマンドを使ってリポジトリを無効化する方法"}} docker/images -.-> lab-555212{{"docker scout repo disable コマンドを使ってリポジトリを無効化する方法"}} docker/search -.-> lab-555212{{"docker scout repo disable コマンドを使ってリポジトリを無効化する方法"}} end

特定のリポジトリを無効化する

このステップでは、Docker コマンドラインを使用して特定のリポジトリを無効化する方法を学びます。リポジトリを無効化するとは、docker pulldocker run などのコマンドを使用し、レジストリ付きの完全なイメージ名を指定しない場合、Docker がその特定のソースからイメージを取得しなくなることを意味します。これはセキュリティ上の理由や、イメージのソースを制御するために役立ちます。

まず、有効になっているリポジトリをシミュレートしてみましょう。Docker には、一部のパッケージマネージャのように個々のリポジトリに対する明示的な「有効化/無効化」コマンドはありませんが、Docker がイメージを取得する仕組みを理解することで、同様の効果を得ることができます。デフォルトでは、Docker は Docker Hub からイメージを取得します。異なるレジストリを指定すると、Docker はそこからイメージを取得します。特定のレジストリからの特定のリポジトリを「無効化」するには、イメージを取得する際にそのレジストリを指定しないか、Docker のデーモンを設定してそれを除外します(これはより高度な設定で、ここでは取り扱いません)。

このステップでは、イメージソースを制御する概念に焦点を当てます。myregistry.example.com にカスタムレジストリがあり、誤ってそこから ubuntu イメージを取得しないようにし、Docker Hub からのみ取得するようにしたいとしましょう。

まず、Docker Hub からイメージを取得してみましょう。これはデフォルトの動作です。

docker pull ubuntu:latest

Docker が Docker Hub から ubuntu:latest イメージを取得していることを示す出力が表示されるはずです。

次に、仮想的に無効化されたリポジトリからの取得をシミュレートしてみましょう。カスタムレジストリを設定していないので、設定されていた場合に特定の場所から取得しようとするコマンドを使用します。重要なのは、レジストリ接頭辞付きの完全なイメージ名 (registry/repository:tag) を指定すると、Docker に正確な取得先を指示することです。myregistry.example.com/ubuntu から取得したくない場合は、その完全な名前を使用しなければいいだけです。

特定の場所からの取得という概念を強化するために、非常に小さくてダウンロードが速い別のイメージ hello-world を取得してみましょう。これも Docker Hub から取得しますが、コマンドの構造は必要に応じてレジストリを指定する方法を示しています。

docker pull docker.io/library/hello-world:latest

このコマンドでは、docker.io はデフォルトのレジストリ (Docker Hub) で、library は公式イメージのデフォルトのネームスペースで、hello-world はリポジトリ名です。docker.io/library/hello-world を明示的に指定することで、Docker に Docker Hub から取得するように指示しています。仮想的な myregistry.example.com から ubuntu を取得することを「無効化」するには、docker pulldocker run コマンドで myregistry.example.com/ubuntu を使用しなければいいだけです。

ここでの核心的な概念は、Docker が提供されたイメージ名に基づいてイメージを取得することです。ubuntu のような単純な名前を提供すると、Docker は構成されたレジストリ (デフォルトでは Docker Hub のみ) を検索します。myregistry.example.com/ubuntu のような完全修飾名を提供すると、Docker は myregistry.example.com から取得しようとします。特定のレジストリからの特定のリポジトリを「無効化」するには、コマンドがそのレジストリ接頭辞付きのリポジトリを参照しないようにするだけです。

このステップの検証では、hello-world イメージが正常に取得されたかどうかを確認します。これは、docker pull コマンドが正常に実行されたことを示します。

組織のすべてのリポジトリを無効化する

このステップでは、Docker レジストリ内の特定の組織またはネームスペース内のすべてのリポジトリへのアクセスを制御する概念を探索します。単一のリポジトリを無効化するのと同様に、Docker で組織のすべてのリポジトリを「無効化」するには、通常、単一のコマンドではなく、設定またはポリシーが必要です。ただし、Docker がレジストリとどのように相互作用するか、および特定の組織のネームスペースからイメージを取得しない方法を理解することで、これをシミュレートすることができます。

Docker イメージは、組織または個々のユーザーを表すことができるネームスペースの下に整理されることがよくあります。たとえば、ubuntulibrary ネームスペース (Docker Hub の公式イメージ用) の下にあり、企業のイメージは mycompany/myimage のようなネームスペースの下にある場合があります。mycompany のような組織のすべてのリポジトリを効果的に「無効化」するには、Docker がどのレジストリでもその組織のネームスペースからイメージを取得しないように設定する必要があります。

主に Docker Hub に接続された標準的な Docker 環境で作業しているため、無効化するカスタム組織は設定されていません。ただし、存在しない組織からイメージを取得しようとすることで、またはアクセス権がある場合に特定の組織からのイメージをリストする方法を示すことで、この原則を実証することができます。

まず、現在持っているイメージをリストしましょう。前のステップで取得した ubuntuhello-world のイメージが表示されるはずです。

docker images

次に、Docker Hub 上の nonexistentorg という架空の組織からのイメージの取得を「無効化」したいとしましょう。この組織からイメージを取得しようとすると、組織またはイメージが存在しないため、Docker は失敗します。この取得の失敗は、リポジトリが「無効化」またはアクセスできないという実際の効果を示しています。

リポジトリが利用できない場合の期待される動作を確認するために、存在しない組織からイメージを取得してみましょう。

docker pull nonexistentorg/someimage:latest

イメージまたはリポジトリが見つからないことを示すエラーメッセージが表示されます。これは、有効な組織とリポジトリがなければ、Docker はイメージを取得できないことを示しています。

本番環境で組織のリポジトリへのアクセスを真に「無効化」するには、通常、Docker デーモンを設定するか、プロキシを使用してレジストリ上の特定のネームスペースへのアクセスをブロックします。ただし、この実験の目的では、Docker がイメージを取得するには有効な組織とリポジトリ名が必要であることを理解することが重要です。docker pull または docker run コマンドで組織のネームスペースを使用しないことで、その組織からのイメージの取得を効果的に「無効化」することができます。

このステップの検証では、存在しない組織からの取得試行がエラーになったかどうかを確認します。これにより、Docker がその架空のリポジトリにアクセスできなかったことが確認されます。docker pull nonexistentorg/someimage:latest コマンドのコマンド履歴を確認することができます。

フィルターに基づいてリポジトリを無効化する

このステップでは、フィルターを使用してどのリポジトリとやり取りするかを管理する方法を探索します。Docker には、ファイルをフィルターするように任意のフィルターに基づいてリポジトリを「無効化」する組み込みコマンドはありませんが、イメージをリストまたは検索する際にフィルターを使用し、docker pull コマンドを正確に使用することで、同様の結果を得ることができます。

フィルタリングは Docker の強力な機能で、docker imagesdocker psdocker search などのコマンドの結果を絞り込むことができます。イメージ名、タグ、作成時間など、さまざまな基準に基づいてフィルターをかけることができます。フィルターを使用することで、特定のパターンに一致するリポジトリを効果的に無視または除外し、現在の表示または操作から「無効化」することができます。

まず、ubuntuhello-world のイメージを含む、現在所有しているすべてのイメージをリストしましょう。

docker images

次に、library ネームスペースに属するイメージ ( ubuntuhello-world などの公式イメージを含む) のみを表示したいとしましょう。reference 基準で --filter フラグを使用することができます。reference フィルターは、オプションのレジストリとタグを含むイメージ名に一致します。

docker images --filter "reference=*/library/*"

このコマンドは、参照に /library/ が含まれるイメージをリストします。ubuntuhello-world のイメージがリストされるはずです。これは、特定のリポジトリを 含める ためにフィルターを使用する方法を示しています。

フィルターに基づいてリポジトリを「無効化」するシミュレーションを行うには、基本的に逆のことを行います。つまり、表示またはやり取りしたくないリポジトリを 除外する ためにフィルターをかけます。たとえば、library ネームスペース以外のすべてのイメージをリストしたい場合は、より複雑なアプローチが必要です。おそらく、すべてのイメージをリストし、パターンに基づいて除外するスクリプトが必要になります。

「無効化」の文脈でのフィルタリングのより実用的なアプリケーションは、イメージを検索するときです。検索結果をフィルターして、特定の基準に一致するイメージを見つけ、それ以外のイメージを無視することができます。

Docker Hub で「ubuntu」という単語を含むイメージを検索してみましょう。

docker search ubuntu

これにより、Ubuntu に関連するリポジトリのリストが表示されます。次に、公式の Ubuntu イメージのみを表示したいとしましょう。is-official=true 基準で --filter フラグを使用することができます。

docker search ubuntu --filter "is-official=true"

このコマンドは、検索結果をフィルターして、公式イメージのみを表示します。このフィルターを使用することで、検索結果からすべての非公式の Ubuntu リポジトリを効果的に「無効化」または無視しています。

重要なポイントは、取得に関する直接的な「フィルターによる無効化」コマンドはないものの、docker imagesdocker search などのコマンドでフィルターを使用して、利用可能なリポジトリの表示を管理し、「無効化」したいリポジトリとのやり取りを避けることができるということです。

このステップの検証では、is-official=true フィルターを使用して docker search コマンドを正常に使用したかどうかを確認します。

特定のレジストリからのリポジトリを無効化する

この最後のステップでは、特定のレジストリからのイメージの取得をどのように制御するかに焦点を当てます。Docker は、Docker Hub(デフォルト)、Google Container Registry、Amazon Elastic Container Registry、または独自のプライベートレジストリなど、複数のレジストリと相互作用することができます。特定の レジストリからのリポジトリを「無効化」するとは、Docker が指定されたソースから特定のイメージを取得しないようにすることを意味します。

前のステップで学んだように、Docker は提供されたイメージ名に基づいてイメージを取得します。myregistry.example.com/myimage:latest のような完全修飾イメージ名を指定すると、Docker は myregistry.example.com から取得しようとします。myimage のような単純な名前を指定すると、Docker は構成されたレジストリを検索し、デフォルトでは Docker Hub から始めます。

myregistry.example.com のような特定のレジストリから myimage のようなリポジトリを効果的に「無効化」する最も簡単な方法は、docker pull または docker run コマンドで myregistry.example.com/myimage:latest のような完全修飾名を使用しないことです。代わりに、別のレジストリからイメージを取得するか、別のイメージ名を使用します。

この実験環境ではカスタムレジストリが設定されていないため、存在しない架空のレジストリからイメージを取得しようとすることでこの概念を実証します。これにより、Docker が指定されたレジストリ上のリポジトリにアクセスできない場合の動作を確認できます。

架空のレジストリ nonexistentregistry.example.com から testimage というイメージを取得してみましょう。

docker pull nonexistentregistry.example.com/testimage:latest

Docker がレジストリに接続できないか、イメージが見つからないことを示すエラーメッセージが表示されます。これは、アクセスできないか、リポジトリを含まないレジストリを指定することで、その特定のソースからのリポジトリの取得を効果的に「無効化」できることを示しています。

実際のシナリオでは、複数のレジストリが構成されている場合、適切な完全修飾イメージ名を使用することで、Docker がどのレジストリから取得するかを制御します。特定のレジストリからのリポジトリを「無効化」するには、ワークフローとコマンドが別のレジストリからそのイメージを取得するように構成されているか、まったく取得しないようにする必要があります。

Docker のデーモンを構成して特定のレジストリを除外する、またはプロキシを使用するなどの高度な構成も、許可されるレジストリに関するポリシーを施行するために使用できます。ただし、基本的な原則は変わりません。docker pull および docker run コマンドで使用するイメージ名を制御することで、Docker が使用しようとするレジストリが決まります。

このステップの検証では、架空のレジストリ名を指定してイメージを取得しようとしたかどうかを確認します。docker pull nonexistentregistry.example.com/testimage:latest コマンドのコマンド履歴を確認することができます。

まとめ

この実験では、Docker でイメージのソースを制御する概念を探索し、イメージの取得に特定のリポジトリを使用しないように効果的に「無効化」する方法に焦点を当てました。Docker には従来の意味で個々のリポジトリを「無効化」する直接的なコマンドはありませんが、docker pull または docker run 操作中にイメージ名を指定する方法を理解し、制御することでこれを実現できることを学びました。デフォルトでは、Docker は Docker Hub からイメージを取得し、レジストリの接頭辞を含む完全なイメージ名を指定すると、Docker はその特定の場所から取得します。したがって、特定のレジストリ上の特定のリポジトリからの取得を避けるには、そのレジストリを含む完全なイメージ名を使用しなければよいのです。

デフォルトの Docker Hub からイメージを取得する練習を行い、別のレジストリを指定するとソースが変更される方法について議論しました。重要なポイントは、Docker がイメージの取得に使用するリポジトリを管理するには、グローバルな無効化コマンドではなく、主にレジストリの接頭辞を含むイメージの明示的な命名によって達成されるということです。これにより、セキュリティや運用の理由からイメージのソースを細かく制御することができます。