Docker イメージのダウンロード: ディレクトリ、パス、ファイルへ、ローカルへ、制限、エラー、ポリシー、秘密
この投稿では、Dockerイメージのダウンロードに関するよくある質問を6つ取り上げます。 docker imageのローカルダウンロードコマンドから始まり、ローカルのダウンロードパスの場所、ファイルのダウンロード方法、ダウンロードの制限、エラーの解決、そしてKubernetesについて少し説明します。
1. docker imageのローカルダウンロードコマンド
Dockerイメージは直接ビルドすることもできますが、いくつかの異なるDockerコンテナレジストリからダウンロードすることもできます。 最もポピュラーなレジストリはDocker Hubだが、他にもGoogleのGCR、AmazonのECR、MSのACRなどがある。 これらのレジストリからDockerイメージをローカルにダウンロードするコマンドは以下の通りだ。
$ docker image pull [OPTIONS] NAME[:TAG|@DIGEST]
ここで NAME
は画像の名前であり、TAG
または DIGEST
は同じ画像の複数のバージョンの中から特定の画像を選択するための区切り文字である。
タグやダイジェストの値が指定されていない場合、:latest
タグに対応する画像がダウンロードされます。
画像に割り当てるタグは時々変わることがあるため、同じタグの画像をダウンロードしても同じ画像ではないことがあります。
この場合、ダイジェスト値を使って、まったく同じ画像をダウンロードしていることを確認することができます。
これらの値は inspect
コマンド出力の RepoDigests
セクションにあります。
docker image inspect
コマンドの詳細については、Image inspection post を参照してください。
$ docker image inspect --format '{ {.RepoDigests} }' nginx:latest
[nginx@sha256:af296b188c7b7df99ba960ca614439c99cb7cf252ed7bbc23e90cfda59092305]
Copy
value、tag、またはdigestのいずれかが、以下のような画像をダウンロードする。
$ docker image pull nginx@sha256:af296b...092305
docker.io/library/nginx@sha256:af296b188c7b7df99ba960ca614439c99cb7cf252ed7bbc23e90cfda59092305: Pulling from library/nginx
Digest: sha256:af296b188c7b7df99ba960ca614439c99cb7cf252ed7bbc23e90cfda59092305
Status: Image is up to date for nginx@sha256:af296b188c7b7df99ba960ca614439c99cb7cf252ed7bbc23e90cfda59092305
docker.io/library/nginx@sha256:af296b188c7b7df99ba960ca614439c99cb7cf252ed7bbc23e90cfda59092305
$ docker image pull nginx:latest
latest: Pulling from library/nginx
Digest: sha256:af296b188c7b7df99ba960ca614439c99cb7cf252ed7bbc23e90cfda59092305
Status: Image is up to date for nginx:latest
docker.io/library/nginx:latest
2. イメージのローカルダウンロードパスの場所
セクション1のpull
コマンドを使ってDockerイメージをダウンロードすると、イメージデータはDockerが管理するパスに置かれます。
典型的なローカルイメージのダウンロードパスの場所は以下の通りです。
- Linux:
/var/lib/docker/
- MacOS:
~/Library/Containers/com.docker.docker/Data/vms/0/
- Windows:
C:\ProgramData\Docker\
しかし、一般的にこのDockerに直接アクセスするのは適切ではありません。 Dockerはイメージとコンテナを別々のデータ構造とアルゴリズムで管理しているからです。 イメージをファイルとして保存したり読み込んだりしたい場合は、次のセクション3を参照してください。
3. 画像ファイルをダウンロードするためのコマンド
特定の画像をネットワーク経由で転送・配布したり、バックアップ・リストアの目的でファイルとして保存する必要がある場合があります。 ローカルにダウンロードした画像をファイルとして保存するには、以下のコマンド形式を使用します。
docker image save -o IMAGE_NAME IMAGE
IMAGE_NAME
の部分には、ファイルを保存するパスと拡張子 .tar
のファイル名を指定する。
ファイル名だけを指定すると、自動的にそのファイル名でカレントディレクトリに保存される。
$ mkdir docker-images
$ docker image save -o ~/docker-images/nginx-image nginx:latest
$ ls docker-images
nginx-image
一度ファイルに保存した画像は load
コマンドで再読み込みすることができます。-i
オプションの後に画像ファイルのパスと名前を指定してください。
$ docker image load -i docker-images/nginx-image.tar
Loaded image: nginx:latest
4. Docker Hubのダウンロード制限
より良いサービスを提供するため、Docker Hubではユーザプランに応じて1日あたりのダウンロード数に異なる制限を設けています。 1日のダウンロード数の上限は以下の通りです。
- 署名なしユーザー 100ダウンロード/6時間
- 無料プランユーザー:200ダウンロード/6時間
- 有料プランユーザー 5000ダウンロード/日
最大ダウンロードリクエスト数を超えた場合、以下のログメッセージが表示されます。
You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limits
5. no basic auth credentialsエラーを修正する方法
このエラーメッセージは、Docker Hubを含むDockerレジストリへの認証に必要な認証情報がDocker CLIで見つからない場合に発生します。 一般的には、ログインする必要があるのにログインしていない場合や、認証情報が間違っている場合に発生します。
このような場合、docker login
コマンドでログインを試みるか、docker logout
コマンドでログアウトしてから、再度ログインを試みます。
ログインに成功した場合、認証情報は ~/.docker/config.json
ファイルに保存されます。
ログインに失敗した場合は、~/.docker/config.json
ファイルを別のディレクトリにバックアップして再試行することもできる。
6. KubernetesとDocker: イメージプルポリシー、Dockerプルシークレット
Kubernetesのようなコンテナオーケストレーションツールは、Dockerのプルポリシーとシークレットを設定します。
6.1. イメージプルポリシー
イメージプルポリシーとは、Dockerイメージでコンテナを実行する際に、Kubernetesがイメージをダウンロードするタイミングを決定するルールのことです。 Kubernetesでは3つのポリシーがある。
-
Always
: このポリシーにより、Kubernetesは常にレジストリからイメージをダウンロードする。 同じタグのイメージが既にローカルに存在していても、それは無視され、新しいイメージがレジストリから取得されます。これはイメージタグが:latestの場合のデフォルトのポリシーです。 -
IfNotPresent
: このポリシーにより、Kubernetes はローカルにイメージが存在しない場合にのみ、レジストリからイメージを取得します。 同じタグのイメージが既にローカルに存在する場合は、そのイメージを使用します。これはイメージタグが:latest
でない場合のデフォルトのポリシーです。 -
Never
: このポリシーはKubernetesにレジストリからイメージをダウンロードしないように指示します。 Kubernetesは常にローカルで利用可能なイメージを使用しようとし、存在しない場合はエラーを返します。
これらのポリシーはKubernetesのポッド仕様で設定できます。
6.2. Dockerプルシークレット
Dockerプルシークレットは、Kubernetesなどのコンテナオーケストレーションツールが、特定のDockerレジストリのアクセス認証情報を保存するために使用します。 このシークレットを使用して、Dockerイメージをダウンロードできます。
シークレットは通常JSONファイル形式で、Kubernetes CLIでは以下のコマンドでシークレットを作成できます。
$ kubectl create secret docker-registry my-secret --docker-server=DOCKER_REGISTRY_SERVER --docker-username=DOCKER_USER --docker-password=DOCKER_PASSWORD --docker-email=DOCKER_EMAIL
The above command creates a secret file named my-secret
, which can be referenced in the Kubernetes Pod specification through the imagePullSecrets
entry.
7. まとめ
この記事では、Dockerイメージのダウンロードに関するよくある質問トップ6を取り上げました。 Dockerイメージをローカルにダウンロードするコマンドから、ローカルのダウンロードパスの場所、ファイルのダウンロード方法、ダウンロードの制限、トラブルシューティング、そしてKubernetesについて少し説明しました。 イメージのダウンロードと保存のプロセスでお役に立てれば幸いです。
