「Dockerってよく聞くけど何?」「仮想マシンとどう違うの?」「なぜエンジニアはみんなDockerを使うの?」この記事ではDockerの基本概念から実際の使いどころまで、初心者にもわかりやすく丁寧に解説します。
Dockerとは何か?
Dockerとは、アプリケーションをコンテナと呼ばれる軽量な実行環境にパッケージ化して動かす仕組みです。
一言で表すと「どの環境でも同じように動く箱を作る技術」です。
開発現場でよくある悩みとして、「自分のPCでは動くのに、本番サーバーに乗せたら動かない」という問題があります。原因はOSのバージョン違い、ライブラリのバージョン違い、設定ファイルの差異などさまざまです。Dockerはこの問題を根本から解決します。アプリに必要なOS・ライブラリ・設定ファイルをすべてまとめて「コンテナ」という箱に入れてしまうため、どの環境に持っていっても同じように動きます。
仮想マシン(VM)とコンテナの違い
Dockerを理解するうえで、従来の仮想マシン(VM)との違いを押さえておくことが重要です。
仮想マシン(VM)の仕組み
仮想マシンは、ホストOSの上にハイパーバイザー(VirtualBoxやVMwareなど)をインストールし、その上に完全なゲストOSを立ち上げます。ゲストOSはホストOSとは完全に独立しており、自分専用のカーネルを持ちます。
メリットとしては完全な環境分離ができる点ですが、デメリットとしてゲストOS分のリソース(CPU・メモリ・ディスク)を常に消費するため重く、起動も数分かかります。
コンテナ(Docker)の仕組み
Dockerのコンテナは、ホストOSのカーネルを共有しながら、プロセスやファイルシステムだけを分離します。ゲストOSを丸ごと立ち上げる必要がないため、起動は数秒で完了し、サイズも数十MB〜数百MBと軽量です。
| 比較項目 | 仮想マシン(VM) | コンテナ(Docker) |
|---|---|---|
| 起動時間 | 数分 | 数秒 |
| イメージサイズ | 数GB〜数十GB | 数十MB〜数百MB |
| OSカーネル | ゲストOSを含む | ホストOSを共有 |
| リソース消費 | 大きい | 小さい |
| 分離レベル | 完全分離 | プロセス・ファイル分離 |
| 主な用途 | 完全な環境分離が必要な場合 | アプリの実行環境分離 |
| 代表ツール | VirtualBox、VMware、Hyper-V | Docker、Podman |
Dockerの主要な構成要素
Dockerを使いこなすために、まず以下の4つの概念を理解しましょう。
① イメージ(Image)
コンテナの設計図(テンプレート)です。読み取り専用で、OSやアプリ・ライブラリの構成が記録されています。たとえば「Ubuntu 22.04 + Python 3.11 + Flaskがインストールされた環境」をイメージとして保存できます。
イメージは自分で作成することも、Docker Hubから公式のものをダウンロードして使うこともできます。
② コンテナ(Container)
イメージから起動した実際に動いているプロセスです。1つのイメージから複数のコンテナを起動できます。コンテナを停止・削除してもイメージは残るため、いつでも同じ環境を再現できます。
③ Dockerfile
イメージを作成するための手順書です。テキストファイルに「どのベースイメージを使うか」「どのコマンドを実行するか」「どのファイルをコピーするか」などを記述します。
# Dockerfileの例 FROM ubuntu:22.04 RUN apt-get update && apt-get install -y python3 python3-pip COPY app.py /app/app.py WORKDIR /app CMD ["python3", "app.py"]④ Docker Hub
Dockerイメージを公開・共有するためのクラウドレジストリです。GitHubのDocker版と思えばわかりやすいです。Ubuntu・Nginx・MySQL・Pythonなど公式イメージが無料で公開されており、
docker pullコマンド一発でダウンロードできます。⑤ Docker Compose
複数のコンテナをまとめて定義・起動するためのツールです。たとえば「WebサーバーコンテナとDBコンテナを同時に起動してネットワークでつなぐ」という構成をYAMLファイルに書いておき、
docker compose upコマンド一発で環境を再現できます。Dockerが使われる主な場面
① 開発環境の統一
チーム全員が同じDockerイメージを使うことで「自分のPCでは動くのに他の人のPCでは動かない」という問題をなくせます。新メンバーのオンボーディングも
docker compose up一発で完了します。② CI/CDパイプライン
GitHub ActionsなどのCI/CDツールと組み合わせることで、コードをプッシュしたら自動でビルド・テスト・デプロイが走る仕組みを構築できます。テスト環境・本番環境を同じイメージで動かせるため、環境差異によるバグを防げます。
③ マイクロサービスの運用
大規模なシステムを複数の小さなサービスに分割するマイクロサービスアーキテクチャでは、各サービスをコンテナとして独立させて運用するのが一般的です。KubernetesなどのコンテナオーケストレーションツールもDockerと組み合わせて使われます。
④ サーバーの効率化
1台のサーバーに複数のコンテナを立ち上げることで、リソースを効率的に使えます。VMのように各環境でゲストOSを動かす必要がないため、同じスペックのサーバーでより多くのアプリを動かせます。
Dockerのインストール方法(Ubuntu)
UbuntuへのDockerインストールは以下のコマンドで行います。
# 既存パッケージを更新 sudo apt-get update # 必要なパッケージをインストール sudo apt-get install -y ca-certificates curl gnupg # DockerのGPGキーを追加 sudo install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg # Dockerリポジトリを追加 echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null # Dockerをインストール sudo apt-get update sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin # バージョン確認 docker --versionsudoなしでdockerコマンドを使えるようにする
# 現在のユーザーをdockerグループに追加 sudo usermod -aG docker $USER # 一度ログアウトして再ログインすると反映される # 確認コマンド docker run hello-worldよく使うDockerコマンド一覧
コマンド 説明 docker pull <イメージ名>Docker Hubからイメージをダウンロード docker imagesローカルのイメージ一覧を表示 docker run <イメージ名>コンテナを起動 docker ps起動中のコンテナ一覧を表示 docker ps -a停止中も含む全コンテナを表示 docker stop <コンテナID>コンテナを停止 docker rm <コンテナID>コンテナを削除 docker rmi <イメージ名>イメージを削除 docker build -t <名前> .Dockerfileからイメージをビルド docker exec -it <ID> bash起動中のコンテナにシェルで入る まとめ
- Dockerはアプリをコンテナにパッケージ化してどの環境でも同じように動かす仕組み
- 仮想マシンより軽量・高速で開発効率が大幅に向上する
- イメージ・コンテナ・Dockerfile・Docker Hubの4概念を押さえるのが最初の一歩
- 開発環境の統一・CI/CD・マイクロサービスなど幅広い場面で活用されている
- UbuntuへのインストールはDockerの公式リポジトリから行うのが推奨
次の記事ではDockerをUbuntuに実際にインストールして、コンテナを起動するところまで手を動かしながら解説します。



コメント