Dockerとは、アプリを動かすための環境をコンテナとしてまとめ、どこでも同じように動かしやすくするための仕組みです。
たとえば、ある人のPCでは動くのに、別の人のPCでは動かない、という問題があります。Node.jsやPython、データベース、ライブラリのバージョンが違うと、同じコードでも動きが変わることがあります。
Dockerを使うと、アプリに必要な実行環境をイメージとしてまとめ、コンテナとして起動できます。これにより、開発環境、テスト環境、本番環境の差を小さくしやすくなります。

Dockerは「軽い仮想マシン」と説明されることがありますが、厳密には仮想マシンそのものではありません。まずはコンテナを動かす仕組みとして理解しましょう。
この記事では、Dockerとは何か、コンテナ・イメージ・Dockerfileの関係、仮想マシンとの違い、開発現場で使う理由を初心者向けに解説します。
まず結論:Dockerはアプリの実行環境をまとめて扱う仕組み
Dockerを最初に理解するときは、次の流れで考えると分かりやすいです。
Dockerfileを書く
↓
Dockerイメージを作る
↓
イメージからコンテナを起動する
↓
アプリが決められた環境で動く
Docker公式ドキュメントでも、Dockerはコンテナと呼ばれる分離された環境でアプリケーションをパッケージ化し、実行できるプラットフォームとして説明されています。
初心者のうちは、Dockerを「環境ごとアプリを動かしやすくする道具」として理解すれば十分です。
Dockerが必要になる理由
開発では、コードだけでなく実行環境も重要です。アプリが動くには、プログラミング言語の実行環境、ライブラリ、設定ファイル、OS上のツール、データベースなどが関係します。
これらが人によって違うと、次のような問題が起きます。
Dockerは、このような環境差を小さくするために使われます。環境構築の手順をファイルとして残し、同じイメージから同じようなコンテナを起動できるようにします。
サーバーの基本がまだ曖昧な場合は、先にサーバーとは何か?を読むと、Dockerがどこで役立つかイメージしやすくなります。
コンテナとは何か
コンテナとは、アプリとその実行に必要なものを、他の環境から分けて動かすための単位です。
Docker公式の入門ドキュメントでは、コンテナはアプリの各部品ごとに分離されたプロセスとして説明されています。重要なのは、コンテナがホストOS全体を丸ごと複製するわけではない点です。
コンテナは、必要なファイルや設定を持ちながら、ホストや他のコンテナへの影響を小さくしてアプリを動かします。
| 用語 | ざっくりした意味 |
|---|---|
| コンテナ | アプリが実際に動いている分離された実行環境 |
| ホスト | Dockerを動かしているPCやサーバー |
| プロセス | OS上で動いているプログラムの実体 |
イメージとは何か
Dockerイメージとは、コンテナを起動するためのテンプレートです。Docker公式ドキュメントでも、イメージはコンテナを作るための読み取り専用テンプレートとして説明されています。
たとえば、Node.jsアプリを動かすなら、Node.jsの実行環境、アプリのコード、必要なライブラリ、起動コマンドなどをイメージにまとめます。
イメージとコンテナの違いは、次のように考えると分かりやすいです。
| 用語 | たとえ | Dockerでの意味 |
|---|---|---|
| イメージ | 型・設計図 | コンテナを作る元になるテンプレート |
| コンテナ | 実体・実行中のもの | イメージから起動された実行環境 |
この図では、Dockerfile、イメージ、コンテナの関係を左から右へ見てください。Dockerを理解するときは、まずこの3つを分けることが重要です。

Dockerfileとは何か
Dockerfileとは、Dockerイメージを作るための手順を書いたファイルです。
たとえば、次のような内容を書きます。
FROM node:22
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
CMD ["npm", "start"]
この例では、Node.jsのイメージを土台にして、作業ディレクトリを作り、依存ライブラリをインストールし、最後にアプリを起動しています。
Dockerfileがあると、環境構築の手順を口頭や手順書だけでなく、実行できる形で残せます。
Dockerでよく出てくるコマンドの流れ
Dockerを学び始めると、build、run、ps、stopなどのコマンドが出てきます。最初はすべてを暗記するより、何を操作しているのかを分けて考えることが大切です。
| コマンド | 何をするか | 見ている対象 |
|---|---|---|
docker build | Dockerfileからイメージを作る | イメージ |
docker run | イメージからコンテナを起動する | コンテナ |
docker ps | 動いているコンテナを確認する | コンテナ |
docker stop | コンテナを停止する | コンテナ |
ここでも中心になるのは、イメージとコンテナの違いです。buildはテンプレートを作る操作、runはそのテンプレートから実体を起動する操作、と見ると混乱しにくくなります。
また、実務では複数のコンテナをまとめて起動するためにDocker Composeを使うこともあります。ただし、初心者の最初の理解では、まず1つのDockerfileから1つのイメージを作り、1つのコンテナを起動する流れを押さえるのが先です。
仮想マシンとの違い
Dockerコンテナと仮想マシンは、どちらも環境を分けるために使われます。ただし仕組みは違います。
| 観点 | Dockerコンテナ | 仮想マシン |
|---|---|---|
| OS | ホストOSのカーネルを共有する | ゲストOSを持つ |
| 起動 | 比較的速い | コンテナより重くなりやすい |
| 分離 | プロセス単位の分離が中心 | OS単位で分離する |
| 用途 | アプリ実行環境の統一に向く | OSごとの検証や強い分離に向く |
Docker公式ドキュメントでも、仮想マシンはカーネルやドライバを含むOS全体を持つ一方、コンテナは必要なファイルを持つ分離されたプロセスとして説明されています。
そのため、Dockerは仮想マシンより軽く扱えることが多いですが、すべての用途で仮想マシンの代わりになるわけではありません。
Dockerを使うメリット
Dockerを使う主なメリットは次の通りです。
特にCI/CDでは、テストやビルドを毎回同じ環境で実行しやすくなります。CI/CDの基本は、GitHub Actionsとは?やビルドとは?と一緒に見ると理解がつながります。
Dockerを使うときの注意点
Dockerは便利ですが、使えば自動的にすべてが解決するわけではありません。
| 注意点 | 理由 |
|---|---|
| 本番運用には設計が必要 | ログ、監視、バックアップ、ネットワークを考える必要がある |
| イメージが大きくなりすぎることがある | 不要なファイルを含めると配布や起動が重くなる |
| セキュリティ更新が必要 | 土台となるイメージやライブラリの脆弱性に注意する |
| 永続データの扱いが必要 | コンテナを消すと中の変更も消えることがある |
初心者のうちは、まずローカル開発環境で小さく使い、イメージとコンテナの違いを実際に確認するのがおすすめです。
関連して読みたい記事
まとめ
Dockerは、アプリを動かすための環境をコンテナとしてまとめ、どこでも同じように動かしやすくするための仕組みです。
最初から本番運用まで理解する必要はありません。まずは、Dockerfile、イメージ、コンテナの3つを分けて考えるところから始めましょう。
