docker pull 完全ガイド|コンテナイメージの取得を基礎から徹底解説

「Dockerを始めたけど、最初に何をすればいいの?」という疑問への答えは、ほぼ間違いなく docker pull です。このコマンドひとつで、世界中の開発者が公開しているアプリケーション環境を自分のPCに丸ごと持ってこられます。

この記事では 完全な初心者から、本番環境で使う上級者まで、段階的に docker pull を深掘りします。途中で動くシミュレータも用意しているので、読みながら手を動かして体で覚えましょう。


目次

  1. docker pull とは何か?(絵で理解する)
  2. 基本構文と最初の一歩
  3. Docker Hub とは:世界最大のイメージ置き場
  4. タグを使いこなす:バージョン指定の重要性
  5. レイヤー構造を理解する:なぜ pull は速いのか
  6. pull したあとどうする?docker images との連携
  7. よく使う公式イメージカタログ
  8. 上級者向け:ダイジェスト・マルチアーキテクチャ・プライベートレジストリ
  9. セキュリティのポイント
  10. コマンドチートシート

1. docker pull とは何か?(絵で理解する)

一言で言うと、「インターネット上にある『アプリの設計図(コンテナイメージ)』を自分のPCにダウンロードするコマンド」です。

スマートフォンのアプリインストールに例えるとわかりやすいです。

  • App Store / Google Play → Docker Hub(イメージの置き場)
  • アプリをインストール → docker pull(イメージをダウンロード)
  • インストール済みアプリ → ローカルイメージ(PCに保存されたイメージ)
  • アプリを起動する → docker run(コンテナを起動)

下のシミュレータで実際に試してみましょう。Docker Hub のカタログからタグをクリックするか、ターミナルに docker pull ubuntu と入力して Enter を押してください。

イメージがダウンロードされる様子が視覚的に確認できましたか? 実際の docker pull でもこのように、Docker Hub から自分のPCへデータが転送されます。

💡 ポイントdocker pull はダウンロードだけです。アプリを動かすには別途 docker run が必要です。まずは「持ってくる」と「動かす」を分けて考えましょう。


2. 基本構文と最初の一歩

基本の形

docker pull [イメージ名]
docker pull [イメージ名]:[タグ]

最もシンプルな例:

# Ubuntu のイメージを取得(タグ省略時は latest が使われる)
docker pull ubuntu

# バージョンを指定して取得
docker pull ubuntu:22.04

# 軽量な Alpine Linux を取得
docker pull alpine:3.19

コマンドの出力を読む

実行すると以下のような出力が流れます。初めて見ると戸惑いますが、構造はシンプルです。

latest: Pulling from library/ubuntu
a1b2c3d4e5f6: Pull complete  (3.11MB)
b2c3d4e5f6a1: Pull complete  (15.32MB)
c3d4e5f6a1b2: Pull complete  (857kB)

Digest: sha256:a1b2c3...
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest
出力の行 意味
a1b2c3...: Pull complete レイヤー(後述)を1枚ダウンロード完了
Digest: sha256:... イメージの一意な識別子(フィンガープリント)
Status: Downloaded newer image 新しいイメージを取得した
Status: Image is up to date 既に最新版が手元にある(再ダウンロードなし)
最後のURL行 取得したイメージの完全な場所

3. Docker Hub とは:世界最大のイメージ置き場

Docker Hub(hub.docker.com)は、コンテナイメージを公開・共有するためのサービスです。GitHubのコードをDockerイメージにしたもの、と思うと近いです。

Official Image(公式イメージ)とは

Docker社やOS・ソフトウェアの開発元が管理するイメージを Official Image と呼びます。セキュリティや品質が継続的に管理されており、初心者は基本的に Official Image を使うのが安全です。

  • イメージ名に「/」がない(例:ubuntunginxpython
  • Docker Hub 上で「OFFICIAL IMAGE」バッジが付いている
  • Dockerが脆弱性スキャン・メンテナンスを実施

イメージ名の構造

フルで書くとイメージ名は次の構造を持っています。

[レジストリ]/[ユーザー名]/[イメージ名]:[タグ]

例:
docker.io/library/ubuntu:22.04   ← 公式Ubuntuの完全形
docker.io/myname/myapp:1.0       ← 個人が公開したイメージ
ghcr.io/org/repo:latest          ← GitHub Container Registry

普段 docker pull ubuntu と省略して書けるのは、レジストリとユーザー名が自動補完されるためです(docker.io/library/ubuntu:latest として解釈されます)。

⚠️ 注意docker pull myname/someapp のように「/」が入るイメージは、個人や企業が公開したものです。信頼できるソースか確認してから使いましょう。


4. タグを使いこなす:バージョン指定の重要性

タグとはイメージの「バージョンラベル」です。同じイメージ名でも、タグが違えば中身が別物になります。

latest タグの罠

タグを省略すると latest が使われます。しかし latest は「最新版」を意味するだけで、バージョンを固定しません。

# 今日の latest と明日の latest は違うバージョンになりえる
docker pull node         # 今日: Node.js 20.x
docker pull node         # 半年後: Node.js 22.x  ← 動作が変わる可能性!

# バージョンを固定する(本番では必須)
docker pull node:20
docker pull node:20.11.0

主要なタグのパターン

タグ例 意味 用途
latest 最新版(不安定) お試し・学習
22.04 バージョン固定 開発・本番
alpine Alpine Linux ベースの軽量版 本番(容量削減)
slim 最小限のパッケージのみ 本番(容量削減)
lts 長期サポート版 安定運用
bookworm Debian コード名 OSバージョン指定

alpine タグを使うメリット

同じ python イメージでもサイズが大きく違います。

docker pull python:3.12         # 約920MB(フル)
docker pull python:3.12-slim    # 約130MB(slim版)
docker pull python:3.12-alpine  # 約55MB(Alpine版)

イメージが小さいほど:配布が速い、セキュリティリスクが低い、コストが下がる、というメリットがあります。ただし Alpine は glibc の代わりに musl libc を使うため、一部のバイナリが動かないことがあります。本番導入前に動作確認が必要です。

💡 実務のベストプラクティス:開発環境では python:3.12(フル版)、本番では python:3.12-slimpython:3.12-alpine を使い分けるのが一般的です。


5. レイヤー構造を理解する:なぜ pull は速いのか

Dockerイメージは レイヤー(層)の積み重ねで構成されています。これが Docker の最大の特徴のひとつです。

レイヤーとは何か

ケーキのスポンジを重ねるイメージです。

  • 一番下:ベースOS(例:Ubuntu 22.04)
  • その上:ランタイム(例:Python 3.12)
  • その上:ライブラリ(例:pip install した依存パッケージ)
  • 一番上:アプリコード

下のシミュレータで docker pull を実行してみてください。右側のPCにレイヤーが下から順番に積み上がっていく様子が確認できます。

レイヤーキャッシュの仕組み

レイヤー構造の最大のメリットはキャッシュです。

# 1回目:全レイヤーをダウンロード(時間がかかる)
docker pull ubuntu:22.04
# → 3枚のレイヤーを全ダウンロード

# ubuntu ベースの nginx を pull(ubuntu レイヤーはキャッシュ済み)
docker pull nginx
# → ubuntu 共通レイヤーはスキップ、差分だけダウンロード

Already exists と表示されるレイヤーはキャッシュを再利用しているため、ダウンロードが省略されます。大きなイメージも2回目以降は格段に速くなります。

レイヤーは読み取り専用

pull したイメージのレイヤーはすべて読み取り専用です。コンテナを起動すると、その上に薄い「書き込み可能レイヤー」が追加されます。コンテナを削除すると書き込みレイヤーだけが消え、元のイメージには影響しません。

pull したイメージ(読み取り専用)
  ├── Layer 2: アプリコード      ← 変更不可
  ├── Layer 1: ライブラリ        ← 変更不可
  └── Layer 0: ベースOS          ← 変更不可

docker run 後(コンテナ起動中)
  ├── 書き込みレイヤー           ← コンテナ専用(削除で消える)
  ├── Layer 2: アプリコード
  ├── Layer 1: ライブラリ
  └── Layer 0: ベースOS

6. pull したあとどうする?docker images との連携

docker pull でダウンロードしたイメージは、ローカルに保存されます。確認するには docker images を使います。

ローカルイメージ一覧を確認する

docker images
# または
docker image ls

出力例:

REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
ubuntu       22.04     ba6acccedd29   2 weeks ago    77.9MB
nginx        latest    a6bd71249a64   3 weeks ago    187MB
alpine       3.19      05455a08881e   4 weeks ago    7.34MB

では実際に何枚かpullしてから docker images で確認してみましょう。

📝 試してみようdocker pull ubuntudocker pull alpine:3.19docker images の順に実行してみてください。2枚のイメージが一覧に表示されます。

pull → run の流れ

イメージを取得したら docker run でコンテナを起動できます。

# pull(持ってくる)
docker pull ubuntu:22.04

# run(動かす)
docker run -it ubuntu:22.04 bash
# → Ubuntu の bash シェルに入れる

# ちなみに docker run はイメージがなければ自動的に pull してくれる
docker run -it alpine:3.19 sh
# → ローカルになければ自動で pull → run

💡 豆知識docker run は内部で docker pulldocker createdocker start を自動でやってくれます。慣れてきたら run だけで済ませることも多いですが、CI/CDや本番環境では pull を明示的に分けて実行するのが一般的です。


7. よく使う公式イメージカタログ

実務でよく使う公式イメージをカテゴリ別にまとめました。上のシミュレータのカタログからそのままクリックして試せます。

OS ベースイメージ

イメージ 代表的なタグ サイズ目安 特徴
ubuntu 22.04, 20.04 ~78MB 最も一般的。パッケージが豊富
debian bookworm, slim ~116MB Ubuntu の元になるディストリビューション
alpine 3.19, 3.18 ~7MB 超軽量。本番のベースに最適

Web サーバー

イメージ 代表的なタグ 特徴
nginx latest, 1.25, alpine 高速・軽量な Web サーバー/リバースプロキシ
httpd 2.4, alpine Apache HTTP Server
caddy latest, alpine 自動 HTTPS 対応の新世代 Web サーバー

言語ランタイム

イメージ 推奨タグ 備考
node 20, 20-alpine LTS版を選ぶこと
python 3.12, 3.12-slim slim版推奨
golang 1.22, 1.22-alpine ビルド後は alpine でいい
php 8.3-fpm, 8.3-alpine Web用は fpm タグ
ruby 3.3, 3.3-alpine

データベース

イメージ 推奨タグ 備考
mysql 8.0 本番で最も使われる RDBMS
postgres 16, 16-alpine 高機能 RDBMS。Rails や Django と相性◎
redis 7, 7-alpine キャッシュ・セッション管理に
mongo 7 ドキュメント型 NoSQL

8. 上級者向け:ダイジェスト・マルチアーキテクチャ・プライベートレジストリ

ダイジェスト指定(完全なバージョン固定)

タグは後から上書きされる可能性があります(latest に限らず)。完全に固定したい場合は ダイジェスト(SHA256) で指定します。

# ダイジェスト付きで pull(バージョン100%固定)
docker pull ubuntu@sha256:a1b2c3d4e5f6...

# 現在のイメージのダイジェストを確認
docker inspect ubuntu:22.04 --format='{{index .RepoDigests 0}}'

CI/CDパイプラインや Kubernetes の本番マニフェストでは、ダイジスト固定が セキュリティのベストプラクティスとされています。

マルチアーキテクチャ(Apple Silicon / ARM対応)

最近の公式イメージは linux/amd64(Intel/AMD)と linux/arm64(Apple M1/M2、Raspberry Pi)の両方に対応しています。docker pull は実行環境に合ったアーキテクチャを自動選択します。

# 自動選択(ほとんどの場合これでいい)
docker pull nginx

# アーキテクチャを明示指定(クロスビルド時など)
docker pull --platform linux/amd64 nginx
docker pull --platform linux/arm64 nginx

プライベートレジストリ

社内イメージや AWS ECR、Google Artifact Registry などのプライベートレジストリから pull する場合はログインが必要です。

# Docker Hub(プライベートリポジトリ)
docker login
docker pull mycompany/private-app:1.0

# AWS ECR
aws ecr get-login-password --region ap-northeast-1 \
  | docker login --username AWS --password-stdin \
    123456789.dkr.ecr.ap-northeast-1.amazonaws.com
docker pull 123456789.dkr.ecr.ap-northeast-1.amazonaws.com/myapp:latest

# Google Artifact Registry
gcloud auth configure-docker asia-northeast1-docker.pkg.dev
docker pull asia-northeast1-docker.pkg.dev/myproject/myrepo/myapp:latest

# GitHub Container Registry
echo $GITHUB_TOKEN | docker login ghcr.io -u USERNAME --password-stdin
docker pull ghcr.io/myorg/myapp:latest

Rate Limit(レートリミット)に注意

Docker Hub は未認証ユーザーに対して pull 回数を制限しています。

アカウント種別 制限
未認証(匿名) 100回 / 6時間(IPアドレス単位)
無料アカウント(ログイン済み) 200回 / 6時間
Pro / Team プラン 制限なし

CI環境(GitHub Actions, CircleCI 等)では共有IPからのアクセスになるため、すぐに制限に引っかかります。CI では必ず Docker Hub にログインするか、ミラーレジストリを使いましょう。

# GitHub Actions の例:Docker Hub にログインしてから pull
- name: Docker Hub ログイン
  uses: docker/login-action@v3
  with:
    username: ${{ secrets.DOCKERHUB_USERNAME }}
    password: ${{ secrets.DOCKERHUB_TOKEN }}

9. セキュリティのポイント

信頼できるイメージを選ぶ

  1. Official Image を優先する:Docker社が審査・管理。脆弱性スキャン済み
  2. Verified Publisher を次に選ぶ:Microsoft, AWS, Google 等の認証済み企業が公開
  3. スター数・ダウンロード数を確認:多いほど多くの目でレビューされている
  4. 更新頻度を確認:最終更新が数年前のイメージには脆弱性が残っている可能性大

イメージの脆弱性スキャン

# Docker Scout でスキャン(Docker Desktop に同梱)
docker scout cves ubuntu:22.04

# Trivy でスキャン(OSS、CI に組み込みやすい)
trivy image nginx:latest

不要なイメージを削除する

古いイメージや使わなくなったイメージはディスクを圧迫するだけでなく、脆弱なバージョンが手元に残るリスクもあります。

# 特定のイメージを削除
docker rmi ubuntu:20.04

# 使っていないイメージをまとめて削除
docker image prune

# 停止中コンテナ・未使用イメージ・ネットワーク・ボリュームを一括削除
docker system prune -a

10. コマンドチートシート

pull 系

# 基本
docker pull ubuntu                      # latest タグで取得
docker pull ubuntu:22.04               # バージョン指定
docker pull ubuntu@sha256:a1b2c3...    # ダイジェスト指定(完全固定)

# オプション
docker pull --platform linux/arm64 nginx   # アーキテクチャ指定
docker pull -q ubuntu                       # 進捗表示なし(quiet)

確認系

docker images                           # ローカルイメージ一覧
docker image ls                         # 同上
docker image ls --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}"
                                        # 表示形式を指定
docker inspect ubuntu:22.04             # イメージの詳細情報
docker history ubuntu:22.04             # レイヤー履歴を表示

検索系

docker search nginx                     # Docker Hub を検索(CLI版)
docker search --limit 5 python          # 上位5件だけ表示

削除系

docker rmi ubuntu:22.04                 # イメージを削除
docker rmi $(docker images -q)          # すべてのイメージを削除
docker image prune                      # 未使用イメージを削除
docker system prune -a                  # 未使用のものをすべて削除

まとめ

この記事で学んだことを振り返りましょう。

  • docker pull は Docker Hub からイメージをダウンロードするコマンド
  • ✅ タグでバージョンを指定できる。latest は本番では避けること
  • ✅ イメージはレイヤー構造で、キャッシュにより2回目以降の pull が速い
  • ✅ pull したイメージは docker images で確認できる
  • ✅ 公式イメージ(Official Image)を優先して使う
  • ✅ 本番・CI ではダイジェスト固定やプライベートレジストリの活用を検討する

最後にもう一度シミュレータで復習しましょう。docker pull python:3.12-slimdocker pull redis:7-alpine など、今日学んだタグ付きのコマンドを試してみてください。

次のステップは docker run です。pull したイメージを実際に動かして、コンテナの世界に踏み込みましょう。


この記事のシミュレータは学習用のデモです。実際の Docker Hub のイメージ一覧や挙動とは異なる場合があります。

コメント

タイトルとURLをコピーしました