はじめに
この実験では、Docker ビルドの詳細情報を確認するためにdocker buildx history openコマンドを使用する方法を学びます。まず、Dockerfileを使用してシンプルな Docker イメージを構築します。このDockerfileには、イメージ作成の手順が記載されています。
イメージの構築後、ビルド履歴を一覧表示する方法を確認します。最後に、docker buildx history openコマンドを使用して、特定のビルドの詳細を Docker Desktop 内で直接開き、ビルドプロセスの視覚的かつ包括的な概要を確認します。
シンプルな Docker イメージをビルド
このステップでは、Dockerfileを使用してシンプルな Docker イメージを構築する方法を学びます。Dockerfileは、イメージを構築するためにコマンドラインで実行可能なすべてのコマンドを含むテキストドキュメントです。Docker はDockerfileから命令を読み取り、自動的にイメージを構築できます。
まず、この実験の作業ディレクトリである~/projectディレクトリに移動します。
cd ~/project
次に、シンプルなDockerfileを作成します。~/projectディレクトリにDockerfileという名前のファイルを作成します。
nano Dockerfile
nanoエディタ内に、以下の内容を貼り付けます:
FROM ubuntu:latest
RUN apt-get update && apt-get install -y cowsay
CMD ["cowsay", "Hello, Docker!"]
このDockerfileの内容を分解してみましょう:
FROM ubuntu:latest: この命令は新しいイメージのベースイメージを指定します。最新版の Ubuntu オペレーティングシステムから始めます。RUN apt-get update && apt-get install -y cowsay: この命令はイメージ構築プロセス中にコマンドを実行します。パッケージリストを更新し、cowsayパッケージをインストールします。cowsayはテキストを牛の吹き出しで表示するシンプルなプログラムです。CMD ["cowsay", "Hello, Docker!"]: この命令は、このイメージからコンテナが起動されたときに実行するデフォルトのコマンドを提供します。この場合、cowsayコマンドに引数"Hello, Docker!"を渡して実行します。
ファイルを保存するには、Ctrl + X、次にY、そしてEnterを押します。
Dockerfileが準備できたので、Docker イメージを構築できます。docker buildコマンドを使用します。-tフラグはイメージに名前を付け、オプションでname:tag形式でタグを付けます。コマンド末尾の.は、Docker に現在のディレクトリでDockerfileを探すように指示します。
docker build -t my-cowsay-image:latest .
Docker がDockerfileの命令を実行しながらレイヤーごとにイメージを構築していることを示す出力が表示されます。ベースイメージのダウンロードとcowsayパッケージのインストールに数分かかる場合があります。
構築が完了したら、docker imagesコマンドを使用して利用可能なイメージをリストアップし、イメージが作成されたことを確認できます。
docker images
出力にmy-cowsay-imageが表示されるはずです。
最後に、構築したイメージからコンテナを実行して、期待通りに動作するか確認しましょう。
docker run my-cowsay-image:latest
cowsayコマンドの出力が表示されます:
_______
< Hello, Docker! >
-------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
これにより、Docker イメージが正しく構築され、デフォルトコマンドが意図した通りに実行されていることが確認できます。
ビルド履歴を一覧表示
このステップでは、Docker イメージの履歴を表示する方法を学びます。これにより、イメージを構成するレイヤーと各レイヤーを作成するために使用されたコマンドを確認できます。これはイメージの構築方法を理解したり、デバッグしたりするのに役立ちます。
docker historyコマンドの後にイメージ名または ID を指定して使用します。前のステップでmy-cowsay-imageという名前のイメージを構築しました。その履歴を表示してみましょう。
docker history my-cowsay-image:latest
出力には以下の列を含むテーブルが表示されます:
IMAGE: イメージレイヤーの IDCREATED: レイヤーが作成されたタイムスタンプCREATED BY: レイヤーを作成したコマンドSIZE: レイヤーのサイズCOMMENT: レイヤーに関連付けられたコメント
Dockerfileの命令に対応するエントリが表示されます:ベースの Ubuntu イメージ、apt-getコマンド、CMD命令などです。Dockerfile内の各RUN命令はイメージに新しいレイヤーを作成します。
履歴を理解することで、Dockerfileの各命令が最終的なイメージにどのように貢献しているかを確認できます。これは特にイメージサイズの最適化やビルド問題のトラブルシューティングに役立ちます。
例えば、各コマンドによって追加されたサイズを確認することで、不要な大きなレイヤーを特定できます。
使用したベースイメージubuntu:latestの履歴も表示してみましょう。
docker history ubuntu:latest
これにより、公式 Ubuntu イメージの履歴が表示されます。これは私たちのシンプルなイメージ履歴よりもはるかに長く複雑で、ベースイメージがどのように複数のレイヤーから構築されているかを示しています。
docker historyコマンドは、Docker イメージの構成に関する貴重な洞察を提供します。
Docker Desktop で特定のビルドを開く
このステップでは、Docker Desktop を使用して特定のイメージビルドの詳細を表示する方法について説明します。LabEx 環境はコマンドラインインターフェースを提供していますが、Docker Desktop は Docker と対話するためのより視覚的な方法を提供する人気のあるグラフィカルツールです。
注記: Docker Desktop はローカルマシン(Windows、macOS、またはデスクトップ環境を備えた Linux)で実行されるグラフィカルアプリケーションです。LabEx 環境は Web ブラウザ経由でアクセスするクラウドベースの仮想マシンであり、Docker Desktop を実行するためのグラフィカルデスクトップ環境は備えていません。したがって、この LabEx 環境内で直接「Docker Desktop で特定のビルドを開く」ことはできません。
ただし、Docker Desktop を使用した一般的な開発環境でこれがどのように行われるかを理解することは重要です。
Docker Desktop では、「Images」セクションに移動します。ここには、システム上のすべての Docker イメージのリストが表示されます。作成したmy-cowsay-image:latestイメージを見つけることができます。
イメージ名をクリックすると、イメージの詳細ビューが開きます。このビューには通常以下が含まれます:
- 概要: イメージのサイズ、作成日、ID などの基本情報
- レイヤー: イメージレイヤーの視覚的表現(
docker historyの出力に似ていますが、より詳細でグラフィカルなインターフェース)。各レイヤーを検査して、実行されたコマンドや追加/変更されたファイルを確認できます - タグ: イメージに関連付けられたタグのリスト
- 脆弱性: イメージ内の既知のセキュリティ脆弱性に関する情報(スキャンが有効な場合)
Docker Desktop のこのグラフィカルインターフェースは、特に多くのレイヤーを持つ複雑なイメージの場合、コマンドライン出力と比べてイメージの内容や履歴を簡単に探索できます。
現在の LabEx 環境ではこの操作を実行できませんが、Docker Desktop のこの機能を理解することは、Docker 学習全体にとって価値があります。
LabEx 環境でこのステップを完了するには、単にこの概念を認識します。
まとめ
この実験では、Dockerfileを使用してシンプルな Docker イメージを構築する方法を学びました。Ubuntu をベースイメージとして使用し、cowsayパッケージをインストールし、デフォルトコマンドとしてcowsayを実行するように設定したDockerfileを作成しました。その後、docker buildコマンドを使用してイメージを構築し、タグ付けしました。
イメージの構築後、docker buildx historyを使用してビルド履歴を表示する方法を学び、さらにdocker buildx history openコマンドを使用して Docker Desktop 内で特定のビルドの詳細を直接確認しました。これにより、ビルドプロセスとその成果物を視覚的に検査するインターフェースが提供されました。



