
本記事では、Windows環境にDocker Desktopを導入し、ApacheコンテナでローカルのHTMLファイルを同期表示させるまでの手順をまとめました。インストールなどの初期設定から、基本操作、そしてボリュームマウントの設定までを一通り解説します。
目次
Dockerの特徴
Dockerは、プロセスやプログラムの実行環境を隔離できる技術です。
プログラムとその動作環境をまとめて入れるための「箱」であるコンテナを使用し、それぞれのコンテナ内で使うライブラリや設定がお互いに影響しないように隔離します。
コンテナ同士は干渉しないため、1つのコンテナに1つのサーバーを入れて、複数のコンテナをパソコンにいれることで、サーバーを複数同時に稼働させることができます。そして、その際にライブラリの競合のような問題は起こりません。
また、コンテナにはライブラリや依存関係も含まれるので、どの環境に持っていっても同じように動作します。これによりテスト環境から本番環境への移行が簡単になります。

DockerはLinuxの仕組みを利用しており、他のOSで利用する際には、内部でLinux環境を動かして、その上でDockerを実行します。
Dockerを使って、データやプログラムを隔離すると、次のメリットがあります。
隔離されているということはステートレスに扱えば「スケールアウト/スケールインしやすい」ということでもあります。
コンテナのライフサイクル
コンテナは、Docker Hubなどで配布されているイメージから基本的に作成します。
使用したい機能をもつイメージが配布されていない場合も、既存のイメージを修正してコンテナを作成することもできます。
イメージが既にあれば、イメージからコンテナを作るのに時間はほとんどかかりません。
コンテナはイメージから作り直す方が便利であるため、「イメージから作成」→「起動」→「停止」→「廃棄」がライフサイクルとなっており、コンテナを使い捨てるのが基本的な使い方です。

具体的な例を考えてみましょう。サーバーを運用している場合には、ソフトのアップデートを行うことがありますが、サーバーが大量にある場合には、一つ一つ手動でアップデートしていくのは大変です。
この場合、コンテナを1つずつ修正するよりも、今のコンテナを廃棄して、ソフトをアップデートしたイメージを作成し、そのイメージをもとにコンテナを作り直せば、複数のサーバーがある場合にも時間がかかりません。
コンテナを廃棄すると、コンテナの中にあるデータも一緒に削除されます。消してはいけないデータはコンテナの外に保存しておき、コンテナからは外部のデータをマウントして使います。
まとめると、コンテナの基本的な使い方は、次の通りです。
- コンテナは「使い捨て」
長期間同じものを保守するのではなく、必要になったら「新しいコンテナを立ち上げます」。 - 状態を持たせない(ステートレス)
コンテナ内で直接データを更新したり保存したりするのは推奨されません。
データはボリュームや外部データベースに保存し、コンテナは純粋に「アプリを実行する箱」として扱います。 - アップデートも再作成で対応
新しいバージョンを入れたい場合は、イメージを更新して、そのイメージから新しいコンテナを起動します。
イメージは修正したコンテナから作ることもできます。
イメージの配布場所
イメージは、Docker公式の公開レジストリであるDocker Hubからダウンロードできます。
https://hub.docker.com

世界中で最も使われているイメージ配布サイトで、Ubuntu、Nginx、PostgreSQLなどの公式イメージが提供されています。
誰でもアップロードすることができるため、中には「脆弱性を含んだイメージ」も存在します。このため、公式イメージを優先し、提供元を確認することが大事です。
また、更新頻度やセキュリティアップデートを確認し、古いまま放置されているイメージでないかを確認することも重要です。
不要に大きいイメージはビルドや配布が遅くなるため、軽量版を検討するのも有効です。
Docker Desktopのインストール方法
WindowsにDockerを導入する方法を説明します。最も簡単なのはDocker Desktopを使用する方法です。
Windows 10以上で最新のWindows Updateを適用しているものとします。
Docker Desktopは、WindowsやMacでDockerを簡単に使えるようにするための公式アプリケーションです。WSL2を使うため、それを有効化します。
PowerShellを開き、次のコマンドを実行します。
wsl.exe --install管理者権限を求められますので「OK」ボタンを押します。これにより、WSLが使用できるようになります。
▼ 古いOSの場合で上記のコマンドを使用できない場合(クリックすると開きます)
WSLを有効化した後は、以下のアドレスからDocker Desktopをダウンロードします。
https://www.docker.com/ja-jp/products/docker-desktop
AMD64版とARM64版がありますが、コマンドプロンプトを開いて次のコマンドを打ち込むことで確認することができます(PowerShellではなくcmdでのコマンドです)。
echo %PROCESSOR_ARCHITECTURE%ダウンロードしたインストーラを実行し、ウィンドウの指示に従って進めれば、インストールできます。
Docker Desktopを実行すると、「Docker Subscription Service Agreement」が開かれます。これは有料サブスクリプションサービスに関する承認を求めるものです。
Docker Subscription Service Agreement
Docker Desktop is free for small businesses (fewer than 250 employees AND less than $10 million in annual revenue), personal use, education, and non-commercial open source projects. Otherwise, it requires a paid subscription for professional use. Paid subscriptions are also required for government entities.
Docker Desktop は以下の条件を満たす場合に無料で利用できます:
- 従業員数が 250 人未満
- 年間売上が 1,000 万ドル未満
また、個人利用・教育目的・非営利のオープンソースプロジェクトでも無料です。
それ以外の場合(商用利用など)は有料のプロフェッショナルプランが必要です。
政府機関も有料サブスクリプションが必要です。
内容を確認して同意できる場合は「Agree」を実行します。
記事執筆時点における同意書です。インストールする際には、よく読んでお使いください。
アカウントの作成を求められますが、Skipすることも可能です。
右下にTermialという文字がありますので、それをクリックするとターミナルが開き、そこでDockerのコマンドを使用することができます。
Docker Desktopは常駐アプリで、タスクバーに表示されます(クジラのようなマークです)。軽いので常駐させていてもPCの動作にはほとんど影響はありません。
コンテナの起動、停止、削除
Docker Desktop のターミナルを用いて、コンテナの起動、停止、削除を実施してみます。ここでは、Webサーバーを提供するApacheを動かして、ブラウザからアクセスしてみます。
コンテナの作成と起動
コンテナに対して外部からアクセスするためには、ポートの設定が必要になります。ポートの設定はホスト側とコンテナ側のポート番号を次のようにして与えます。
-p [ホストのポート番号]:[コンテナのポート番号]コンテナのポート番号にはソフトウェアで決められたポート番号を与えます。Apacheは、ポート80でユーザーがアクセスしてくるのを待っていますので、コンテナのポート番号を80にします。一方、ホストのポート番号は使用していないポート番号であれば、何でも任意の数字で構いません。
まず、コンテナを作成、起動するコマンドdocker runを使用します。
docker run --name apache_server -d -p 8000:80 httpd| パーツ | 役割 | 詳細 |
|---|---|---|
docker run | コンテナの作成と実行 | イメージを元に、新しいコンテナ(仮想的なサーバー環境) |
--name apache_server | コンテナに名前を付ける | このコンテナにapache_serverという独自の管理名を付けます。指定しない場合はランダムな名前が自動で振られます。 |
-d | デタッチモード | 「Detached」の略。コンテナをバックグラウンドで実行します。これを使わないと、ターミナルがApacheのログ表示で占有されてしまいます。 |
-p 8000:80 | ポートマッピング | ホスト側の8000番ポートへのアクセスを、コンテナ内の80番ポートへ転送します。 |
httpd | イメージ名 | 使用するベースイメージです。httpdはApache HTTP Serverの公式イメージを指しています。 |
コマンドを実行するとイメージがあるかどうかを確認し、なければ自動的にダウンロードしてからコンテナを作成して起動します。
chrome等のブラウザのアドレスバーに、以下のアドレス入力します。
http://localhost:8000/ブラウザに「It works!」と表示されていれば成功です。コンテナの一覧を表示するにはdocker psコマンドを使用します。
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ad30b3f098ea httpd "httpd-foreground" 3 minutes ago Up 3 minutes 0.0.0.0:8000->80/tcp, [::]:8000->80/tcp apache_serverこれにより、動作しているコンテナの一覧が表示されます。STATUSの欄に「Up」と書かれているのが起動していることを意味しています。停止しているコンテナも表示したい場合には-aオプションを付けます。停止している場合には、STATUSの欄に「Exited」と表示されます。
ポート番号8000でエラーが出た場合には、8001番にするなど開いているポートに変更してください。
コンテナの停止と再開
コンテナの停止する場合には、以下のコマンドを実行します。
docker stop apache_serverまた、停止したコンテナを再開する場合には、以下のコマンドを実行します。
docker start apache_serverコンテナを停止した場合にdocker psを使用すると、以下のようになります。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESコンテナの削除
コンテナの削除には以下のコマンドを使用します。
docker rm apache_serverdocker ps -aコマンドを実行しても当該コンテナが表示されないことにより、削除できたことを確認できます。
イメージの削除
イメージが増えると、ディスクの容量をそれだけ使用するため、使わなくなった不要なイメージは削除します。イメージを削除するには、そのイメージが作成したコンテナが削除されている必要があります。
まず、イメージを作成する前に、イメージ一覧を以下のコマンドにより確認します。
docker image lsこの結果、次のような結果が表示されます。
REPOSITORY TAG IMAGE ID CREATED SIZE
httpd latest bdba5c86022f 4 days ago 175MB| 項目 | 説明 |
|---|---|
| REPOSITORY | イメージの名前(例:httpd, mysql, nginx) |
| TAG | バージョン番号や識別子です。指定しない場合は最新版を示すlatestになります。 |
| IMAGE ID | 各イメージに割り振られた固有のIDです(最初の数文字で識別可能) |
| CREATED | そのイメージがビルド(作成)された時期 |
| SIZE | イメージのファイルサイズ |
中間イメージも含めたすべてのイメージを表示したい場合は-aオプション、IDだけを表示したい場合は-qオプションを付けます。
docker image ls -a
docker image ls -qイメージを削除する場合には、イメージの名前(例:httpd)またはイメージIDを指定して、次のコマンドを実行します。
docker image rm httpd削除した後にもう一度docker image lsコマンドを実行することで、実際に削除されていることを確認できます。
REPOSITORY TAG IMAGE ID CREATED SIZEボリュームマウント
ボリュームマウントは、ホストPC(ユーザーのパソコン)にあるフォルダやファイルを、コンテナの中につなげるための機能です。ボリュームをマウントする場合には、docker runを実行する際に-vオプションを使用します。
-v [ホスト側のパス]:[コンテナ側のパス]ホスト側のパスには、ユーザーのPC上のフォルダの場所(例:C:\Test\my-site)を設定し、コンテナ側のパスには、コンテナ内のどこに繋げるか(例:Apacheの公開フォルダ /usr/local/apache2/htdocs)を設定します。
コンテナ側のパスは、以下のような方法で確認します。
・ Docker Hubの「How to use this image」などのドキュメントに記述されています。
・ docker exec -it コンテナ名 bash で中に入り、Linuxコマンドでフォルダ構成を確認します。
実際に、ローカルのファイルを読み込んでホームページを表示してみましょう。自分で作成したHTMLファイルindex.htmlを作成して、それをC:\Test\my-site\に置きます。
<!DOCTYPE html>
<html>
<body>
<h1>Docker Volume Success !</h1>
<p>This file is saved in your PC.</p>
</body>
</html>そして、このHTMLファイルを置いたディレクトリをマウントします。
docker run --name apache_server -d -p 8000:80 -v C:\Test\my-site\:/usr/local/apache2/htdocs/ httpd ブラウザでhttp://localhost:8000/にアクセスすると、「Docker Volume Success ! This file is saved in your PC.」と表示され、ドライブ上のファイルにアクセスできていることを確認できます。
以下のコマンドを実行することで、コンテナの停止と削除、イメージの削除が可能です。
docker stop apache_server
docker rm apache_server
docker image rm httpd実行した後にC:\Test\my-site\を確認すると、コンテナとイメージを削除してもHTMLファイルが残っています。
Dockerの-vは相対パスが使えない場合があるため、絶対パスで指定します。また、Windowsのパスはバックスラッシュ\を使用しますが、Docker側はスラッシュ/を使用するのが一般的です。
Windows側のパスはカレントディレクトリを指定する場合、次のようにすることもできます。
Powershell: -v ${PWD}:/usr/local/apache2/htdocs/
cmd: -v %cd%:/usr/local/apache2/htdocs/
まとめ
本記事では、Dockerの概要とWindowsで使用するためのDocker desktopのインストール方法、コンテナの起動、停止および削除を行う基本的な操作を解説しました。
Dockerの特徴には以下のものがありました。
- プログラムや環境をコンテナという単位に隔離する。
- コンテナどうしは互いに影響しないため、ライブラリ競合が発生しない。
- 隔離しているため、イメージにすることで配布しやすい。
- イメージからコンテナを簡単に作成できるため、ステートレスにすることでスケーラビリティを確保できる。
- コンテナからイメージを作成できるので、修正した後に配布することが簡単。
- 環境ごとパッケージングできるので、開発環境を共有したり、テスト環境から本番環境に移行するのが簡単。
Dockerのコンテナを扱うためのコマンドには以下がありました。
| コマンド | 説明 |
| docker run | コンテナの生成と起動 |
| docker start | コンテナの起動(再起動) |
| docker stop | コンテナの停止 |
| docker rm | コンテナの削除 |
| docker ps | コンテナ一覧の表示 |
| docker image rm | イメージの削除 |
| docker image ls | イメージ一覧の表示 |
最後に、自分で作成したHTMLファイルを表示することを通して、オプション-vを用いてボリュームマウントができることを示しました。


