1. Dockerとは?
仮想マシンとの違い
Dockerは、アプリケーションとその依存関係をひとまとめにして、どこでも同じように動作させることができるコンテナ型の仮想化技術です。従来の仮想マシン(VM)はOSごと仮想化するため、動作が重くなりがちですが、DockerはホストOS上で直接動作する軽量なコンテナであるため、起動が速く、リソースの消費も少ないのが特徴です。
コンテナの仕組み
コンテナとは、アプリケーション本体と必要なライブラリ、設定ファイルなどをパッケージ化したもので、他の環境に依存せずに実行できます。ホストOSのカーネルを共有することで、複数のコンテナを同時に実行しても効率的にリソースを活用できます。
2. Dockerを使うメリット
環境構築が簡単
Dockerでは、必要なアプリケーションやミドルウェアをまとめたイメージを作成し、すぐに同じ環境を構築できます。手動でのインストール作業が不要になります。
チーム開発に強い
Dockerイメージを共有することで、チーム全員が同じ開発環境を使うことができます。環境の違いによる「動かない」問題を防げます。
CI/CDとの相性が良い
Dockerは継続的インテグレーションやデプロイ(CI/CD)と非常に相性がよく、自動テストや本番反映をスムーズに行えます。
3. Dockerの基本用語
イメージとコンテナ
- イメージ:アプリケーションの実行環境をまとめた設計図。
- コンテナ:イメージを元に実行されるインスタンス(実体)。
Dockerfileとは?
Dockerfileは、イメージを構築するための設計図となるファイルです。インストール手順やコピーするファイルなどを記述します。
Docker Hubについて
Docker Hubは、Dockerイメージの共有・管理ができるクラウドサービスです。既存の人気イメージ(nginx, mysqlなど)も多数公開されています。
4. Dockerの始め方
インストール手順(Windows/Mac)
- Docker公式サイトからインストーラーをダウンロード
- ダウンロードしたファイルを実行してインストール
- 再起動後、ターミナルまたはPowerShellで
docker --versionを実行して確認
最初のコンテナ実行(Hello world)
docker run hello-world上記コマンドでDockerが正しく動作しているか確認できます。
5. よく使うDockerコマンド一覧
docker ps:起動中のコンテナ一覧を表示docker images:ローカルにあるイメージ一覧を表示docker run:イメージからコンテナを起動docker build:Dockerfileからイメージを作成docker exec:起動中のコンテナ内でコマンドを実行docker stop/docker start:コンテナの停止・再起動
6. 開発環境の例:PHP+MySQL+phpMyAdminをDockerで構築
version: '3'
services:
web:
image: php:8.1-apache
ports:
- "8080:80"
volumes:
- ./src:/var/www/html
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: rootpass
MYSQL_DATABASE: sample_db
phpmyadmin:
image: phpmyadmin/phpmyadmin
ports:
- "8081:80"
environment:
PMA_HOST: dbこの構成を docker-compose.yml として保存し、docker-compose up を実行すれば、ローカルにPHPアプリ開発環境が即座に構築されます。
7. トラブル時の対処法
docker buildでエラーが出た場合:Dockerfileの文法ミスを確認- コンテナが起動しない:ログ出力
docker logs [コンテナ名]を確認 - ポートが競合している:他のサービスで使用中の可能性
- ネットワークが繋がらない:
docker network lsとdocker network inspectで確認
Docker Composeで複数コンテナを管理する
Docker Composeとは、複数のDockerコンテナをまとめて定義・起動するためのツールです。docker-compose.yml(またはcompose.yml)ファイルに構成を記述し、docker compose upコマンド一つで全コンテナを起動できます。
Docker Composeの基本コマンド
| コマンド | 説明 |
|---|---|
| docker compose up | 全コンテナを起動(-dでバックグラウンド) |
| docker compose down | 全コンテナを停止・削除 |
| docker compose logs | 全コンテナのログを表示 |
| docker compose ps | 起動中のコンテナ一覧 |
| docker compose exec | 起動中のコンテナ内でコマンド実行 |
| docker compose build | Dockerfileからイメージを再ビルド |
Dockerと仮想マシン(VM)の違い
Dockerと仮想マシンはどちらもアプリケーションの実行環境を分離する技術ですが、仕組みが根本的に異なります。
| 比較項目 | Docker(コンテナ) | 仮想マシン(VM) |
|---|---|---|
| 起動速度 | 数秒 | 数分 |
| リソース消費 | 軽量(数十MB〜) | 重い(数GB〜) |
| OS | ホストOSのカーネルを共有 | ゲストOSが個別に起動 |
| 分離レベル | プロセスレベル | ハードウェアレベル |
| ポータビリティ | イメージで簡単に移動 | VMファイルが大きく移動コスト高 |
| 代表的なツール | Docker, Podman | VirtualBox, VMware, Hyper-V |
よくある質問(FAQ)
Q. DockerはWindowsでも使えますか?
Docker Desktopをインストールすれば、Windows 10/11(WSL2対応)で利用できます。WSL2(Windows Subsystem for Linux 2)がバックエンドとして動作するため、Linuxコンテナをそのまま実行可能です。
Q. Docker Desktopは無料ですか?
個人利用や小規模チーム(従業員250名未満かつ年間売上1000万ドル未満)は無料で利用できます。それ以上の規模の企業では有料のサブスクリプションが必要です。
Q. DockerとKubernetesの違いは何ですか?
Dockerは個々のコンテナを作成・実行するためのツールです。Kubernetes(K8s)は、多数のDockerコンテナを複数サーバーにまたがって自動管理(オーケストレーション)するためのプラットフォームです。個人開発やチーム開発ではDockerとDocker Composeで十分なケースが多く、大規模運用でKubernetesが選択されます。
Q. Dockerのコンテナを停止するとデータは消えますか?
コンテナを停止しただけではデータは消えませんが、コンテナを削除(docker rm)するとコンテナ内のデータは失われます。永続化が必要なデータはvolumesを使ってホスト側にマウントしてください。
Q. DockerでWordPressの開発環境は作れますか?
docker-compose.ymlにwordpress公式イメージとmysqlイメージを定義するだけで、数分でWordPressのローカル開発環境が構築できます。テーマやプラグインの開発に最適で、環境の再現性も高いため、チーム開発にも向いています。
8. まとめ
Dockerは、環境構築の手間を削減し、開発効率を大幅に向上させるツールです。初心者でも基本コマンドと構成ファイルの書き方を理解すれば、すぐにプロジェクトに活用できます。この記事をきっかけに、ぜひ実際に手を動かしてDockerの便利さを体感してみてください。
