イメージとは?
説明
コンテナー を見てきましたが、これは独立したプロセスのことでした。 ではどこからファイルなり設定なりを取得しているのでしょう? どうやったらこの環境を共有できるようになるのでしょう?
これこそがコンテナーイメージの出番です! コンテナーイメージとは標準化されたパッケージのことであり、コンテナー実行のために必要となるファイル、実行バイナリー、設定をすべて含んだもののことです。
PostgreSQL イメージについて言うと、このイメージにはデータベースバイナリー、設定ファイル、依存パッケージが含まれています。 Python ウェブアプリの場合であれば、Python ランタイム、アプリのコード、その依存パッケージということになるでしょう。
イメージには二つの大きな原則があります。
イメージは不変のものです。 一度イメージを生成すると、それを修正することはできません。 イメージに対してできることは、新たなイメージを作るか、あるいはイメージの最上部に変更内容を加えることだけです。
コンテナーイメージはレイヤーから構成されます。 各レイヤーはファイルシステムに対して加えられた、ファイルの追加、削除、修正の情報によって表現されます。
この原則に従って、既存のイメージは拡張したり追加したりすることができます。 たとえば Python アプリを構築中であるとした場合、 Python イメージ を原点として、そこにアプリに必要となる依存パッケージやアプリのコードをレイヤーとして追加していきます。 そのようになっているので Python 自体はもはや考慮不要となり、アプリにのみ集中して考えいくことができます。
イメージの検索
Docker Hub とは、イメージの保存と供給を行うデフォルトでグローバルな場所です。 ここには多くの開発者たちが生成した 100,000 にもおよぶイメージが提供されており、これを入手すれば即座に実行することができます。 Docker Hub 内のイメージの検索と実行は Docker Desktop から直接行うことができます。
Docker Hub が提供するのはさまざまなイメージであり、そこには Docker がサポートするものや、Docker Trusted Content として知られる認証イメージがあります。 こういったイメージは適切に管理したサービスを提供しており、ベースとするイメージとして優れた機能を提供します。 具体的には以下のものです。
- Docker 公式イメージ - Docker が監修するリポジトリセットです。 非常に多くのユーザーがこのイメージをベースとして利用しています。 Docker Hub の中でも最も安全なイメージです。
- Docker 認定公開者 (Docker Verified Publishers) - Docker 社が認定する商用公開者による高品質なイメージです。
- Docker がスポンサーとなっているオープンソース - Docker のオープンソースプログラムを通じたオープンソースプロジェクトが公開管理するイメージ。
たとえば Redis や Memcached は、即座に利用できる人気の Docker 公式イメージです。 このイメージをダウンロードすれば、ほんの数秒でそのサービスを起動することができます。 また Node.js のようなベースイメージもあります。 これをベースとして利用すれば、独自のファイルや設定を加えていくことができます。
ためしてみよう
このチュートリアルにおいては Docker Desktop の GUI を用いて、コンテナーイメージの検索とプルの方法について学びます。
イメージ検索とダウンロード
Docker Desktop Desktop を開いて、左側のナビゲーションメニューにある Images (イメージ) 画面を選びます。
Search images to run (実行イメージの検索) ボタンをクリックします。 ボタンが見つからない場合は、画面上段にある global search bar (グローバル検索バー) をクリックしてください。
Search (検索) 欄に "welcome-to-docker" を入力します。 検索が行われたら
docker/welcome-to-docker
イメージを選択します。Pull (プル) をクリックしてイメージをダウンロードします。
イメージについての理解
イメージをダウンロードしたら、GUI あるいは CUI を通じてイメージについての詳細を確認していきます。
Docker Desktop Dashboard の Images (イメージ) 画面を選びます。
docker/welcome-to-docker イメージをクリックして、このイメージについての詳細ページを開きます。
イメージ詳細ページが示す情報は、イメージのレイヤー、イメージにインストールされているパッケージやライブラリ、また検出されたぜい弱性といったものです。
CLI を使って Docker イメージの検索とプルを行うには以下の手順に従います。 これによりイメージの各レイヤーを確認することができます。
イメージの検索とダウンロード
端末を開き、イメージを検索する
docker search
コマンドを実行します。docker search docker/welcome-to-docker
出力結果は以下のようなものとなります。
NAME DESCRIPTION STARS OFFICIAL docker/welcome-to-docker Docker image for new users getting started w… 20
この出力には Docker Hub において利用可能な関連イメージの情報が示されています。
docker pull
コマンドを使ってイメージをプルします。docker pull docker/welcome-to-docker
出力結果は以下のようなものとなります。
Using default tag: latest latest: Pulling from docker/welcome-to-docker 579b34f0a95b: Download complete d11a451e6399: Download complete 1c2214f9937c: Download complete b42a2f288f4d: Download complete 54b19e12c655: Download complete 1fb28e078240: Download complete 94be7e780731: Download complete 89578ce72c35: Download complete Digest: sha256:eedaff45e3c78538087bdd9dc7afafac7e110061bbdd836af4104b10f10ab693 Status: Downloaded newer image for docker/welcome-to-docker:latest docker.io/docker/welcome-to-docker:latest
ダウンロードしたイメージレイヤーについての情報が一行ずつ示されています。 各レイヤーはファイルシステムの変更情報であり、イメージの機能性を表したものであることを思い出してください。
イメージについての理解
ダウンロード済みのイメージ一覧を見るには
docker image ls
コマンドを実行します。docker image ls
出力結果は以下のようなものとなります。
REPOSITORY TAG IMAGE ID CREATED SIZE docker/welcome-to-docker latest eedaff45e3c7 4 months ago 29.7MB
このコマンドにより、システム上において利用可能な Docker イメージの一覧が表示されます。
docker/welcome-to-docker
のトータルサイズはおよそ 29.7MB であることがわかります。イメージサイズ
ここに示されるイメージサイズは、イメージを伸長 (解凍) したサイズを示しており、レイヤーのダウンロードサイズではありません。
docker image history
コマンドを使ってイメージのレイヤーを一覧表示します。docker image history docker/welcome-to-docker
出力結果は以下のようなものとなります。
IMAGE CREATED CREATED BY SIZE COMMENT 648f93a1ba7d 4 months ago COPY /app/build /usr/share/nginx/html # buil… 1.6MB buildkit.dockerfile.v0 <missing> 5 months ago /bin/sh -c #(nop) CMD ["nginx" "-g" "daemon… 0B <missing> 5 months ago /bin/sh -c #(nop) STOPSIGNAL SIGQUIT 0B <missing> 5 months ago /bin/sh -c #(nop) EXPOSE 80 0B <missing> 5 months ago /bin/sh -c #(nop) ENTRYPOINT ["/docker-entr… 0B <missing> 5 months ago /bin/sh -c #(nop) COPY file:9e3b2b63db9f8fc7… 4.62kB <missing> 5 months ago /bin/sh -c #(nop) COPY file:57846632accc8975… 3.02kB <missing> 5 months ago /bin/sh -c #(nop) COPY file:3b1b9915b7dd898a… 298B <missing> 5 months ago /bin/sh -c #(nop) COPY file:caec368f5a54f70a… 2.12kB <missing> 5 months ago /bin/sh -c #(nop) COPY file:01e75c6dd0ce317d… 1.62kB <missing> 5 months ago /bin/sh -c set -x && addgroup -g 101 -S … 9.7MB <missing> 5 months ago /bin/sh -c #(nop) ENV PKG_RELEASE=1 0B <missing> 5 months ago /bin/sh -c #(nop) ENV NGINX_VERSION=1.25.3 0B <missing> 5 months ago /bin/sh -c #(nop) LABEL maintainer=NGINX Do… 0B <missing> 5 months ago /bin/sh -c #(nop) CMD ["/bin/sh"] 0B <missing> 5 months ago /bin/sh -c #(nop) ADD file:ff3112828967e8004… 7.66MB
この出力によって全レイヤーの情報、そのサイズ、またレイヤー生成時のコマンドを見ることができます。
コマンドのフル表示
上のコマンドに対して
--no-trunc
フラグをつけると、コマンドをフル表示にすることができます。 出力結果は表形式で行われているため、コマンドが長ければ、出力結果がその分だけわかりにくくなります。
このウォークスルーを通じて、Docker イメージの検索とプルを行いました。 Docker イメージのプルに加えて、Docker イメージのレイヤー内容についても学びました。
さらなる情報
以下に示す情報では、イメージに対する情報、検索方法、ビルド方法をより詳しく学ぶことができます。
次のステップ
イメージの基本について学んできました。 次はレジストリを通じてイメージを配布する方法について学びます。