docker login コマンドを使ってレジストリに認証する方法

DockerDockerBeginner
今すぐ練習

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

はじめに

この実験では、docker login コマンドを使用して Docker レジストリに認証する方法を学びます。標準的なウェブベースのログインを使用して Docker Hub に認証する方法、ユーザー名とパスワードを使用してセルフホスト型レジストリに認証する方法、および非対話型シナリオで STDIN を介してパスワードを提供する方法を説明します。この実践的な経験を通じて、さまざまな Docker レジストリ環境でイメージに安全にアクセスし管理するための必須スキルを身につけることができます。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker(("Docker")) -.-> docker/SystemManagementGroup(["System Management"]) docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") docker/SystemManagementGroup -.-> docker/login("Log into Docker Registry") subgraph Lab Skills docker/pull -.-> lab-555166{{"docker login コマンドを使ってレジストリに認証する方法"}} docker/login -.-> lab-555166{{"docker login コマンドを使ってレジストリに認証する方法"}} end

ウェブベースのログインを使用して Docker Hub に認証する

このステップでは、ウェブベースのログイン方法を使用して Docker Hub に認証する方法を学びます。これは Docker Hub にログインする最も一般的な方法であり、対話型セッションに適しています。

Docker Hub は Docker が提供するクラウドベースのレジストリサービスで、Docker イメージを保存し共有することができます。プライベートイメージをプッシュまたはプルするには、Docker Hub で認証する必要があります。

docker login コマンドは、Docker レジストリで認証するために使用されます。デフォルトでは、Docker Hub で認証します。

LabEx 環境でターミナルを開きます。あなたは ~/project ディレクトリにいます。

Docker Hub にログインするには、次のコマンドを実行します。

docker login

このコマンドを実行すると、Docker Hub のユーザー名とパスワードの入力を求められます。

Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com/ to create one.
Username: your_docker_username
Password: your_docker_password

求められたら、Docker Hub のユーザー名とパスワードを入力します。認証が成功すると、次のようなメッセージが表示されます。

WARNING! Your password will be stored unencrypted in /home/labex/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credential-helpers

Login Succeeded

このメッセージは、Docker Hub に正常にログインしたことを示しています。このシナリオでは、パスワードが暗号化されていないという警告は想定されており、この実験では無視して構いません。

これでログインしたので、Docker Hub からプライベートイメージをプルしたり、自分のイメージを自分のリポジトリにプッシュしたりすることができます。

ログイン後に Docker コマンドが機能していることを確認するために、パブリックイメージをプルしてみましょう。テストに使用される小さなイメージである hello-world イメージをプルします。

docker pull hello-world

イメージがプルされて展開されていることを示す出力が表示されるはずです。

Using default tag: latest
latest: Pulling from library/hello-world
...
Status: Downloaded newer image for hello-world:latest
docker.io/library/hello-world:latest

これにより、認証後に Docker Hub とやり取りできることが確認されます。

ユーザー名とパスワードを使用してセルフホスト型レジストリに認証する

このステップでは、ユーザー名とパスワードを使用してセルフホスト型の Docker レジストリに認証する方法を学びます。Docker Hub がデフォルトのレジストリですが、組織内またはクラウドプロバイダー上にホストされているプライベートレジストリとやり取りする必要がある場合があります。

セルフホスト型レジストリは、Docker Hub のようなパブリックサービスを使用するのではなく、自分でセットアップし管理する Docker レジストリです。これは、セキュリティ、コンプライアンス、またはパフォーマンスの理由で行われることが多いです。

セルフホスト型レジストリに認証するには、同じ docker login コマンドを使用しますが、レジストリのアドレスを指定する必要があります。形式は docker login <registry_address> です。

この実験では、セルフホスト型レジストリをシミュレートします。プレースホルダーのアドレス myregistry.local を使用します。実際のシナリオでは、これはレジストリの実際のドメイン名または IP アドレスになります。

~/project ディレクトリでターミナルを開きます。

シミュレートしたセルフホスト型レジストリにログインするには、次のコマンドを実行し、your_registry_usernameyour_registry_password をそのレジストリに使用する仮の資格情報に置き換えます。

docker login myregistry.local

レジストリ myregistry.local のユーザー名とパスワードの入力を求められます。

Login with your Docker ID to push and pull images from myregistry.local. If you don't have a Docker ID, head over to https://hub.docker.com/ to create one.
Username: your_registry_username
Password: your_registry_password

仮のユーザー名とパスワードを入力します。この環境では myregistry.local は実際に動作しているレジストリではないため、ログインはおそらくエラーメッセージを伴って失敗し、レジストリに到達できないか認証に失敗したことが示されます。これはこのシミュレーションでは想定されています。重要なのは、コマンドの構文と異なるレジストリを指定するプロセスを理解することです。

Error response from daemon: Get "http://myregistry.local/v2/": dial tcp: lookup myregistry.local on 127.0.0.53:53: no such host

レジストリが存在しないためログインは失敗しましたが、セルフホスト型レジストリに認証を試みるためのコマンド構文 docker login <registry_address> は正しいです。

実際に動作しているセルフホスト型レジストリのシナリオでは、ログインが成功すると「Login Succeeded」メッセージが表示され、その特定のレジストリの資格情報が Docker 設定ファイル (~/.docker/config.json) に保存されます。

Docker 設定ファイルを調べて、レジストリ情報がどのように保存されているかを見てみましょう。

cat ~/.docker/config.json

JSON 構造が表示されます。前のステップで Docker Hub に正常にログインした後、https://index.docker.io/v1/ のエントリが表示されるはずです。myregistry.local に正常にログインした場合、そのレジストリアドレスの追加エントリが表示されます。

{
  "auths": {
    "https://index.docker.io/v1/": {
      "auth": "..."
    }
  },
  "HttpHeaders": {
    "User-Agent": "Docker-Client/..."
  },
  "credsStore": "desktop"
}

auths セクションには、ログインした異なるレジストリの認証情報が含まれています。auths の各キーはレジストリアドレスであり、値には認証の詳細が含まれています。

このステップでは、docker login を使用する際にセルフホスト型レジストリのアドレスを指定する方法を示しました。

非対話型ログインで標準入力 (STDIN) を使用してパスワードを提供する

このステップでは、標準入力 (STDIN) を使用して Docker レジストリのパスワードを提供する方法を学びます。この方法は、スクリプトや自動デプロイメントなど、パスワードを手動で入力できない非対話型のシナリオで特に有用です。

対話型のターミナルで docker login を使用すると、パスワードの入力を求められます。しかし、スクリプトでは、手動で介入することなくパスワードを渡す方法が必要です。--password-stdin フラグを使用すると、STDIN からパスワードを読み取ることができます。

重要なセキュリティ注意事項: コマンドラインで直接パスワードを渡すことは、コマンドとその引数がプロセスリスト (ps) やシェル履歴に表示される可能性があるため、一般的に安全ではありません。STDIN からパスワードを読み取ることは、パスワードがこれらの場所に露出するのを避けるため、スクリプトでより安全なアプローチです。

~/project ディレクトリでターミナルを開きます。

これを実証するために、STDIN を使用して Docker Hub にログインするシミュレーションを行います。Docker Hub のユーザー名とパスワードが必要です。

コマンドの構造は、パスワードを echo で出力し、それを docker login --username <your_docker_username> --password-stdin にパイプで渡すことです。

your_docker_username を実際の Docker Hub のユーザー名に、your_docker_password を実際の Docker Hub のパスワードに置き換えます。

echo "your_docker_password" | docker login --username your_docker_username --password-stdin

このコマンドを実行した後、次のような出力が表示され、ログインが成功したことが示されます。

WARNING! Your password will be stored unencrypted in /home/labex/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credential-helpers

Login Succeeded

再び、この実験環境では、パスワードが暗号化されていないという警告は想定されています。

この方法は、認証が必要な Docker 操作を自動化するために重要です。たとえば、CI/CD パイプラインでは、Docker Hub の資格情報を環境変数として保存し、この方法を使用してイメージをビルドしてプッシュする前にログインすることができます。

この方法を使用して、コマンドの最後にレジストリアドレスを追加することで、セルフホスト型レジストリにログインすることもできます。

echo "your_registry_password" | docker login myregistry.local --username your_registry_username --password-stdin

前のステップと同様に、このコマンドはこの実験ではおそらく失敗します。なぜなら、myregistry.local は動作しているレジストリではないからです。ただし、特定のレジストリに対して STDIN を介してパスワードを提供する構文は正しいです。

このステップでは、--password-stdin フラグを使用してパスワードを docker login コマンドにパイプで渡すことで、Docker レジストリに非対話型でログインする方法を示しました。

まとめ

この実験では、docker login コマンドを使用して Docker レジストリに認証する方法を学びました。まず、標準的な対話型のウェブベースのログイン方法を使用して、ユーザー名とパスワードを求められたときに入力することで、Docker Hub に認証する練習を行いました。これにより、デフォルトの Docker レジストリにログインする基本的なプロセスを実証しました。

次に、レジストリの URL とユーザー名、パスワードを指定することで、セルフホスト型レジストリに認証する方法を調べました。最後に、STDIN を使用してパスワードを提供する方法を学びました。これは、非対話型のシナリオやスクリプトでより安全な方法であり、コマンド履歴やログにパスワードが露出するのを防ぎます。これらのステップでは、イメージのプッシュとプルのために Docker レジストリへのアクセスをセキュアにするさまざまな方法をカバーしました。