docker pullコマンドの使い方(実例で解説)

docker pullコマンド解説

 本記事はDocker ver24.0.7の環境で確認しています。

 このコマンドは、Dockerイメージを入手することができます。

 Dockerイメージは、基本的にDocker Hubという共有可能なレジストリサービスから入手します。

 Docker Hub内にアップロードされているDockerイメージは、個人や企業、団体などが作成したものです。

 中には、Linuxの各ディストリビューション公式イメージや有名なオープン系のミドルウエア公式イメージなどもあります。

 WindowsのCoreイメージも提供されていますので、一度のぞいてみてはいかがでしょうか。

docker pullコマンドのフォーマットとオプション

フォーマット

docker pull [オプション] [Dockerイメージ名 | レジストリホスト/Dockerイメージ名 ]

主なオプション一覧

オプション概説
-a, --all-tags=[ true | false ] 指定したリポジトリ名のDockerイメージを全
て入手する(タグ名は任意)
--disable-content-trust=[ true | false ] Dockerイメージ入手時の認証を行わない
(true指定時:デフォルトはtrue)

コマンド例

$ docker pull centos

docker pullコマンドの主な使い方

 以下で実例をまじえたコマンドの使い方を解説していきたいと思います。

基本事項の解説

 docker pullコマンドは、コンテナのベースとなるDockerイメージを入手するために使用します。

 数あるdockerコマンドの中で最も利用されるコマンドのひとつです。

 Dockerイメージは、Docker公式のDocker Hub(レジストリサービス)にアップロードされているものを利用することになります。

Docker Hubはブラウザで参照可能でして、もちろんキーワードでの検索も可能です。

Docker公式レジストリからDockerイメージを入手する

 以下のコマンドを実行しますと、Docker公式レジストリ内のCentOSのDockerイメージの最新版を入手することが出来ます。

$ docker pull centos

 コマンドを実行しますと、以下のような内容が出力されます。

Using default tag: latest
latest: Pulling from library/centos
7a0437f04f83: Pull complete
Digest: sha256:5528e8b1b1719d34604c87e11dcd1c0a20bedf46e83b5632cdeac91b8c04efc1
Status: Downloaded newer image for centos:latest
docker.io/library/centos:latest

 「Digest:」部分の長い文字列は、入手したDockerイメージを示すダイジェストで、そのDockerイメージに付けられた普遍的な識別子です。

 docker pullコマンドは、Dockerイメージ名のみを指定した場合は、デフォルトでDocker公式のレジストリサービスに接続します。

 後述しますが、他のレジストリに接続することも可能です。

 Dockerイメージ名を指定する際にタグ名を省略すると、「latest」タグが使われます。

 CentOSの最新版はイメージレイヤが1つでしたが、複数レイヤが存在する場合は「Pull complete」の行が複数出力されます。

 イメージレイヤについては別記事「Dockerイメージに関するもう少し詳しい説明」で解説しております。

 docker imagesコマンドにて、入手したCentOSイメージを確認します。

$ docker images
REPOSITORY  TAG     IMAGE ID      CREATED      SIZE
centos      latest  300e315adb2f  4 weeks ago  209MB

 ローカルのDockerイメージ格納先にCentOSイメージが格納されていることが確認できました。

Dockerイメージのダイジェストを使用してイメージを取得する

 通常、最新版のDockerイメージにはlatestタグが付けられます。

 よって、docker pullコマンドでDockerイメージを入手する際は、latestタグを付けることによって、特にバージョンを意識せず常に最新版を入手することが可能です。

 しかし場合によっては、ある特定のDockerイメージを指定して入手したい場合があると思います。

 例えば、動作が確認出来ているDockerイメージを確実に使用したい場合などです。

 Dockerイメージがバージョンアップした場合、最新のDockerイメージにlatestタグを付与し、古いものには別のタグを付与することがよくあります。

 このような場合でも、確実に特定のDockerイメージを入手するには、前項で説明したダイジェスト(Digest)を使用します。

 特定のDockerイメージに付与されているダイジェストを調べる方法として一番簡単なのは、そのDockerイメージを入手することです。

 前項でCentOSイメージを入手した際に、以下のダイジェストが表示されてました。

Digest: sha256:5528e8b1b1719d34604c87e11dcd1c0a20bedf46e83b5632cdeac91b8c04efc1
Digest:sha256:b2f9d1c0ff5f87a4743104d099a3d561002ac500db1b9bfa02a783a46e0d366c

 このダイジェストを使用して、再度CentOSを入手してみます。

 入手する前に現在のcentos:latestを削除します。

$ docker rmi centos:latest

 ではダイジェストを使用してCentOSイメージを入手してみます。

 ダイジェストの前に、「取得するイメージ名のリポジトリ名+@」を指定して実行します。

$ docker pull centos@sha256:5528e8b1b1719d34604c87e11dcd1c0a20bedf46e83b5632cdeac91b8c04efc1

 docker imagesコマンドで確認します。

$ docker images
REPOSITORY   TAG     IMAGE ID      CREATED      SIZE
centos       <none>  0584b3d2cf6d  4 weeks ago  196.5 MB

 ダイジェストを使用してDockerイメージを入手した場合はタグ名が付きませんので、docker tagコマンドでタグを設定します。

$ docker tag 0584b3d2cf6d centos:latest

 対象のDockerイメージを指定する部分にはイメージIDを指定してください。

 docker imagesコマンドで確認します。

$ docker images
REPOSITORY  TAG     IMAGE ID      CREATED      SIZE
centos      latest  0584b3d2cf6d  4 weeks ago  196.5 MB

レジストリサーバを指定してDockerイメージを取得する

 docker pullコマンドは、Dockerイメージのみを指定した場合は、Docker HubからDockerイメージを取得します。

 冒頭でも書きましたが、Docker Hubのようなレジストリは、自前のサーバ上にも構築することが可能です。

 Docker社がレジストリ用のDockerイメージを提供してまして、比較的容易に構築できます。

 自前でレジストリを用意する件につきましては、別記事でご紹介する予定でして、本記事では省かせていただきます。申し訳ございません。

 ここでは、レジストリサーバの名前をtestvm、公開ポート番号を5000番とします。このレジストリ内にmyimage01:v1.0というDockerイメージが格納されているとします。

 このDockerイメージを取得するには、以下のコマンドを実行します。

$ docker pull testvm:5000/myimage01:v1.0

 正常に取得が完了した場合は、以下のような内容が出力されます。

v1.0: Pulling from myimage01
08d48e6f1cff: Pull complete
Digest: sha256:b2f9d1c0ff5f87a4743104d099a3d561002ac500db1b9bfa02a783a46e0d366c
Status: Downloaded newer image for testvm:5000/myimage01:v1.0

 イメージIDやダイジェストは取得するDockerイメージによって異なりますのでご注意ください。

特定のリポジトリの全Dockerイメージを取得する

 Docker Hub内のDockerイメージを指定する場合は、「リポジトリ名:タグ名」という形式で指定するとお話ししました。

 通常リポジトリ名部分には、Linuxのディストリビューション名(CentOS、Ubuntu等)や、製品名(mysql、nginx等)などが使われます。

 docker pullコマンドは、デフォルトでは、Dockerイメージ名で指定した単一のDockerイメージを取得します。

 しかし、場合によっては、特定の製品の全Dockerイメージを入手したい場合があるかもしれません。

 その場合は、オプションとして「-a」(若しくは--all-tags)を付け、リポジトリ名を指定してdocker pullコマンドを実行することで実現できます。

 例えば、LinuxのディストリビューションのCentosの全Dockerイメージを入手する場合は、以下のコマンドを実行します。

$ docker pull -a centos

 Centosの全Dockerイメージは、19個ありまして(2020.6現在)、私のネットワーク環境では、全部取得するのに20分ほど掛かりました。docker pullコマンドの実行過程の出力内容は、大量なので割愛させてください。

 取得したdockerイメージをdocker imagesコマンドで確認します

$ docker images
REPOSITORY  TAG     IMAGE ID      CREATED       SIZE
centos      latest  2d194b392dd1  2 weeks ago   195MB
centos      6.6     3d7ac13b921a  4 months ago  203MB
centos      6.7     000c5746fa52  4 months ago  191MB
centos      5.11    b424fba01172  18 months ago 284MB
centos      5       1ae98b2c895d  18 months ago 285MB
(略)

おわりに

  以上でdocker pullコマンドの紹介を終わります。

 ご指摘、ご要望などが御座いましたらコメントいただけるとうれしいです。

 他のDockerコマンドの実例付紹介記事は、本サイト内の別記事「Dockerのコマンドの一覧(オリジナルな実例付き)」をご参照ください。

 ご訪問ありがとうございました!

コメント