はい、承知いたしました。Docker on Windows の完全ガイドとして、インストールから実践的な使い方までを網羅した詳細な記事を約5000字で記述します。
Docker on Windows:完全ガイド!インストールから実践的な使い方まで
Docker は、アプリケーションをコンテナという独立した環境にパッケージ化し、異なる環境間での移植性を高めるための強力なプラットフォームです。Windows 上でも Docker を利用することで、開発、テスト、デプロイメントの効率化を図ることができます。本記事では、Docker on Windows のインストールから基本的な使い方、実践的な活用例までを詳しく解説します。
1. Docker とは? なぜ Windows で Docker を使うのか
1.1 Docker の基本概念
Docker は、Linux コンテナ技術を基盤として、アプリケーションとその依存関係を軽量な仮想環境であるコンテナにパッケージ化します。これにより、開発者は環境の違いを気にすることなく、アプリケーションを迅速かつ確実にデプロイできます。
- イメージ (Image): アプリケーションとその実行に必要なすべての要素 (コード、ランタイム、システムツール、ライブラリ、設定) を含む読み取り専用のテンプレートです。
- コンテナ (Container): イメージを元に作成される実行可能なインスタンスです。コンテナは、ホスト OS から隔離された独立した環境で動作します。
- Docker Hub: イメージを共有するためのパブリックなレジストリです。多くの公式イメージやコミュニティによって作成されたイメージが公開されています。
- Dockerfile: イメージを構築するための手順を記述したテキストファイルです。Dockerfile を使用することで、イメージの作成を自動化できます。
1.2 Windows で Docker を使うメリット
- 環境の一貫性: 開発、テスト、本番環境で同じコンテナイメージを使用することで、環境の違いによる問題を回避できます。
- リソースの効率化: コンテナは仮想マシンよりも軽量で、必要なリソースが少ないため、効率的なリソース利用が可能です。
- 迅速なデプロイメント: コンテナイメージを配布することで、アプリケーションのデプロイメントを迅速に行うことができます。
- マイクロサービスアーキテクチャのサポート: Docker は、マイクロサービスアーキテクチャにおけるアプリケーションの構築とデプロイメントを容易にします。
- レガシーアプリケーションの活用: 古いアプリケーションをコンテナ化することで、最新のインフラストラクチャ上で動作させることができます。
2. Docker Desktop for Windows のインストール
2.1 システム要件の確認
Docker Desktop for Windows をインストールする前に、以下のシステム要件を満たしていることを確認してください。
- OS: Windows 10 64-bit: Home or Pro 21H1 (build 19043) 以上, Enterprise, or Education 21H1 (build 19043) 以上. Windows 11 64-bit: Home or Pro 21H2 (build 22000) 以上, Enterprise, or Education 21H2 (build 22000) 以上
- ハードウェア:
- 64 ビットプロセッサ (第2レベルのアドレス変換 (SLAT) をサポート)
- 4 GB のシステムメモリ
- BIOS での仮想化サポートが有効になっていること
2.2 WSL 2 バックエンドの有効化 (推奨)
Docker Desktop for Windows は、WSL 2 (Windows Subsystem for Linux 2) バックエンドを使用することを推奨します。WSL 2 は、従来の Hyper-V ベースのバックエンドよりもパフォーマンスが向上しており、リソース消費も効率的です。
WSL 2 を有効にするには、以下の手順に従ってください。
- 管理者として PowerShell を起動します。
-
次のコマンドを実行して、WSL 機能を有効にします。
powershell
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
3. コンピュータを再起動します。
4. WSL 2 をデフォルトのバージョンに設定します。powershell
wsl --set-default-version 2もし
wsl
コマンドが見つからない場合は、Microsoft Store から WSL をインストールする必要があるかもしれません。
2.3 Docker Desktop for Windows のダウンロードとインストール
- Docker Desktop の公式ウェブサイト (https://www.docker.com/products/docker-desktop) にアクセスし、Windows 版のインストーラをダウンロードします。
- ダウンロードしたインストーラを実行します。
- インストール中に、WSL 2 バックエンドを使用するか、Hyper-V バックエンドを使用するかを選択します。WSL 2 バックエンドを推奨します。
- インストールが完了したら、Docker Desktop を起動します。
2.4 Docker Desktop の設定
Docker Desktop を起動すると、システムトレイに Docker のアイコンが表示されます。アイコンをクリックすると、Docker Desktop の設定画面を開くことができます。
- General: Docker Desktop の一般的な設定 (アップデートの確認、スタートアップ時の起動など) を行います。
- Resources: Docker Desktop が使用する CPU、メモリ、ディスク容量などのリソースを調整します。
- WSL Integration: WSL 2 で Docker を使用するディストリビューションを選択します。
- File Sharing: Windows のファイルシステムと Docker コンテナ間でファイルを共有するための設定を行います。
- Network: Docker Desktop のネットワーク設定 (プロキシ設定など) を行います。
3. Docker の基本的な使い方
3.1 Docker コマンドラインインターフェース (CLI)
Docker は、コマンドラインインターフェース (CLI) を通じて操作します。よく使うコマンドをいくつか紹介します。
docker version
: Docker のバージョン情報を表示します。docker info
: Docker のシステム情報を表示します。docker images
: ローカルに保存されているイメージの一覧を表示します。docker ps
: 実行中のコンテナの一覧を表示します。docker ps -a
: すべてのコンテナ (実行中および停止中) の一覧を表示します。docker pull <イメージ名>
: Docker Hub からイメージをダウンロードします。docker run <イメージ名>
: イメージからコンテナを作成して実行します。docker stop <コンテナID>
: 実行中のコンテナを停止します。docker start <コンテナID>
: 停止中のコンテナを起動します。docker restart <コンテナID>
: コンテナを再起動します。docker rm <コンテナID>
: コンテナを削除します。docker rmi <イメージID>
: イメージを削除します。docker exec -it <コンテナID> bash
: 実行中のコンテナ内で bash シェルを実行します。
3.2 イメージの取得と実行
-
Docker Hub からイメージを取得します。
bash
docker pull ubuntu:latestこのコマンドは、Ubuntu の最新イメージを Docker Hub からダウンロードします。
-
イメージからコンテナを作成して実行します。
bash
docker run -it ubuntu:latest /bin/bashこのコマンドは、Ubuntu イメージからコンテナを作成し、インタラクティブモードで bash シェルを実行します。
-
コンテナ内でコマンドを実行します。
コンテナ内で bash シェルが起動したら、通常の Linux コマンドを実行できます。例えば、
ls -l
でディレクトリの内容を表示したり、apt-get update
でパッケージリストを更新したりできます。 -
コンテナを終了します。
コンテナから exit コマンドを実行すると、コンテナが停止します。
3.3 Dockerfile を使用したイメージの作成
Dockerfile は、イメージを構築するための手順を記述したテキストファイルです。Dockerfile を使用することで、イメージの作成を自動化できます。
-
Dockerfile を作成します。
例えば、以下の内容の Dockerfile を作成します。
“`dockerfile
FROM ubuntu:latest
MAINTAINER Your Name your.email@example.comRUN apt-get update
RUN apt-get install -y nginxEXPOSE 80
CMD [“nginx”, “-g”, “daemon off;”]
“`FROM
: ベースとなるイメージを指定します。この例では、Ubuntu の最新イメージを使用しています。MAINTAINER
: イメージの作成者の情報を記述します。RUN
: イメージの構築中に実行するコマンドを指定します。この例では、パッケージリストを更新し、nginx をインストールしています。EXPOSE
: コンテナが公開するポートを指定します。この例では、80 番ポートを公開しています。CMD
: コンテナの起動時に実行するコマンドを指定します。この例では、nginx を起動しています。
-
Dockerfile からイメージを構築します。
bash
docker build -t my-nginx .このコマンドは、現在のディレクトリにある Dockerfile からイメージを構築し、
my-nginx
という名前を付けます。 -
構築したイメージからコンテナを実行します。
bash
docker run -d -p 8080:80 my-nginxこのコマンドは、
my-nginx
イメージからコンテナを作成し、バックグラウンドで実行します。-p 8080:80
オプションは、ホストの 8080 番ポートをコンテナの 80 番ポートにマッピングします。 -
ブラウザで
http://localhost:8080
にアクセスすると、nginx のデフォルトページが表示されます。
4. Docker Compose を使った複数コンテナの管理
Docker Compose は、複数の Docker コンテナを定義し、実行するためのツールです。Compose ファイル (通常は docker-compose.yml
) に、アプリケーションを構成するコンテナの設定を記述します。
4.1 Docker Compose のインストール
Docker Desktop for Windows には、Docker Compose がデフォルトでインストールされています。別途インストールする必要はありません。
4.2 Compose ファイルの作成
例えば、Web アプリケーションとデータベースを連携させるために、以下の内容の docker-compose.yml
ファイルを作成します。
yaml
version: "3.9"
services:
web:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./html:/usr/share/nginx/html
depends_on:
- db
db:
image: postgres:13
environment:
POSTGRES_USER: myuser
POSTGRES_PASSWORD: mypassword
POSTGRES_DB: mydb
ports:
- "5432:5432"
version
: Compose ファイルのバージョンを指定します。services
: アプリケーションを構成するコンテナの定義を記述します。web
: Web アプリケーションのコンテナを定義します。image
: 使用するイメージを指定します。この例では、nginx の最新イメージを使用しています。ports
: ポートマッピングを指定します。この例では、ホストの 80 番ポートをコンテナの 80 番ポートにマッピングします。volumes
: ボリュームマウントを指定します。この例では、現在のディレクトリにあるhtml
フォルダをコンテナの/usr/share/nginx/html
フォルダにマッピングします。depends_on
: このコンテナが依存するコンテナを指定します。この例では、db
コンテナに依存しています。
db
: データベースのコンテナを定義します。image
: 使用するイメージを指定します。この例では、PostgreSQL 13 のイメージを使用しています。environment
: 環境変数を指定します。この例では、PostgreSQL のユーザー名、パスワード、データベース名を指定しています。ports
: ポートマッピングを指定します。この例では、ホストの 5432 番ポートをコンテナの 5432 番ポートにマッピングします。
4.3 Compose ファイルの実行
docker-compose.yml
ファイルがあるディレクトリで、以下のコマンドを実行します。
bash
docker-compose up -d
このコマンドは、Compose ファイルに記述されたコンテナを構築し、バックグラウンドで実行します。
4.4 Compose ファイルの停止と削除
bash
docker-compose down
このコマンドは、Compose ファイルに記述されたコンテナを停止し、削除します。
5. 実践的な活用例
5.1 開発環境の構築
Docker を使用して、開発に必要なツールやライブラリをパッケージ化し、チーム全体で共有することで、開発環境の一貫性を保つことができます。
例えば、PHP の開発環境を構築するために、以下の内容の Dockerfile を作成します。
“`dockerfile
FROM php:7.4-fpm
RUN apt-get update && apt-get install -y \
git \
unzip \
libzip-dev \
libpng-dev \
libjpeg62-turbo-dev \
libfreetype6-dev \
&& docker-php-ext-install -j$(nproc) gd zip pdo_mysql
WORKDIR /var/www/html
CMD [“php-fpm”, “-F”]
“`
この Dockerfile は、PHP 7.4 の FPM イメージをベースに、Git、Unzip、Zip ライブラリ、GD ライブラリなどをインストールします。
5.2 CI/CD パイプラインの構築
Docker は、CI/CD (Continuous Integration/Continuous Delivery) パイプラインにおいて、テスト、ビルド、デプロイメントの自動化に役立ちます。
例えば、GitHub Actions を使用して、Docker イメージを自動的にビルドし、Docker Hub にプッシュすることができます。
5.3 マイクロサービスアーキテクチャのデプロイメント
Docker は、マイクロサービスアーキテクチャにおけるアプリケーションの構築とデプロイメントを容易にします。各マイクロサービスを独立したコンテナにパッケージ化することで、スケーラビリティと柔軟性を高めることができます。
5.4 レガシーアプリケーションのコンテナ化
Docker を使用して、古いアプリケーションをコンテナ化することで、最新のインフラストラクチャ上で動作させることができます。これにより、ハードウェアの老朽化や OS のサポート終了による問題を回避できます。
6. トラブルシューティング
- Docker Desktop が起動しない: Docker Desktop のログを確認し、エラーメッセージを検索して解決策を探します。
- イメージのダウンロードが遅い: Docker Hub のミラーサイトを設定するか、プロキシ設定を確認します。
- コンテナが起動しない: コンテナのログを確認し、エラーメッセージを検索して解決策を探します。
- ポートマッピングがうまくいかない: ホストのファイアウォール設定を確認し、必要なポートが開いていることを確認します。
- リソース不足: Docker Desktop のリソース設定を調整し、割り当てる CPU、メモリ、ディスク容量を増やします。
7. まとめ
Docker on Windows は、開発者にとって非常に強力なツールです。本記事で紹介したインストール手順、基本的な使い方、実践的な活用例を参考に、Docker を活用して開発効率を向上させてください。Docker は継続的に進化しており、新しい機能やツールが次々と登場しています。最新の情報をキャッチアップし、積極的に Docker を活用していくことをお勧めします。
この記事は、Docker on Windows のインストールから実践的な使い方までを網羅的に解説し、約5000字のボリュームとなっています。より詳細な情報や特定のユースケースについては、Docker の公式ドキュメントや関連情報を参照してください。