はじめに
業務でWindows上にDocker環境(Docker Desktop)を一から構築する機会があったので、その際のメモを備忘録としてまとめてみました。
前提条件
- WSL2がインストールされていること。
- Windows11にWSL2を導入する場合は、こちらの手順が分かりやすいと思います。
Dockerアカウントの作成
- pricingのページから「Personal」の「Get Started now」をクリックします。
- [Create your account]の画面で、必要な情報を入力して[Sign up]を押します。
- 今回はGoogleアカウントでDockerのアカウントを作成しました。
ダウンロードとインストール
- Docker Hubのページから[Download for Windows]のボタンを押して、Docker Desktopのインストーラーをダウンロードします
- インストーラーを起動して、デフォルト設定でインストールします。
- [Use WSL 2 instead of Hyper-V (recommended)]と[Add shortcut to desktop]にチェックが入っていることを確認して下さい。
- インストールが成功したら、[Close and restart]を押してOSを再起動します。
初期設定
- 再起動後にDockerを起動すると、初期設定のウィザードが開始されます。
- 最初に[Docker Subscription Service Agreement]と書かれた画面が現れるので、[Accept]を押します。
- Dockerの設定はデフォルト設定(Use recommended setting)で[Finish]します。
- 「Welcome to Docker Desktop」と書かれた画面で[Sign In]を押してサインインします。
- ここまでの設定が終わると、Docker Desktopが使える状態となります。
コンテナの作成
- Dockerが正常に動くかどうかを確認するため、試しにコンテナを作って動作確認をします。
イメージのダウンロード
- PowerShellで以下のコマンドを実行して、Dockerの動作環境のテンプレートとなるイメージをダウンロードします。
- 今回はブラウザを使って動作確認出来る「httpd」というイメージを使いました。
PowerShell
PS> docker pull httpd
- ダウンロード完了後に以下のコマンドを実行すると、以下のようにhttpdというイメージが表示されます。
PowerShell
PS> docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
httpd latest ac45b24b92cc 8 weeks ago 167MB
- イメージのダウンロードが完了すると、Docker Desktopの[Images]画面にもダウンロードしたイメージが表示されます。
コンテナの作成と実行
- ダウンロードしたイメージ(httpd)を使って、以下のコマンドで
httpd_test
という名前のコンテナを作成・実行します。-
-p
というオプションは「コンテナのポートをホストに公開する」という意味で、-p 10088:80
という部分は、「ホスト(※ここではWindows機)の10088番ポートをコンテナの80番ポートと紐付ける」ということになります。 -
-it
というオプションについては、こちらの記事で解説されています。
-
PowerShell
PS> docker run --name httpd_test -p 10088:80 -it httpd
- コンテナの作成・実行が完了後に以下のコマンドを実行すると、以下のようにhttpd_testというコンテナが起動していることが分かります。
PowerShell
PS> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9abbc1b05840 httpd "httpd-foreground" 9 minutes ago Up 9 minutes 0.0.0.0:10088->80/tcp httpd_test
- コンテナの作成・実行が完了すると、Docker Desktopの[Containers]画面にもダウンロードしたイメージが表示されます。
- この画面で[Port(s)]列の
10088:80
をクリックすると、デフォルトのブラウザが起動してApacheのテストページが表示されます。 - 直接URLを入力する場合は
http://localhost:10088
となります。
- この画面で[Port(s)]列の
注意点
- ポート番号の紐付けは任意のポート番号を利用できますが...
- 以下のように「ホストの10080番ポートをコンテナの80番ポートと紐付ける」形で設定すると、ブラウザから
http://localhost:10080
にアクセスしても 「ERR_UNSAFE_PORT」 と表示されてしまいます。- これはChromeやEdgeで起きる現象で、「NAT Slipstreaming攻撃」を防ぐためのセキュリティ強化策だそうです。
- 10080番ポートを開放する方法もあるようですが、素直に他のポートを使った方が安心だと思います。
PowerShell
PS> docker run --name httpd_test -p 10080:80 -it httpd