「Dockerを始めたけど、最初に何をすればいいの?」という疑問への答えは、ほぼ間違いなく docker pull です。このコマンドひとつで、世界中の開発者が公開しているアプリケーション環境を自分のPCに丸ごと持ってこられます。
この記事では 完全な初心者から、本番環境で使う上級者まで、段階的に docker pull を深掘りします。途中で動くシミュレータも用意しているので、読みながら手を動かして体で覚えましょう。
目次
- docker pull とは何か?(絵で理解する)
- 基本構文と最初の一歩
- Docker Hub とは:世界最大のイメージ置き場
- タグを使いこなす:バージョン指定の重要性
- レイヤー構造を理解する:なぜ pull は速いのか
- pull したあとどうする?docker images との連携
- よく使う公式イメージカタログ
- 上級者向け:ダイジェスト・マルチアーキテクチャ・プライベートレジストリ
- セキュリティのポイント
- コマンドチートシート
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 を使うのが安全です。
- イメージ名に「/」がない(例:
ubuntu、nginx、python) - 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-slimやpython: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 ubuntu→docker pull alpine:3.19→docker 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 pull→docker create→docker 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. セキュリティのポイント
信頼できるイメージを選ぶ
- Official Image を優先する:Docker社が審査・管理。脆弱性スキャン済み
- Verified Publisher を次に選ぶ:Microsoft, AWS, Google 等の認証済み企業が公開
- スター数・ダウンロード数を確認:多いほど多くの目でレビューされている
- 更新頻度を確認:最終更新が数年前のイメージには脆弱性が残っている可能性大
イメージの脆弱性スキャン
# 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-slim や docker pull redis:7-alpine など、今日学んだタグ付きのコマンドを試してみてください。
次のステップは docker run です。pull したイメージを実際に動かして、コンテナの世界に踏み込みましょう。
この記事のシミュレータは学習用のデモです。実際の Docker Hub のイメージ一覧や挙動とは異なる場合があります。


コメント