Dockerの概要をやさしく解説

はじめに

皆さんは「Docker」について聞いたことはあるでしょうか。
本記事では、Docker初学者向けに概要を解説します。

概要

Dockerとは、Docker社が提供するコンテナ型仮想環境用プラットフォーム です。アプリケーションを必要な環境ごとにコンテナという小さな箱にまとめて実行できます。
コンテナにはアプリを動かすためのライブラリや設定など、必要な環境が一式含まれています。

Dockerはコンテナ技術(仮想化技術の一種)を使っており、コンテナとは 軽量で隔離された実行環境 です。
仮想マシンよりも軽く、起動も速いのが特徴です。

なお、DockerはLinuxカーネル機能を使います。
macOSやWindowsを使っている方は「Docker Desktop 」といったDockerを使うために必要なツールをインストールする必要があります。

本記事について理解しやすくするため、用語の概要を一部ご紹介します。

  • Dockerイメージ
    コンテナのひな形にあたる動作環境用テンプレートであり、これを使ってコンテナを作成します。
  • Dockerfile
    いわばDockerイメージを作るための設計図です。
    このテキストファイルにインフラ構成情報を記載し、それをもとにDockerイメージが作られます。
  • Docker Compose
    複数のコンテナをまとめて管理するツールです。
    docker-compose.ymlというファイルにコンテナの構成情報を定義し、コンテナの起動・停止といった管理が一括で行えます。

Dockerを使うメリット

Dockerを使ってみて、実際に感じたメリットについて触れていきます。

①高い可搬性

個人的に最も魅力を感じた点は、可搬性(どの環境でも同じように動くこと)です。

皆さんは現場で作業する際、ローカル環境構築に手間取った経験はあるでしょうか。
Docker イメージや docker-compose.yml を用意すれば、コマンド一つで同じ環境を再現できます。

個人用AWSアカウントでEC2にDockerをインストール後、
Dockerfileやdocker-compose.ymlを用いてローカルと同じ環境をクラウド上に簡単に再現できたため「これは便利だ」と感じました。

また経験上、複数のコンテナを起動する場合はdocker-compose.ymlを使って一括で実行することが多かったです。
コンテナが複数あると一つずつ立ち上げるのは手間なので、一括で実行できるのは楽です。

②柔軟な分離性

各コンテナは独立して起動されるため例えば

  • コンテナAはPython3.10
  • コンテナBはPython3.12

のように「プログラミング言語の別バージョン」をそれぞれ作成できます。

ローカル環境で同じことをすると、バージョン切り替えやインストールが必要になりますがそういった手間を省けます。

ローカル環境に多くのソフトをインストールすると、別のシステムを動かす際に「自分の環境だけ動かない」といったトラブルが起きがちです。
そういったリスクを減らせるのは、「環境構築の安定性」の観点で利点といえます。

③優れた軽量性

コンテナ以外にも仮想化技術があり、図にすると下記となります。


コンテナ以外の仮想化技術だと各仮想化環境ごとにゲストOSを動かすためにオーバーヘッド(※)が大きくなり、処理が遅い傾向があります。
※仮想化を行うことで発生する余分な処理負荷や時間

一方で、コンテナ仮想化はホストOSを共有する形で実行されるため、ホスト型やハイパーバイザー型より軽量で動くという仕組みです。

Dockerを使うデメリット

ではデメリットはどういったものがあるでしょうか。

①学習コストがかかる

Dockerに限った話ではないですが、学習コストがかかります。
例えば

  • Dockerコマンド
  • Docker Composeの書き方
  • Dockerfileの構成

といった知識がないとDockerを有効活用できません。
仮想化技術に触れたことは無い方は、まずは仮想化について把握しないとイメージしづらい部分が多いでしょう。

②コンテナはホストOSのカーネルを利用する

Docker Desktopを使って他の作業者と同じ設定に揃えようとした際、うまくいかずに苦労しました。
調べてみると原因は自分だけWindows 10 Homeを使っていたためで、Windows 10 Proを使う他のメンバーと同じ動作になりませんでした。
Hyper-Vが有効化されず、調べたのですが解決策が見つからず最終的にはWindows 10 Proへ切り替えることになりました。

コンテナはホストOSのカーネルを利用する形で起動するため、OSが異なると設定や挙動などに差異が出る可能性があるので要注意です。

③Dockerを利用した運用設計の検討

Dockerを導入するなら「どう運用していくか」の検討も行う必要があります。

AWSにサーバ構築するケースを考えてみます。
例えば

  • EC2上にDocker構築
  • ECS(コンテナの起動タイプはFargate、ECS on EC2、ECS Anywhereの3つ)

といった選択肢が考えられますが、料金体系・可用性・カスタイマイズ性といった要素を考慮して「どのサービス構成にするのがベストか」の検討が必要です。

おわりに

いかがでしたでしょうか。
本記事が皆さんがコンテナや Docker に触れる際の参考になれば幸いです。

興味がありましたら、実際にDockerを使ってアプリを動かしてみてください。

参考資料