このセクションでは、 Docker を使ったコンテナ技術の基礎から実践までを解説します。 開発環境の構築、アプリケーションのコンテナ化、Docker Composeによる複数コンテナの管理まで、実際に手を動かしながら学べる内容です。
Docker入門ガイド
このセクションについて
私は普段、以下の環境でDockerを使用しています。
- 開発環境: M4 Mac mini上のDocker Desktopで開発用コンテナを運用
- 本番環境: AlmaLinux 10サーバー上でDocker Engineを使用
- CI/CD: GitHub ActionsでDockerイメージをビルド・デプロイ
このセクションでは、これらの経験をもとに、Dockerの基礎から実践的な使い方まで解説します。
Dockerとは
Dockerは、アプリケーションとその依存関係を「コンテナ」という単位でパッケージ化し、どの環境でも同じように動かせる技術です。
Dockerでできること
- 環境の統一: 「自分のPCでは動くのに…」を解消
- 素早いセットアップ: 開発環境を数分で構築
- 軽量な仮想化: VMより少ないリソースで動作
- 再現性: 同じ環境を何度でも作成可能
- スケーラビリティ: 本番環境での水平スケールが容易
具体的なユースケース
| ユースケース | 説明 |
|---|---|
| 開発環境の構築 | Node.js、Python、PHPなどの環境を即座に用意 |
| データベースの起動 | MySQL、PostgreSQL、MongoDBを手軽に起動 |
| CIでのテスト | GitHub ActionsなどでテストをDocker内で実行 |
| 本番デプロイ | コンテナイメージをそのまま本番環境にデプロイ |
| マイクロサービス | 複数のサービスを個別のコンテナで管理 |
Dockerと仮想マシン(VM)の違い
Dockerを理解するには、従来の仮想マシン(VM)との違いを知ることが重要です。
| 観点 | Docker(コンテナ) | 仮想マシン(VM) |
|---|---|---|
| 起動時間 | 数秒 | 数十秒〜数分 |
| リソース消費 | 軽量(MB単位) | 重い(GB単位) |
| 分離レベル | カーネル共有 | 完全分離 |
| OS | ホストOSのカーネルを共有 | 個別にOSが必要 |
| 用途 | アプリ実行、開発環境 | OS検証、GUI環境 |
図解:アーキテクチャの違い
作成予定
Dockerの基本用語
Dockerを使う上で知っておくべき基本用語です。
| 用語 | 説明 |
|---|---|
| イメージ(Image) | コンテナの元となるテンプレート。読み取り専用 |
| コンテナ(Container) | イメージから作成された実行環境 |
| Dockerfile | イメージを作成するための設計図 |
| Docker Hub | イメージを公開・共有するレジストリ |
| Docker Compose | 複数コンテナを定義・管理するツール |
| ボリューム(Volume) | コンテナのデータを永続化する仕組み |
イメージとコンテナの関係
【イメージ】 → 【コンテナ】(設計図・テンプレート) (実際に動く環境)---nginx:latest → Webサーバーコンテナmysql:8.0 → データベースコンテナpython:3.12 → Python実行環境コンテナイメージは「クラス」、コンテナは「インスタンス」と考えるとわかりやすいです。
環境別インストール方法
Mac(Docker Desktop)
Apple Silicon(M1/M2/M3/M4)に対応した記事を執筆予定。
Linux(Docker Engine)
サーバー環境ではDocker Engineを直接インストールします。
| ディストリビューション | インストール手順 |
|---|---|
| AlmaLinux 10 | 手順 |
| Ubuntu 24.04 | 手順 |
Windows(Docker Desktop + WSL2)
WSL2と組み合わせて使用する記事を執筆予定。
Dockerの基本操作
よく使うコマンド一覧
| コマンド | 説明 | 例 |
|---|---|---|
docker run | コンテナを作成・起動 | docker run -d nginx |
docker ps | 実行中のコンテナ一覧 | docker ps -a |
docker stop | コンテナを停止 | docker stop コンテナID |
docker rm | コンテナを削除 | docker rm コンテナID |
docker images | イメージ一覧 | docker images |
docker pull | イメージをダウンロード | docker pull nginx |
docker build | Dockerfileからイメージ作成 | docker build -t myapp . |
docker logs | コンテナのログを表示 | docker logs コンテナID |
docker exec | コンテナ内でコマンド実行 | docker exec -it コンテナID bash |
実際に試してみる:Nginxを起動
最も簡単な例として、Webサーバー(Nginx)を起動してみましょう。
# Nginxコンテナを起動(バックグラウンド実行)docker run -d -p 8080:80 --name my-nginx nginx
# ブラウザで http://localhost:8080 にアクセス| オプション | 意味 |
|---|---|
-d | バックグラウンドで実行(デタッチモード) |
-p 8080:80 | ホストの8080番ポートをコンテナの80番に転送 |
--name my-nginx | コンテナに名前を付ける |
コンテナの停止・削除
# コンテナを停止docker stop my-nginx
# コンテナを削除docker rm my-nginxDocker Compose入門
複数のコンテナを連携させる場合は、Docker Composeを使います。
Docker Composeとは
compose.ymlというファイルに複数のコンテナの設定を記述し、一括で起動・停止できるツールです。
例:WordPressとMySQLの構成
services: wordpress: image: wordpress:latest ports: - "8080:80" environment: WORDPRESS_DB_HOST: db WORDPRESS_DB_USER: wordpress WORDPRESS_DB_PASSWORD: wordpress WORDPRESS_DB_NAME: wordpress depends_on: - db
db: image: mysql:8.0 environment: MYSQL_DATABASE: wordpress MYSQL_USER: wordpress MYSQL_PASSWORD: wordpress MYSQL_ROOT_PASSWORD: rootpassword volumes: - db_data:/var/lib/mysql
volumes: db_data:起動・停止コマンド
# 起動(バックグラウンド)docker compose up -d
# 停止docker compose down
# ログを確認docker compose logs -fコンテンツ一覧
基礎知識
執筆予定
インストール
実践
執筆予定
筆者のおすすめ構成
実際に使ってみた経験から、以下の構成をおすすめします。
ローカル開発環境
Docker Desktopを使うのが最も手軽です。
- GUIで管理できる
- Docker Composeが標準で使える
- Kubernetesも有効化できる(オプション)
本番サーバー
Docker Engine + Docker Composeの構成がシンプルでおすすめです。
- Docker Desktopは不要(GUIがないため)
- systemdでDockerサービスを管理
- 必要に応じてDocker SwarmやKubernetesに移行
学習目的
まずは以下の順序で学ぶことをおすすめします。
- Docker基本操作:
docker run、docker psなどを習得 - Dockerfile: 自分でイメージを作成
- Docker Compose: 複数コンテナの連携
- ネットワーク・ボリューム: データの永続化と通信
よくある質問(FAQ)
Q. Dockerは無料で使えますか?
Docker Engine(CLI)は完全に無料です。
Docker Desktopは以下の条件で無料です。
- 個人利用
- 小規模企業(従業員250人未満、年間売上1,000万ドル未満)
- 教育機関、オープンソースプロジェクト
大企業での商用利用は有料サブスクリプションが必要です。
Q. DockerとPodmanの違いは?
| 観点 | Docker | Podman |
|---|---|---|
| デーモン | 必要(dockerd) | 不要(デーモンレス) |
| ルート権限 | 通常は必要 | ルートレスが標準 |
| 互換性 | - | Dockerコマンドと互換 |
| 提供元 | Docker社 | Red Hat |
PodmanはDockerの代替として使えますが、エコシステムはDockerの方が充実しています。
Q. Docker DesktopとDocker Engineの違いは?
| 項目 | Docker Desktop | Docker Engine |
|---|---|---|
| GUI | あり | なし |
| 対応OS | Mac、Windows、Linux | Linuxのみ |
| 用途 | 開発環境 | サーバー、本番環境 |
| 追加機能 | Kubernetes、拡張機能 | 最小限 |
Q. コンテナ内のデータはどうなりますか?
コンテナを削除すると、コンテナ内のデータも消えます。データを永続化するにはボリュームを使用します。
# ボリュームを作成してマウントdocker run -v mydata:/data nginxQ. Dockerが遅いと感じたら?
以下を確認してください。
- Mac: Docker Desktopのリソース設定(CPU、メモリ)を増やす
- Windows: WSL2バックエンドを使用しているか確認
- 全般: 不要なイメージ・コンテナを削除(
docker system prune)
トラブルシューティング
permission deniedエラー
Got permission denied while trying to connect to the Docker daemon socket対処法(Linux):
# ユーザーをdockerグループに追加sudo usermod -aG docker $USER
# 再ログインして反映ポートが使用中
Bind for 0.0.0.0:8080 failed: port is already allocated対処法:
# 使用中のポートを確認lsof -i :8080
# 別のポートを使用docker run -p 8081:80 nginxディスク容量不足
no space left on device対処法:
# 不要なデータを一括削除docker system prune -a
# ボリュームも含めて削除docker system prune -a --volumes検証環境
| マシン | アーキテクチャ | Dockerバージョン | 最終検証日 |
|---|---|---|---|
| Mac mini M4 Pro | aarch64(ARM64) | Docker Desktop 4.37 | 2025年1月 |
| Almalinux 10.1 | x86_64 | Docker Engine 27.x | 2025年1月 |
更新履歴
- 2024-12-25: 初版公開
関連記事
仮想化全般
Linux環境