pull

使い方: docker pull [オプション] 名前[:タグ]|[レジストリ・ホスト[:レジストリ・ポート]/]名前[:タグ]レジストリからイメージやリポジトリを取得 -a, --all-tags=false リポジトリでタグ付けられた全てのイメージをダウンロード --disable-content-trust=true イメージの認証をスキップ --help 使い方の表示

大部分のイメージは、 Docker Hub レジストリにあるベース・イメージを元に作られています。

Docker Hub には多くの構築済みのイメージがあります。自分で定義や設定をしなくても、イメージを pull (取得)して試せます。

特定のイメージやイメージの集まり(例:リポジトリ)をダウンロードするには、 dockerpull を使います。

プロキシ設定

企業内における設定など HTTP プロキシ・サーバの背後で使う場合には、レジストリに接続する前に、Docker デーモンの設定が必要になるでしょう。設定には環境変数 HTTP_PROXYHTTPS_PROXYNO_PROXY です。これらの環境変数を systemd 上で使う場合には、 systemd で Docker の管理と設定 の環境変数についてをご覧ください。

イメージを Docker Hub から取得(pull)

特定のイメージやイメージ群(例:リポジトリ)をダウンロードするには、 dockerpull を使います。タグを指定しなければ、 Docker Engine はデフォルトで :latest タグを使います。次のコマンドは debian:latest イメージを取得します:

$ docker pull debian
Using default tag: latest
latest: Pulling from library/debian
fdd5d7827f33: Pull completea3ed95caeb02: Pull completeDigest: sha256:e7d38b3517548a1c71e41bffe9c8ae6d6d29546ce46bf62159837aad072c90aa
Status: Downloaded newer image for debian:latest

Docker イメージは複数のレイヤ(層)で構成されています。上の例では、イメージには fdd5d7827f33a3ed95caeb02 の2つのレイヤがあります。

レイヤはイメージ間で再利用できます。例えば、 debian:jessie イメージは debian:latest とレイヤを共有しています。そのため、 debian:jessie イメージの取得時は、レイヤをダウンロードせずにメタデータのみ取得します。なぜなら全てのレイヤがローカルにダウンロード済みだからです。

$ docker pull debian:jessie
jessie: Pulling from library/debian
fdd5d7827f33: Already exists
a3ed95caeb02: Already exists
Digest: sha256:a9c958be96d7d40df920e7041608f2f017af81800ca5ad23e327bc402626b58e
Status: Downloaded newer image for debian:jessie

どのようなイメージがローカルにあるかを確認するには dockerimages コマンドを使います。

$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
debian jessie f50f9524513f 5 days ago 125.1 MB
debian latest f50f9524513f 5 days ago 125.1 MB

Docker はコンテント・アドレッサブル(content-addressable;内容に対して割り当て可能な)イメージ・ストアを使います。そして、イメージ ID とはイメージの設定とレイヤを扱う SHA256 ダイジェストです。先ほどの例では debian:jessiedebian:latest は同じイメージ ID を持っています。イメージ名は違いますが、実際には同じイメージに対してタグ付けしています。どちらも同じイメージのため、レイヤのためのデータを保存するのは1度だけであり、余分なディスク容量は不要です。

イメージ、レイヤ、コンテント・アドレッサブル・ストアに関する詳しい情報は、 /engine/userguide/storagedriver/imagesandcontainers をご覧ください。

ダイジェスト(変わらない識別子)でイメージを取得

ここまではイメージを名前(または「タグ」)で取得しました。イメージを扱うのに名前とタグの指定は便利です。イメージに対して dockerpull を実行する時にタグを指定したら、そのイメージの最新バージョンをダウンロードします。例えば dockerpullubuntu:14.04 は Ubuntu 14.04 イメージの最新バージョンを取得します。

イメージを最新バージョンではなく、特定のバージョンに固定したい場合があるでしょう。そのような場合、Docker はダイジェスト( digest 値)を指定してイメージを取得できます。ダイジェストを指定してイメージを取得しようとしたら、指定したバージョンのイメージを確実にダウンロードします。したらイメージのバージョンを「固定」し、常に同じイメージの使用を保証します。

イメージのダイジェスト値を知るには、まずイメージを取得します。Docker Hub から最新の ubuntu:14.04 イメージをダウンロードしましょう。

$ docker pull ubuntu:14.0414.04: Pulling from library/ubuntu
5a132a7e7af1: Pull completefd2731e4c50c: Pull complete28a2f68d1120: Pull completea3ed95caeb02: Pull completeDigest: sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2
Status: Downloaded newer image for ubuntu:14.04

Docker はダウンロードが完了したら、イメージのダイジェスト値を表示します。先ほどの例では、イメージのダイジェスト値とは、こちらです。

sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2

Docker はイメージを送信( push )する時のダイジェスト値を表示します。イメージを送信時のバージョンを固定したい場合には便利になるでしょう。

イメージの取得時にダイジェスト値を使うには、タグとして扱います。例えば、イメージをダイジェスト値で取得するには、次のコマンドを実行します。

$ docker pull ubuntu@sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2
sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2: Pulling from library/ubuntu
5a132a7e7af1: Already exists
fd2731e4c50c: Already exists
28a2f68d1120: Already exists
a3ed95caeb02: Already exists
Digest: sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2
Status: Downloaded newer image for ubuntu@sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2

Digest は Dockerfile の FROM でも指定可能です。以下は例です。

FROMubuntu@sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2MAINTAINERsomemaintainer<maintainer@example.com>

注釈

この機能はイメージに対するバージョンを都度「固定」します。そのため Docker はイメージのバージョンを更新しないため、セキュリティの更新もしません。更新版のイメージを取得したい場合は、適時ダイジェスト値を変更する必要があります。

別のレジストリから取得

dockerpull のイメージは Docker Hub から取得するのがデフォルトです。取得するレジストリの場所は、手動で指定可能です。例えば、ローカルにレジストリをセットアップしておけば、そちらを指定してイメージを取得できます。レジストリのパスは URL と似ていますが、プロトコル指示子( https:// )がありません。

以下のコマンドは、ポート 5000 を開いているローカルのレジストリ( myregistry.local:5000 )から testing/test-image イメージを取得するコマンドです。

$ docker pull myregistry.local:5000/testing/test-image

レジストリの認証情報は docker login で管理します。

Docker はレジストリとの通信に https プロトコルを使います。ただし、レジストリが安全ではない接続(insecure connection)を許可している場合は除外します。詳細は 安全ではないレジストリ をご覧ください。

リポジトリから複数のイメージを取得

デフォルトでは、 dockerpull はレジストリから単一のイメージを取得します。リポジトリには複数のイメージがあります。リポジトリから全てのイメージを取得するには dockerpull-a (あるいは --all-tags )オプションを使います。

次のコマンドは fedora リポジトリから全てのイメージを取得します。

$ docker pull --all-tags fedora
Pulling repository fedora
ad57ef8d78d7: Download complete105182bb5e8b: Download complete511136ea3c5a: Download complete73bd853d2ea5: Download complete....
Status: Downloaded newer image for fedora

取得が終わったら、取得した全てのイメージを確認するために dockerimages コマンドを使います。次の例はローカルに現在ある全ての fedora イメージを表示しています。

$ docker images fedora
REPOSITORY TAG IMAGE ID CREATED SIZE
fedora rawhide ad57ef8d78d7 5 days ago 359.3 MB
fedora 20 105182bb5e8b 5 days ago 372.7 MB
fedora heisenbug 105182bb5e8b 5 days ago 372.7 MB
fedora latest 105182bb5e8b 5 days ago 372.7 MB

取得を中止

dockerpull プロセスを停止するには、ターミナルで実行中に CTRL-c を押すと、pull 処理を中断します。

$ docker pull fedora
Using default tag: latest
latest: Pulling from library/fedora
a3ed95caeb02: Pulling fs layer
236608c7b546: Pulling fs layer
^C

注釈

技術的に Engine を停止する処理とは、 Docker Engine デーモンと起点となった Docker Engine クライアント間における取得(pull)に対してです。何らかの理由によって Engine デーモンとの通信を切断した場合も、同様に取得処理が中断します。