StackShelf
Docker 第1回

Dockerとは?仮想マシンとの違いをわかりやすく解説【初心者向け】

Dockerはアプリと実行環境をコンテナにまとめ、どこでも同じように動かすためのツールです。VMとの違い、イメージ・コンテナの関係、現場での使われ方を、つまずきポイントも交えて解説します。

7分で読める
Dockerコンテナ仮想マシン初心者インフラDevOps

結論:Dockerはアプリと実行環境をセットで動かす「箱」

この記事の要点は次のとおりです。Dockerはアプリと依存ライブラリをコンテナという独立した箱に入れ、どのPC・サーバーでも同じように動かすためのツールです。仮想マシン(VM)と違いゲストOSを持たないので軽く、起動も数秒で済みます。「自分のPCでは動くのに本番で動かない」という環境差異を、再現可能な形で解消できます。

Dockerとは何か?

Docker(ドッカー)とは、アプリケーションをコンテナ(containerと呼ばれる独立した環境に封じ込めて実行するためのプラットフォームです。2013年にDotCloud社(現Docker社)が公開し、現在では世界中の開発現場で標準的に使われているツールです。

「docker 使い方」や「docker 初心者」で検索してこの記事にたどり着いた方は、Dockerが何となく便利そうだと感じているかもしれません。一言で言うと、Dockerは「アプリをどこでも同じように動かせる箱を作るツール」です。この「箱(コンテナ)」の中にアプリと必要なライブラリをまとめて入れることで、開発環境・本番環境・チームメンバーのPCを問わず、まったく同じ環境でアプリを動かせます。

# Dockerのバージョン確認(インストール後に試してみよう)
docker --version
# 出力例: Docker version 26.1.4, build 5650f9b

「環境差異」という開発現場の悩み

Dockerが生まれた背景には、ソフトウェア開発における長年の悩みがあります。それが「自分のPCでは動くのに、本番サーバーで動かない」という問題です。英語では "It works on my machine" 問題と呼ばれ、世界中の開発者が悩んできました。

原因は環境の違いです。開発者AのPCはNode.js 18、開発者BのPCはNode.js 20、本番サーバーはNode.js 16。OSもmacOS、Windows、Linuxとバラバラ。ライブラリのバージョンも微妙に違う…。こうした「環境の差異」が予期しないバグを生み出します。

Dockerはこの問題を根本から解決します。コンテナの中に「Node.js 18 + 必要なライブラリすべて」を封じ込めるので、誰がどのOSで実行しても完全に同じ環境でアプリが動きます。

コンテナとは何か?わかりやすく解説

コンテナを理解するには、「輸送用コンテナ」のアナロジーが役立ちます。船で荷物を運ぶとき、コンテナに荷物を詰めれば、船・トラック・鉄道とどんな乗り物に積み替えても中身を気にする必要はありません。ソフトウェアのコンテナも同じです。アプリと依存関係をひとまとめにした「箱」を作れば、どんなサーバーやクラウドでも動かせます。

技術的に言うと、コンテナはLinuxカーネルの名前空間(namespace)cgroupという機能を使って、プロセスを互いに隔離する仕組みです。コンテナはホストOSのカーネルを共有しますが、それぞれが独立したファイルシステム・ネットワーク・プロセス空間を持ちます。

# 実行中のコンテナ一覧を表示
docker ps

# 全てのコンテナ(停止中含む)を表示
docker ps -a

DockerとVMの違い:コンテナ vs 仮想マシン

「コンテナ」と似た概念に仮想マシン(VM: Virtual Machine)があります。VirtualBoxやVMwareで仮想のWindowsやLinuxを動かした経験がある方もいるでしょう。両者の最大の違いは「OSのレイヤー」にあります。

仮想マシンの仕組み:ホストOSの上にハイパーバイザー(仮想化ソフトウェア)が乗り、その上に仮想の「ゲストOS」が丸ごと起動します。VMはWindows上でLinuxを動かすといった完全な仮想化が可能ですが、ゲストOS自体が数GBのメモリを消費し、起動に1分以上かかることもあります。

コンテナの仕組み:ホストOSのカーネルを直接共有するため、ゲストOSを持ちません。その分、コンテナは数十MBほどで、起動は数秒以内です。一台のサーバーで数十〜数百のコンテナを同時に動かすことも現実的です。

まとめると:VMは「完全な隔離・重い・遅い」、コンテナは「軽量・高速・効率的」です。本番環境での大規模展開にはコンテナが圧倒的に向いています。

Dockerの主要コンポーネント

Dockerを使いこなすには、いくつかの重要な用語を理解する必要があります。

Dockerイメージ(Image):コンテナの「設計図」または「スナップショット」です。どのOSベース・どのソフトウェア・どの設定を使うかが記録された読み取り専用のテンプレートです。

Dockerコンテナ(Container):イメージを実際に起動した「実行中のインスタンス」です。同じイメージから複数のコンテナを起動できます。

Dockerfileイメージを作るための「レシピファイル」です。テキストファイルに命令を書くことで、自分だけのカスタムイメージを作れます。

Docker Hub:Dockerイメージを公開・共有できるレジストリサービスです。GitHubのDocker版と思えばわかりやすいです。公式イメージ(nginx、mysql、node等)が無料で利用できます。

# Docker Hubからnginxイメージを取得する
docker pull nginx

# ローカルのイメージ一覧を表示
docker images

Dockerが使われる場面

現代の開発現場では、Dockerは以下のような場面で活躍しています。

開発環境の統一:チーム全員が同じDockerイメージを使うことで、「自分のPCでは動く」問題を完全に排除できます。新メンバーのオンボーディングも docker-compose up 一発で完了します。

CI/CDパイプライン:GitHub ActionsやCircleCIなどのCI環境でDockerを使うことで、テスト・ビルド・デプロイを一貫した環境で自動化できます。

マイクロサービスアーキテクチャ:アプリを小さなサービスに分割し、それぞれをコンテナで動かすマイクロサービス構成は、現代のクラウドネイティブ開発の主流です。

Kubernetes(クバネティス)との連携:大規模なコンテナ管理にはKubernetesが使われますが、その基盤となるのもDockerイメージです。Dockerを習得することはKubernetesへの第一歩でもあります。

Dockerを学ぶと何が変わるか

Dockerを習得することで、エンジニアとしての世界は大きく広がります。インフラの知識がなくても、アプリのコンテナ化・デプロイが自分でできるようになります。クラウドサービス(AWS ECS、Google Cloud Run、Azure Container Apps等)もDockerイメージを前提としているものが多く、クラウド開発の幅が広がります。

また、「docker 使い方」を習得することで、他の開発者が公開しているOSSツールをDockerで簡単に試せるようになります。MySQLやRedisを自分のPCにインストールせずとも、docker run 一行で起動できる便利さは、一度体験すると手放せなくなります。

よくあるつまずきと失敗例

初心者が陥りやすいDockerの誤解

  • VMと同じだと思い込む:コンテナはOS丸ごとではなくアプリ単位の隔離です。Windows上でLinuxカーネルが必要な場合はWSL2など別の仕組みが絡みます。
  • イメージとコンテナを混同する:イメージは設計図、コンテナは実行中の実体です。docker run するたびに新しいコンテナが生まれます。
  • コンテナ内のデータが消えると驚く:コンテナを削除すると中身のファイルも消えます。DBデータなどは後の回で学ぶボリュームで永続化します。

用語が多く感じても、まずは「箱にアプリを入れて動かす」イメージだけ押さえれば十分です。次の記事で実際にインストールして手を動かしましょう。

まとめ:Dockerはアプリを「箱に入れる」技術

Dockerを一言で表すなら「アプリとその実行環境を丸ごとパッケージングする技術」です。仮想マシンより軽量・高速で、開発・テスト・本番環境の差異をなくし、現代のクラウドネイティブ開発に欠かせないツールです。docker 初心者の方も、このコースを通じて基礎から実践まで体系的に学んでいきましょう。

まとめ

Dockerはアプリと依存関係をコンテナに封じ込め、環境差異をなくす技術です。VMより軽量で起動も速く、開発・CI/CD・クラウドデプロイの基盤として広く使われています。まず概念を押さえ、次はPCにDockerを入れて hello-world を動かしてみましょう。

次にやること

次はDocker DesktopをWindows・Mac・Linuxにインストールし、実際にコマンドが使える状態にするまでの手順を丁寧に解説します。

よくある質問

Dockerは無料で使えますか?

個人利用・小規模開発であれば無料で使えます。Docker Desktop(GUI付きツール)は一定規模以上の企業利用は有料ですが、CLIのDockerエンジン自体はオープンソースで無料です。

DockerはWindowsでも使えますか?

はい、使えます。Windows 10/11のWSL2(Windows Subsystem for Linux)を使ってDocker Desktopをインストールすることで、Windows上でも快適にDockerを利用できます。

DockerとKubernetesの違いは何ですか?

DockerはコンテナをビルドしてPC上で動かすツールです。KubernetesはDockerコンテナを複数のサーバーで大規模に管理・運用するオーケストレーションツールです。まずDockerを習得してからKubernetesを学ぶのが一般的な順序です。

仮想マシンとコンテナはどちらが優れていますか?

用途によります。完全なOS隔離が必要な場合や異なるOSカーネルが必要な場合はVMが向いています。アプリの軽量・高速なデプロイには圧倒的にコンテナが優れています。多くのクラウドネイティブ用途ではコンテナが主流です。

つまずいたときはどうすればいいですか?

エラーメッセージをそのまま検索し、公式ドキュメントを当たってください。小さなステップに分けて再現・確認すると原因を特定しやすくなります。

次に読むべき記事

同カテゴリ「Docker」の記事

学習ルート

体系的に学びたい方はこちらから。

エラー解決コース →

あわせて読みたい