イメージとは?

説明

コンテナー を見てきましたが、これは独立したプロセスのことでした。 ではどこからファイルなり設定なりを取得しているのでしょう? どうやったらこの環境を共有できるようになるのでしょう?

これこそがコンテナーイメージの出番です! コンテナーイメージとは標準化されたパッケージのことであり、コンテナー実行のために必要となるファイル、実行バイナリー、設定をすべて含んだもののことです。

PostgreSQL イメージについて言うと、このイメージにはデータベースバイナリー、設定ファイル、依存パッケージが含まれています。 Python ウェブアプリの場合であれば、Python ランタイム、アプリのコード、その依存パッケージということになるでしょう。

イメージには二つの大きな原則があります。

  1. イメージは不変のものです。 一度イメージを生成すると、それを修正することはできません。 イメージに対してできることは、新たなイメージを作るか、あるいはイメージの最上部に変更内容を加えることだけです。

  2. コンテナーイメージはレイヤーから構成されます。 各レイヤーはファイルシステムに対して加えられた、ファイルの追加、削除、修正の情報によって表現されます。

この原則に従って、既存のイメージは拡張したり追加したりすることができます。 たとえば 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 のオープンソースプログラムを通じたオープンソースプロジェクトが公開管理するイメージ。

たとえば RedisMemcached は、即座に利用できる人気の Docker 公式イメージです。 このイメージをダウンロードすれば、ほんの数秒でそのサービスを起動することができます。 また Node.js のようなベースイメージもあります。 これをベースとして利用すれば、独自のファイルや設定を加えていくことができます。

ためしてみよう


このチュートリアルにおいては Docker Desktop の GUI を用いて、コンテナーイメージの検索とプルの方法について学びます。

イメージ検索とダウンロード

  1. Docker Desktop Desktop を開いて、左側のナビゲーションメニューにある Images (イメージ) 画面を選びます。

    Docker Desktop Dashboard のスクリーンショット、左サイドバーからのイメージ画面表示
  2. Search images to run (実行イメージの検索) ボタンをクリックします。 ボタンが見つからない場合は、画面上段にある global search bar (グローバル検索バー) をクリックしてください。

    Docker Desktop Dashboard のスクリーンショット、検索欄
  3. Search (検索) 欄に "welcome-to-docker" を入力します。 検索が行われたら docker/welcome-to-docker イメージを選択します。

    Docker Desktop Dashboard のスクリーンショット、検索結果に docker/welcome-to-docker イメージ
  4. Pull (プル) をクリックしてイメージをダウンロードします。

イメージについての理解

イメージをダウンロードしたら、GUI あるいは CUI を通じてイメージについての詳細を確認していきます。

  1. Docker Desktop Dashboard の Images (イメージ) 画面を選びます。

  2. docker/welcome-to-docker イメージをクリックして、このイメージについての詳細ページを開きます。

    Docker Desktop Dashboard のスクリーンショット、矢印先の docker/welcome-to-docker イメージを使ったイメージ確認
  3. イメージ詳細ページが示す情報は、イメージのレイヤー、イメージにインストールされているパッケージやライブラリ、また検出されたぜい弱性といったものです。

    イメージ詳細画面のスクリーンショット、docker/welcome-to-docker イメージ

CLI を使って Docker イメージの検索とプルを行うには以下の手順に従います。 これによりイメージの各レイヤーを確認することができます。

イメージの検索とダウンロード

  1. 端末を開き、イメージを検索する 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 において利用可能な関連イメージの情報が示されています。

  2. 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
    

    ダウンロードしたイメージレイヤーについての情報が一行ずつ示されています。 各レイヤーはファイルシステムの変更情報であり、イメージの機能性を表したものであることを思い出してください。

イメージについての理解

  1. ダウンロード済みのイメージ一覧を見るには 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 であることがわかります。

    イメージサイズ

    ここに示されるイメージサイズは、イメージを伸長 (解凍) したサイズを示しており、レイヤーのダウンロードサイズではありません。

  2. 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 イメージのレイヤー内容についても学びました。

さらなる情報

以下に示す情報では、イメージに対する情報、検索方法、ビルド方法をより詳しく学ぶことができます。

次のステップ

イメージの基本について学んできました。 次はレジストリを通じてイメージを配布する方法について学びます。