pull

使い方: docker pull [オプション] 名前[:タグ] | [レジストリ・ホスト[:レジストリ・ポート]/]名前[:タグ]

レジストリからイメージやリポジトリを取得

  -a, --all-tags=false          リポジトリでタグ付けられた全てのイメージをダウンロード
  --disable-content-trust=true  イメージの認証をスキップ
  --help                        使い方の表示

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

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

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

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

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

$ docker pull debian

Using default tag: latest
latest: Pulling from library/debian
fdd5d7827f33: Pull complete
a3ed95caeb02: Pull complete
Digest: 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

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

$ 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度だけであり、余分なディスク容量は不要です。

イメージ、レイヤ、コンテント・アドレッサブル・ストアに関する詳しい情報は、 イメージ、コンテナ、ストレージ・ドライバの理解 をご覧ください。

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

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

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

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

$ docker pull ubuntu:14.04

14.04: Pulling from library/ubuntu
5a132a7e7af1: Pull complete
fd2731e4c50c: Pull complete
28a2f68d1120: Pull complete
a3ed95caeb02: Pull complete
Digest: 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 でも指定可能です。以下は例です。

FROM ubuntu@sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2
MAINTAINER some maintainer <maintainer@example.com>

注釈

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

別のレジストリから取得

docker pull のイメージは 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)を許可している場合は除外します。詳細は 安全ではないレジストリ をご覧ください。

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

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

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

$ docker pull --all-tags fedora

Pulling repository fedora
ad57ef8d78d7: Download complete
105182bb5e8b: Download complete
511136ea3c5a: Download complete
73bd853d2ea5: Download complete
....

Status: Downloaded newer image for fedora

取得が終わったら、取得した全てのイメージを確認するために docker images コマンドを使います。次の例はローカルに現在ある全ての 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

取得を中止

docker pull プロセスを停止するには、ターミナルで実行中に 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 デーモンとの通信を切断した場合も、同様に取得処理が中断します。