「Dockerって何?」「コンテナ?仮想マシンと何が違うの?」
開発現場でよく聞くDocker(ドッカー)。求人票でも「Docker経験者歓迎」という記載をよく見かけますよね。
この記事では、Dockerの基本を身近な例えを使いながら、初心者にもわかりやすく解説します。
Dockerとは?一言でいうと「アプリケーションの引っ越しパック」
Dockerとは、アプリケーションとその実行環境を「コンテナ」という単位でまとめて管理できるプラットフォームです。
身近な例えで言うと、「引っ越しパック」のようなものです。
普通の引っ越しでは、家具や家電を一つずつ梱包し、新居に運んで設置しますよね。これが従来の環境構築です。「このソフトをインストールして、このバージョンで、この設定をして……」と、一つずつ手作業で行います。
一方、Dockerは「家具付き物件」をそのまま持ち運べるようなもの。アプリケーションと、それを動かすために必要なものがすべてパッケージされているので、どこでも同じ環境を再現できます。
Dockerが解決する問題
「自分のPCでは動くのに、本番サーバーでは動かない……」
こんな経験、ありませんか?これは、開発環境と本番環境で、OSやライブラリのバージョンが異なるために起こります。
Dockerを使えば、この問題を解決できます。
- 環境の統一:開発・テスト・本番で同じ環境を使える
- 環境構築の簡素化:コマンド一つで環境が立ち上がる
- チーム開発の効率化:「自分の環境では動く」問題を解消
- 軽量・高速:仮想マシンより少ないリソースで動作
コンテナと仮想マシンの違い
Dockerを理解するには、コンテナと仮想マシン(VM)の違いを知ることが重要です。
仮想マシン(VM)とは
仮想マシンは、1台の物理サーバーの上に、複数の「仮想的なコンピューター」を作る技術です。
┌─────────────────────────────────────────┐
│ 物理サーバー │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ VM1 │ │ VM2 │ │ VM3 │ │
│ │ ┌─────┐ │ │ ┌─────┐ │ │ ┌─────┐ │ │
│ │ │App │ │ │ │App │ │ │ │App │ │ │
│ │ ├─────┤ │ │ ├─────┤ │ │ ├─────┤ │ │
│ │ │ OS │ │ │ │ OS │ │ │ │ OS │ │ │
│ │ └─────┘ │ │ └─────┘ │ │ └─────┘ │ │
│ └─────────┘ └─────────┘ └─────────┘ │
│ ハイパーバイザー │
│ ホストOS │
└─────────────────────────────────────────┘
各VMにはそれぞれ独立したOSが必要です。これは安全ですが、リソースを多く消費します。
コンテナとは
コンテナは、ホストOSのカーネルを共有しながら、アプリケーションを隔離して実行する技術です。
┌─────────────────────────────────────────┐
│ 物理サーバー │
│ ┌───────┐ ┌───────┐ ┌───────┐ │
│ │Container│ │Container│ │Container│ │
│ │ ┌─────┐│ │ ┌─────┐│ │ ┌─────┐│ │
│ │ │App ││ │ │App ││ │ │App ││ │
│ │ └─────┘│ │ └─────┘│ │ └─────┘│ │
│ └───────┘ └───────┘ └───────┘ │
│ Docker Engine │
│ ホストOS │
└─────────────────────────────────────────┘
OSを共有するため、仮想マシンに比べて軽量・高速です。
比較表
| 項目 | 仮想マシン(VM) | コンテナ(Docker) |
|---|---|---|
| 起動時間 | 数分 | 数秒 |
| リソース消費 | 大きい(GB単位) | 小さい(MB単位) |
| OS | 各VMに独立したOS | ホストOSを共有 |
| 隔離レベル | 強い | 中程度 |
| 用途 | 異なるOSを動かしたい場合 | 同じOSでアプリを分離したい場合 |
Dockerの3つの基本概念
Dockerを使うために、3つの基本概念を押さえましょう。
1. Dockerイメージ
Dockerイメージは、コンテナを作成するための「設計図」です。
イメージには、アプリケーションを動かすために必要なすべてのもの(OS、ライブラリ、アプリケーションコード、設定ファイルなど)が含まれています。
イメージは読み取り専用で、変更されません。料理のレシピのようなものと考えてください。
2. コンテナ
コンテナは、イメージから作成される「実行環境」です。
イメージがレシピなら、コンテナは実際に作られた料理です。同じレシピ(イメージ)から、何皿でも料理(コンテナ)を作ることができます。
コンテナは起動・停止・削除ができ、それぞれが独立して動作します。
3. Dockerfile
Dockerfileは、イメージを作成するための「手順書」です。
テキストファイルに、どのようなイメージを作るかを記述します。
# Dockerfile の例
FROM python:3.11 # ベースイメージを指定
WORKDIR /app # 作業ディレクトリを設定
COPY requirements.txt . # ファイルをコピー
RUN pip install -r requirements.txt # コマンドを実行
COPY . . # アプリケーションをコピー
CMD ["python", "app.py"] # 起動コマンドを指定
3つの関係
Dockerfile → (build) → イメージ → (run) → コンテナ
「手順書」 「設計図」 「実行環境」
Docker Hubとは
Docker Hubは、Dockerイメージを保存・共有できるクラウドレジストリです。GitHubのDocker版と考えるとわかりやすいでしょう。
公式イメージ
Docker Hubには、多くの公式イメージが用意されています。
- nginx:Webサーバー
- mysql:データベース
- python:Python実行環境
- node:Node.js実行環境
- redis:インメモリデータストア
これらを使えば、ゼロから環境を構築する必要はありません。
# nginxの公式イメージを取得して起動
docker pull nginx
docker run -d -p 80:80 nginx
基本的なDockerコマンド
よく使うDockerコマンドを紹介します。
| コマンド | 説明 | 例 |
|---|---|---|
| docker pull | イメージを取得 | docker pull nginx |
| docker images | イメージ一覧を表示 | docker images |
| docker run | コンテナを作成・起動 | docker run -d nginx |
| docker ps | 実行中のコンテナ一覧 | docker ps |
| docker stop | コンテナを停止 | docker stop コンテナID |
| docker rm | コンテナを削除 | docker rm コンテナID |
| docker build | イメージを作成 | docker build -t myapp . |
| docker exec | コンテナ内でコマンド実行 | docker exec -it コンテナID bash |
よく使うオプション
- -d:バックグラウンドで実行(detached mode)
- -p:ポートを公開(例:-p 8080:80 はホストの8080をコンテナの80に接続)
- -v:ボリュームをマウント(ファイルの永続化)
- -it:対話モードで実行(ターミナルに接続)
- –name:コンテナに名前を付ける
Docker Composeとは
Docker Composeは、複数のコンテナをまとめて管理するためのツールです。
Webアプリケーションを作るとき、Webサーバー、データベース、キャッシュなど、複数のサービスが必要になることがあります。Docker Composeを使えば、これらを1つのファイルで定義し、1つのコマンドで起動できます。
docker-compose.ymlの例
version: '3.8'
services:
web:
build: .
ports:
- "3000:3000"
depends_on:
- db
environment:
- DATABASE_URL=mysql://user:password@db:3306/myapp
db:
image: mysql:8.0
environment:
- MYSQL_ROOT_PASSWORD=rootpassword
- MYSQL_DATABASE=myapp
- MYSQL_USER=user
- MYSQL_PASSWORD=password
volumes:
- db_data:/var/lib/mysql
volumes:
db_data:
Docker Composeのコマンド
| コマンド | 説明 |
|---|---|
| docker compose up | すべてのサービスを起動 |
| docker compose up -d | バックグラウンドで起動 |
| docker compose down | すべてのサービスを停止・削除 |
| docker compose logs | ログを表示 |
| docker compose ps | サービスの状態を確認 |
Dockerの実践的なユースケース
Dockerがどのような場面で使われているか、代表的なユースケースを紹介します。
1. 開発環境の統一
チームメンバー全員が同じ開発環境を使えます。「自分のPCでは動く」問題を解消し、オンボーディング時間を大幅に短縮できます。
# 新しいメンバーの環境構築
git clone プロジェクト
docker compose up
# これだけで開発環境が整う!
2. CI/CDパイプライン
GitHub ActionsやJenkinsなどのCI/CDツールと組み合わせて、テストやビルドを自動化できます。
3. マイクロサービス
サービスごとに独立したコンテナで動かすことで、マイクロサービスアーキテクチャを実現できます。各サービスを個別にデプロイ・スケールできます。
4. ローカルでの本番環境再現
本番環境と同じ構成をローカルで再現できるため、デバッグやテストがしやすくなります。
Docker Desktop
Docker Desktopは、WindowsやmacOSでDockerを使うためのアプリケーションです。
Docker Desktopの機能
- Docker Engine:コンテナの実行環境
- Docker Compose:複数コンテナの管理
- Kubernetes:ローカルでKubernetesを動かせる
- GUI:コンテナやイメージをビジュアルで管理
ライセンスについて
Docker Desktopは、以下の場合は無料で利用できます。
- 個人利用
- 小規模企業(従業員250人未満かつ年間収益1,000万ドル未満)
- 教育機関
- オープンソースプロジェクト
それ以外の企業では、有料のサブスクリプションが必要です。
2025年のDockerトピック
Dockerは日々進化しています。2025年の主なトピックを紹介します。
Docker Engine 29.x
2025年11月、Docker Engine 29.0がリリースされました。セキュリティ強化やパフォーマンス改善が行われています。
Docker Model Runner GA
2025年、Docker Model Runnerが一般提供(GA)となりました。ローカルでAIモデル(特にLLM)を簡単に管理・実行できる機能です。AI開発がより身近になりました。
隔週リリースサイクル
Docker Desktop 4.45.0から、月次リリースから隔週リリースに変更されました。新機能やセキュリティ更新がより早く提供されるようになっています。
Docker Bake GA
複雑なビルドを簡素化するDocker Bakeが一般提供となりました。複数のDockerfileを効率的に管理できます。
Dockerを学ぶ次のステップ
Dockerの基本を理解したら、以下のステップに進むことをおすすめします。
- Docker Desktopをインストールして、実際に触ってみる
- 公式チュートリアルで基本的な操作を学ぶ
- 自分のアプリケーションをDockerで動かしてみる
- Docker Composeで複数サービスを管理してみる
- CI/CDとの連携を学ぶ(GitHub Actionsなど)
- Kubernetesへの発展を検討する
まとめ
この記事で解説した内容をまとめます。
| 項目 | ポイント |
|---|---|
| Dockerとは | アプリケーションと環境をコンテナにまとめて管理するプラットフォーム |
| コンテナ vs VM | コンテナはOSを共有するため軽量・高速 |
| イメージ | コンテナの設計図(読み取り専用) |
| コンテナ | イメージから作成される実行環境 |
| Dockerfile | イメージを作成するための手順書 |
| Docker Hub | イメージを保存・共有できるクラウドレジストリ |
| Docker Compose | 複数コンテナをまとめて管理するツール |
Dockerは、現代の開発現場で必須のスキルです。「環境構築に時間がかかる」「チームで環境が統一できない」といった問題を解決してくれます。まずはDocker Desktopをインストールして、実際に触ってみましょう。
SKサービスでは未経験からのエンジニア転職をサポート
SKサービス株式会社では、完全未経験からエンジニアを目指す方を積極採用しています。
正社員として安定した環境で働きながら、さまざまなプロジェクトで実践経験を積むことができます。受託開発も手掛けており、スキルアップに応じてキャリアの幅を広げていける環境です。
「Dockerを使った開発現場で働きたい」「モダンな開発手法を身につけたい」という方、まずはお気軽にご相談ください。