Dockerとコンテナ技術 その2:コンテナイメージとは?

Dockerを学ぼうシリーズ第二弾となります。
今回はコンテナの高いポータビリティを実現するコンテナイメージとは何かをまとめていきたいと思います。
技術的なことや実践的な部分には触れず概念的な部分の説明が主になります。
実際に動かしたいんだよーという人は別のサイトへ行きましょう。

コンテナイメージとは

コンテナイメージとはコンテナを作る基となる基本的なアプリやソフトウェア、動作に必要なファイルシステム、実行コマンド、メタ情報を含んだ、コンテナの鋳型のようなものです。
一つのコンテナイメージを基にして作成したコンテナは同じ設定のコンテナとなるため、一つの物理マシンに複数の同じコンテナを作成することや、コンテナイメージを配布して複数人のそれぞれの環境に同じコンテナを構築することができます。
これがコンテナの高いポータビリティを実現している理由となっています。
コンテナイメージは利用したいコンテナによって様々な種類があり、DBサーバーのコンテナを利用するのであればDBサーバーのコンテナイメージ、Webサーバーのコンテナを利用するのであればWebサーバーのコンテナイメージを用意してホストOS上でイメージをもとに作成することで仮想環境を構築することができます。

レジストリ:コンテナの保管場所

レジストリとは

レジストリとはインターネット上でコンテナイメージを保管し共有できる場所のことで、DockerではDocker Hubと言う公式レジストリが用意されています。
コンテナイメージは自作することもできますが、基本的にレジストリ上から利用したいイメージを探し、そのまま、またはカスタマイズして利用するのが一般的です。

Docker Hubを見てみよう

Docker Hubを実際に見てみましょう。
こんなサイトに飛ぶと思います。

Dockerイメージを取得して利用するだけであればアカウントは必要ありませんが、自分のものをアップロードするのであればアカウントが必要です。
今回は少し覗くだけなのでこのまま進めます。

Dockerイメージを検索する

ページ上部中央の検索エリアに「apatch」や「postgres」などWebサービスで利用するミドルウェアやソフトウェアの名前を打ち込んでみてください。

画像のようにDockerイメージの候補がいくつか表示されます。
このように利用したいサービスのDockerイメージを探して取得し利用していきます。

Dockerイメージを見てみる

試しにpostgresのイメージを見てみましょう。
検索エリアに「postgres」と打ち込むと一番上に表示される「postgres」を選択します。
以下のような画面が表示されると思います。

Dockerイメージの各ページではそのDockerイメージの概要やコンテナの起動方法などが記述されています。
また、どのOSに対応しているのかなどもここで確認できるのでシステム要件に合わせてイメージを選択するようにしましょう。

Dockerイメージのタグ

Dockerイメージはバージョンごとに作成されており、それらのバージョンはタグで管理されています。
「postgres」のページの「Tags」タブを開いてみましょう。

「latest」や「bullseye」などタグ名が付けられており、対応しているOSなどの情報が載っています。
タグを指定しない場合は基本的にlatest(最新のもの)が取得されるので、バージョンによる差分をなくしたい場合はタグの指定もしっかりと行うようにしましょう。

Dockerイメージのプッシュとプル

Docker Hubのようなレジストリからコンテナイメージを取得することをプル(pull)といい、レジストリにコンテナイメージをアップロードすることをプッシュ(push)といいます。
レジストリは全ての人にパブリックに公開することも、特定の人やグループにのみプライベートに公開することもできます。
この辺りの用語はGitHubなどのバージョン管理システムで使うものと似ているので覚えやすいのではないでしょうか。
Dockerでは、イメージをレジストリからプルし自分用にカスタマイズしコンテナのビルドを行い、必要であればカスタマイズしたイメージをプッシュして共有するといった一連の手順を、大きなコンセプトとして掲げています。
今回の記事では、実際にプルなどの操作は行いませんが、一連の流れや各用語は抑えておきましょう。

まとめ

  • コンテナイメージとはコンテナの鋳型のようなもの
  • 一つのイメージから複数の同じ構成のコンテナを作成できる。
  • イメージを共有することで複数人で同じ構成のコンテナを作成できる。
  • これらの特徴がコンテナの高いポータビリティを実現している。
  • コンテナイメージをアップロードして共有できる場所をレジストリという。
  • DockerにはDocker Hubと言う公式のレジストリがある。
  • 基本的にイメージは一から作成せずにレジストリから必要なイメージを取得しカスタマイズして利用する。
  • レジストリからコンテナを取得することをプル(pull)といい、アップロードすることをプッシュ(push)という。

2回連続で説明的な記事になってしまいましたが、Dockerやコンテナ技術の概要の理解はだいぶ深まったと個人的には思っています。
次回以降は実際にDockerを触っていくフェーズに入っていく予定です。
ここまで読んでいただきありがとうございました。
それでは、また。