ITや趣味など気軽に投稿しています。

【Docker】コンテナとは?から理解するDocker

IT業界で働いていたり、エンジニアを目指す学生であれば、Dockerというワードは一度は聞いたことがあるのではないでしょうか。

近年はかなりポピュラーになっている一方、馴染みのない方には当然ながら取りつきにくいテーマであるようにも感じます。

今回はDockerとはどういったもので、どういったことに使えるのかというところを紹介していきます。

初心者でもわかるように解説するよう心掛けるよテック君。

期待してますよ。

Dockerとは

一般的に認知されているDockerとは、Docker社が開発・提供している、コンテナ型の仮想環境を作成・配布・実行するためのプラットフォームを指します。

仮想化といえば仮想マシンが浮かびますが、仮想マシンとコンテナの違いは何でしょうか。

仮想マシン vs コンテナ

両者の根本的な違いは、仮想環境構築のために「ゲストOS」が必須かどうかといったところにあります。

仮想マシン構築のためには、ハードウェア上のホストOSをベースに、ハイパーバイザと呼ばれる仮想化ソフトウェアを動作させ、その上にゲストOSが必要となります。そして、ゲストOSの上で初めて仮想環境でアプリケーションが動作します。

仮想マシンとコンテナの違い

コンテナはあくまでホストマシンのOSカーネルを利用し、アプリなどを隔離して動作させることで、あたかも別のマシン上で動いているかのように見せています。

ホストマシンのOSカーネル上で動作している点、仮想マシンよりも処理が軽量化され、起動や停止もより高速です。

Dockerの特徴

DockerはInfrastructure as Code (IaC)という手法が採用されています。これはサーバーやネットワーク機器などのインフラ構築をコードで記述し、自動化する手法です。

IaCの形式によって、以下のようなメリットが得られます。

  • コードを共有することで、どこでも同じ環境を作ることができる
  • 作成した環境を容易に配布できる
  • スクラップ&ビルドが容易
  • 構築コストの削減

コードを共有することで、どこでも同じ環境を作ることができる

Dockerを用いることで、インフラ構成の再現性が格段に高まります。Windowsでは動いていたけど、Linuxで動かなくなったといった場合や、Ubuntu22.04では動いていたが、24.04で動かなくなったといった事象も、Dockerを用いることで解消できます。

また、複数の開発メンバーがいるプロジェクトで、開発環境を、各種バージョンを揃えて構築しなければならない場合、Dockerであればコードファイルを共有することで簡単に構築することができます。

人の加入離脱が多い案件であっても、構築の手間がかからないのは大きなメリットです。

作成した環境を容易に配布できる

こちらも上記と同様の理由となりますが、一度作成した環境はコードとして管理されるため、配布が非常に容易です。

スクラップ&ビルドが容易

Dockerでは、失敗すればコンテナごと破棄してしまい、新たな環境を構築するといった運用ができます。環境の設定ミスで後々取り返しのつかないことに、、といったトラブルを回避することもできます。

構築コストの削減

上記の理由から、構築にかかる工数を削減することができ、結果的にコストダウンにつながります。

メリットだらけじゃないですか。すぐ使いたいですね。

初期の学習コストはかかるが、一度習得してしまえばその後はこれらの恩恵を受けることができる。
では、Dockerは具体的にどのような使われ方をしているのか見てみよう。

Dockerの用途

Dockerは、以下のような場面で活用することができます。

  • 本番環境へのデプロイ
  • 開発環境構築・共有
  • テスト環境構築
  • データベースのバックアップ

特に本番環境でのコンテナ利用は、複数のマイクロサービスをコンテナごとに構築し、置き換えを容易にするような事例がみられます。

また、システム構成のスケーリングを目的とした利用も可能です。アクセス負荷が高まったサービスを、コンテナで冗長化することで負荷分散するといった事例もみられます。

つまり、開発~本番稼働まで幅広い工程で利用できるのがDockerの利点だな。

まとめ

コンテナは軽量かつ再配布が容易な仮想環境構築・実行プラットフォームです。コンテナ技術を必須としている企業や職種もあるので、これらの知識は知っておいて損はないと思います。

次回はもう少しテクニカルな部分を説明する。具体的には、Dockerイメージやコンテナの関係性などだな。

承知しました!
ありがとうございました~~♪