イメージ管理

イメージの検索

Docker Hubでイメージを検索します。

# Docker Hubでイメージを検索
docker search nginx
docker search mysql

# 公式イメージのみ表示
docker search --filter "is-official=true" nginx

# 星数が一定以上のものを検索
docker search --filter "stars=100" nginx

イメージの取得(Pull)

レジストリからイメージをダウンロードします。

# 最新版を取得(latestタグ)
docker pull nginx
docker pull ubuntu

# 特定バージョンを取得
docker pull nginx:1.25
docker pull mysql:8.0
docker pull node:18-alpine

# 特定のレジストリから取得
docker pull ghcr.io/user/repo:tag

✓ 本番環境では必ずタグを明示的に指定しましょう

latestタグは不安定な場合があるため注意が必要です

イメージの一覧表示

# ローカルのイメージ一覧
docker images
docker image ls

# イメージIDのみ表示
docker images -q

# 中間イメージも含めて表示
docker images -a

# タグなしイメージのみ表示
docker images -f "dangling=true"

イメージ詳細情報の確認

# イメージの詳細情報をJSON形式で表示
docker inspect nginx
docker inspect イメージID

# 特定の情報だけを取得
docker inspect --format='{{.Config.Env}}' nginx
docker inspect --format='{{.Architecture}}' nginx

# イメージの履歴を確認
docker history nginx
docker history --no-trunc nginx

イメージの削除

# イメージを名前で削除
docker rmi nginx
docker image rm nginx:1.25

# イメージIDで削除
docker rmi イメージID

# 複数イメージを一度に削除
docker rmi nginx mysql redis

# 強制削除(コンテナが使用中でも)
docker rmi -f nginx

# 未使用イメージを全て削除
docker image prune

# タグなしイメージも含めて削除
docker image prune -a

# 確認なしで実行
docker image prune -f

イメージのビルド

Dockerfileからイメージを作成します。

# カレントディレクトリのDockerfileからビルド
docker build .

# タグを付けてビルド
docker build -t my-app:1.0 .
docker build -t myname/my-app:latest .

# Dockerfileを指定してビルド
docker build -f Dockerfile.prod -t my-app:prod .

# キャッシュを使わずにビルド
docker build --no-cache -t my-app .

# ビルド引数を渡す
docker build --build-arg NODE_VERSION=18 -t my-app .

# ビルドコンテキストを指定
docker build -t my-app ./src

Dockerfileの基本

# ベースイメージの指定
FROM node:18-alpine

# 作業ディレクトリの設定
WORKDIR /app

# ファイルのコピー
COPY package*.json ./

# コマンドの実行
RUN npm install

# アプリコードをコピー
COPY . .

# ポートの公開
EXPOSE 3000

# コンテナ起動時のコマンド
CMD ["npm", "start"]

イメージのタグ付け

# 既存イメージに新しいタグを付ける
docker tag my-app:1.0 my-app:latest
docker tag my-app myname/my-app:1.0

# レジストリ用のタグ付け
docker tag my-app:1.0 registry.example.com/my-app:1.0
docker tag my-app ghcr.io/username/my-app:latest

イメージのプッシュ(Push)

# Docker Hubにプッシュ
docker push myname/my-app:1.0
docker push myname/my-app:latest

# プライベートレジストリにプッシュ
docker push registry.example.com/my-app:1.0

# GitHub Container Registryにプッシュ
docker push ghcr.io/username/my-app:latest

※ プッシュ前にdocker loginで認証が必要です

イメージの保存と読込

イメージをファイルとして保存したり、読み込んだりできます。

# イメージをtarファイルに保存
docker save -o nginx.tar nginx
docker save nginx > nginx.tar

# 複数イメージを一つのファイルに保存
docker save -o images.tar nginx mysql redis

# tarファイルからイメージを読み込む
docker load -i nginx.tar
docker load < nginx.tar

# コンテナをイメージに変換(export/import)
docker export コンテナ名 > container.tar
docker import container.tar my-image:1.0

save/loadはイメージの履歴を保持します

export/importは履歴が失われます

イメージのサイズ確認

# イメージのサイズを確認
docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}"

# 特定イメージのレイヤーサイズを確認
docker history nginx

# ディスク使用状況を確認
docker system df
docker system df -v