🐳

【Docker入門】 イメージ管理

に公開

はじめに

この投稿では、Dockerにおける「イメージ管理」について、基本から応用まで体系的に解説します。
docker image コマンドの基本操作に加え、プライベートレジストリの構築・活用方法保存・復元・クリーンアップのテクニックまでを、実践例とともに紹介します。

Dockerのイメージ管理は、開発・テスト・運用の全ステージで重要な役割を果たすため、確実に理解しておきたい分野です。


1. Docker イメージの取得(pull

Docker イメージは Docker Hub をはじめとするさまざまなレジストリから取得可能です。

docker pull debian
docker pull library/debian:10
docker pull docker.io/library/debian:10
docker pull gcr.io/google-samples/hello-app:1.0

📌 解説

  • docker.io はデフォルトレジストリ(省略可)
  • gcr.io は Google Container Registry の一例
  • イメージ名:タグ名 形式でバージョン指定可能
  • 特定のバージョンを使用することで、環境の再現性が高まります

2. イメージの詳細確認(inspect

Docker イメージの内部情報(メタデータ)を確認できます。

docker image inspect httpd:2.4

出力の一部例:

{
  "RepoTags": ["httpd:2.4"],
  "ContainerConfig": {
    "ExposedPorts": {"80/tcp": {}}
  },
  "Os": "linux"
}

よく使う --format オプション

docker image inspect --format="{{.Os}}" httpd:2.4
docker image inspect --format="{{.RepoTags}}" httpd:2.4
docker image inspect --format="{{.ContainerConfig.ExposedPorts}}" httpd:2.4
  • Goテンプレート構文で特定情報だけ抽出可能
  • スクリプト自動化にも活用できます

3. イメージの履歴確認(history

どのような命令でイメージが構築されたかを確認します。

docker image history httpd:2.4
IMAGE ID COMMAND SIZE
d16761… CMD ["httpd-foreground"] 0B
<none> EXPOSE 80 0B
<none> COPY file:xxx... 138B
<none> ENV HTTPD_VERSION=2.4.57 0B
  • Dockerfile のレイヤーごとの履歴を可視化
  • セキュリティ監査やキャッシュ最適化に役立ちます

4. イメージの保存と復元(save / load

🔸 イメージの保存(エクスポート)

docker image save phpserver:1.0 > phpserver1.tar
docker image save phpserver:1.0 | gzip > phpserver1.tar.gz
  • .tar ファイルとしてイメージを保存
  • チーム内での共有や、外部ストレージへのバックアップに便利

🔸 リモート転送(例)

scp phpserver1.tar.gz kevin@host:/home/kevin/backup/

🔸 イメージの復元(インポート)

docker image load < phpserver1.tar.gz

5. Docker HubへのログインとPush

🔐 認証とログイン

docker login

トークン使用の場合:

cat .access_token | docker login --username <username> --password-stdin

📤 イメージのタグ付けとPush

docker image tag myweb:v1.0 <username>/myweb:v1.0
docker push <username>/myweb:v1.0
  • タグに Docker Hub のユーザー名を含める必要あり
  • プッシュ前にパブリック/プライベート設定も確認しましょう

6. プライベートレジストリの構築と運用

🏗️ 起動

docker run -d \
  -v /home/kevin/registry_data:/var/lib/registry \
  -p 5000:5000 \
  --restart=always \
  --name=local-registry \
  registry

⚠️ insecure registry 対応(HTTPS未対応の場合)

# /etc/docker/daemon.json
{
  "insecure-registries": ["192.168.56.101:5000"]
}
sudo systemctl restart docker

📤 プッシュと確認

docker tag myweb:v1.0 192.168.56.101:5000/myweb:v1.0
docker push 192.168.56.101:5000/myweb:v1.0

# イメージ確認
curl http://192.168.56.101:5000/v2/_catalog
curl http://192.168.56.101:5000/v2/myweb/tags/list

7. イメージの削除とクリーンアップ(rmi

一括削除例:

docker rmi $(docker images -q)                       # 全削除
docker rmi $(docker images | grep debian)           # debian関連のみ
docker rmi $(docker images | grep -v centos)        # centos以外を削除

利用中のイメージ削除エラーへの対応

docker ps -a                        # 実行中コンテナ確認
docker stop <CONTAINER_ID>         # 停止
docker rm <CONTAINER_ID>           # コンテナ削除
docker rmi <IMAGE_NAME>            # イメージ削除

🧰 aliasで作業効率化

# .bashrcや.zshrcに追記
alias cexrm='docker rm $(docker ps --filter "status=exited" -a -q)'
source ~/.bashrc

まとめ

Dockerイメージ管理は、単なる操作だけでなく、CI/CD・本番運用・バックアップ戦略・セキュリティに密接に関わる重要な分野です。

以下のスキルは、日々のDevOps運用で役立ちます:

  • イメージの取得・調査・タグ付け
  • 保存・復元によるバックアップ設計
  • プライベートレジストリによる社内アプリの効率的な配布
  • イメージのライフサイクル管理(クリーンアップ・共有)

Discussion