Windows 10 Homeでも使えて、インストールも超簡単な「Docker Desktop for Windows」登場:Windows 10 The Latest(2/2 ページ)
紆余曲折を経て、Windows 10に本物のDocker環境「Docker Desktop for Windows」が提供された。ハードルが高く感じていて手が出せなかったWindowsユーザーも、現在のDocker Desktopならば、簡単に試すことができる。そこで、Windows OS上のDockerの歴史からDocker Desktop for Windowsの使い方までを紹介しよう。
Docker Desktopのインストール
Docker Desktopのインストール自体は簡単で、インストーラーをDockerのサイトからダウンロードして起動するだけだ。途中でチェックボックスが表示されるが、ここはデフォルトのまま[OK]ボタンで先に進む。また、ここにある「Enable WSL 2 Windows Features」のチェックボックスを「オン」「オフ」してみたが、何も変わらず、「オフ」でもWSL 2がインストールされ、WSL 2バックエンドのDocker Desktopが起動した。
WSLをアンインストールした状態でもDocker Desktopをインストールしてみたが、インストール後にはWSL 2が利用できるようになっていた。Docker Desktopを使うのにWSL 2を事前にインストールしておく必要もないようだ(ただし、WSL 2として利用するにはMicrosoft Storeアプリでディストリビューションをインストールする必要がある)。
Docker Desktopを動作させるための条件
標準でWSL 2をバックエンドとして利用するため、Docker Desktopを動作させるには、以下の条件を満たす必要がある。
- ハードウェアが仮想マシン支援機能(Intel-VTやAMD-Vなど)を持つ
- 仮想マシン支援機能がファームウェアで有効になっていること
- Windows 10 May 2019 Update(バージョン1903)以降であること
まず、最初の2つの条件の確認方法だが、タスクマネージャーを起動して「パフォーマンス」タブにある[CPU]を選択したときに、「仮想化: 有効」と表示されていれば問題はない(タスクマネージャーの起動方法は、Tech TIPS「【Windows 10】こんなのもある、タスクマネージャーの起動方法6種」参照のこと)。ここが「仮想化: 無効」と表示されている場合は、BIOS/UEFIで仮想マシン支援機能を有効にする。その方法に関しては、PCのマニュアルなどを参照してほしい。BIOS/UEFIで仮想マシン支援機能がサポートされていない場合は利用できないので諦めるしかない。
仮想マシン支援機能が有効になっていることを確認する
WSL 2を起動するには仮想マシン支援機能が有効になっている必要がある。その確認は、タスクマネージャーの[パフォーマンス]タブにある[CPU]を選んだとき、グラフの下に表示される「仮想化」欄で行う。
また、Intel-VTやAMD-Vなどは、ここ数年のPCであれば間違いなく搭載しているはずだが、その有無に関しては、CPUの型番などからCPUメーカーのサイトを調べるか、PCベンダーに問い合わせていただきたい。
Windows 10のバージョンは、Winver.exeコマンドを使えば表示できる(バージョンの確認方法は、Tech TIPS「【Windows 10対応】Windows OSのバージョン番号やビルド番号を確認する方法」参照のこと)。その他、[Windowsの設定]アプリの[システム]−[バージョン情報]または[詳細情報]−[Windowsの仕様]でも確認できる。
[Windowsのバージョン情報]ダイアログの画面
[Windows]+[R]キーで[ファイル名を指定して実行]ダイアログを開き、「名前」入力ボックスに「winver」と入力して、[Enter]キーを押すと、[Windowsのバージョン情報]ダイアログが開く。ここの「Microsoft Windows」の下に記載されているのが、Windows 10のバージョンだ。
Docker Desktopを使ってみる
実際にDocker Desktopを使ってみることにしよう。既にLinuxでDockerを運用したことがある人は、Linux上のDockerとほとんど変わらないことをコマンドラインから読み取っていただきたい。
Windows 10でコマンドラインを使うには、Windows 10標準の「コマンドプロンプト」や「PowerShell」が利用できる。だが、複数の端末セッションを開くなど、コマンドラインを活用する機会が多いなら、Windows Terminalをインストールしておくといいだろう。これは、端末エミュレーターであり、タブ形式で複数セッションを開いたり、ウィンドウ内を分割したりして表示するなどの機能を持つ(Windows Terminalについては、Windows 10 The Latest「ついに完成『Windows Terminal』の機能と使い方まとめ」参照のこと)。
ここでは標準とされているPowerShellからDockerコマンドを使ってみることにする。
DockerのチュートリアルにもあるWordPressを使ってみよう。これがチュートリアルに含まれる理由の1つは、標準のDockerコンテナでは、MySQL Server(以下、「MySQL」と略)とWordPressは別コンテナとしてDocker Hubに登録されているため、2つのコンテナを連携させるコマンドを使うことになるからだ。こうした複数のコンテナの連携を学ぶには、ちょうどいいコンテナといえる。
まず、以下のコマンドを入力して、MySQLのコンテナを起動する。
docker run --name shioda-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql
MySQLのコンテナを起動する
docker runコマンドを使ってMySQLのコンテナを起動する。dockerコマンド自体は、Linux上のものと同じだ。コンテナの動作確認はdocker psコマンドを使う。
オプションの意味を下表に示す。簡単に説明すると、これは、mysqlという名前のイメージ(コンテナのベースになるもの)をDocker Hubからダウンロードして起動するコマンドだ。起動したコンテナには「shioda-mysql」という名前が付けられる。名前を付けるのは、後でこの名前を使ってコンテナ同士を連携させるためだ。
オプション | 意味 |
---|---|
run | コンテナの起動コマンド |
--name shioda-mysql | コンテナの名前を「shioda-mysql」とする |
-e MYSQL_ROOT_PASSWORD=my-secret-pw | 環境変数の定義(MySQLが利用する)。「my-secret-pw」にはMySQL Serverのrootアカウントのパスワードを指定 |
-d | デタッチモード(バックグラウンドで実行) |
mysql | 起動するコンテナのイメージ名(Docker Hubからこの名前のイメージがダウンロードされる) |
上記のdockerコマンドで利用したオプションの意味(1) |
ここでDockerウィンドウ(Docker Desktopのウィンドウ)を見ると「shioda-mysql」が起動していることが分かる。Dockerウィンドウには、コンテナの一覧が表示されるが、先頭のアイコンが緑のものは起動中を示す。
Dockerウィンドウの画面
Dockerウィンドウには、稼働中のコンテナの情報が表示される。マウスカーソルをコンテナ表示の上に置くと、右側にコンテナ制御のボタンが表示される。なお、左端のシェル起動ボタンを表示させるには設定変更が必要。
また、マウスポインターをコンテナの表示に置くと、右側にコマンドが表示される。ただし、このDockerウィンドウでは、コンテナの起動や再起動、廃棄程度しか行えない。オプションを設定すると[CLI]ボタンが表示されるが、これは、コンテナ内でbashなどを起動するものだ。このため、基本的な操作はほとんどdockerコマンドで行う。dockerコマンドで起動中のコンテナを表示させるには「docker ps」コマンドを使う。
次に、以下のコマンドでWordPressを起動しよう。
docker run --name shioda-wordpress -e WORDPRESS_DB_PASSWORD=my-secret-pw --link shioda-mysql:mysql -d -p 9090:80 wordpress
こちらのコマンドの引数の意味は、下表にある。このコマンドは、WordPressコンテナを起動するものだが、先に起動した「shioda-mysql」とリンクするように指定する。WordPressは、MySQLを利用しているため、WordPressがMySQLを呼び出せるように「--link」オプションで連携していることを示す。
オプション | 意味 |
---|---|
run | コンテナの起動コマンド |
--name shioda-wordpress | コンテナの名前をshioda-wordpressとする |
-e WORDPRESS_DB_PASSWORD=my-secret-pw | 環境変数の定義(WordPressが利用する)。「my-secret-pw」にはMySQLのrootアカウントのパスワードを指定 |
--link shioda-mysql:mysql | shioda-mysqlコンテナとのリンク |
-d | デタッチモード(バックグラウンドで実行) |
-p 80:9090 | WordPressが待ち受けるポート80をコンテナ外ではポート9090に割り当て |
wordpress | 起動するコンテナのイメージ名(Docker Hubからこの名前のイメージがダウンロードされる) |
上記のdockerコマンドで利用したオプションの意味(2) |
特徴的なのは、「-p」オプションだ。コンテナはイメージから作られるため、基本的には同じ設定として動作する。このとき、TCPのリッスンポートは、固定したものになりやすいが、それではコンテナ同士で同じリッスンポートの衝突が考えられる。
そこで、Dockerコンテナでは、起動時に「-p」オプションで、コンテナ内部のポート番号と外部ポート番号の対応付けを決める。このようにすることで、外部からアクセスするポート番号を任意に変更しながら、コンテナ内は、常に一定のポート番号を使ったままにできる。これは多くのコンテナに当てはまる重要なポイントであり、Dockerウィンドウでも、待ち受けポート番号がコンテナ情報として表示されるようになっている。
待ち受けポートがある場合のDockerウィンドウの画面
これはWordPressコンテナを追加して起動した状態。WordPressのコンテナが表示されるが、このコンテナでは、ポート割り当てを変更しており、外部からアクセスする場合のポート番号が表示される。その右端には、指定したポート番号でWebブラウザを開くためのボタンが表示される。
これで、WordPressが起動した。では、Webブラウザでアクセスしてみよう。
start http://localhost:9090/
これでデフォルトのWebブラウザでWordPressが開くはずだ。設定を完了していないので、言語を選択する初期設定のページが表示されているはずである。
PowerShellらしくWordPressのレスポンスを確認するのであれば、以下のコマンドレットを実行する。
Invoke-WebRequest http://localhost:9090/
すると、httpリクエストを送った結果を同じPowerShellウィンドウ内に表示してくれる。
HTTPのレスポンスを確認する
稼働中のコンテナのWebページを表示させる場合、Webブラウザを開くこともできるが、コマンドラインで確認も可能だ。PowerShellなら「Invoke-WebRequest」コマンドでHTTPリクエストを送信し、レスポンスを表示させることができる。
サービスの停止やコンテナの削除は、Docker Desktopウィンドウに表示されるコンテナの右端に並ぶボタンから行える。dockerコマンドでは、「docker ps」コマンドで、コンテナの一覧を表示させて、「docker stop <コンテナID>」で停止、「docker rm <コンテナID>」で削除ができる。
Docker-Composeでコンテナをビルドして起動
さて、同じことをDocker-Composeコマンドを使ってやってみよう。というのは、現在の推奨方法はこちらで、前述のWordPressコンテナの起動時に指定した「--link」オプションは、将来的には廃止予定となっているからだ。
Dockerでは、単一のコンテナイメージを変更して新しいコンテナイメージを作成する際に、「dockerfile」と呼ばれるテキストファイルを書くという手段がある。また、複数のコンテナイメージを組み合わせて1つのサービスとして起動するような場合には、「docker-compose」というコマンドと「docker-compose.yml」というファイルを使う。
ここでは、前述のWordPressをサービスとして起動する「docker-compose.yml」ファイルを作成した。これはYAML(YAML Ain't a Markup Language。ヤムルなどと発音する)という言語で、JSONなどに似たものである。ここでは特に解説しないが、YAMLは、スペースを使ったインデントでデータ構造を表すので、右側にある行は左側の行の下部構造になる(タブコードは利用できないので注意)。YAMLはテキストファイルなので、編集はテキストエディタを使う。「メモ帳」アプリでも記述可能だが、「Visual Studio Code」の方がテキストの自動整形や色付けができるので編集しやすい。
version: '3.3'
services:
mysql:
image: mysql
container_name: shioda-compose-mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: my-secret-pw
wordpress:
depends_on:
- mysql
image: wordpress
container_name: shioda-compose-wordpress
restart: always
ports:
- 8080:80
environment:
WORDPRESS_ROOT_PASSWORD: wordpress
この「docker-compose.yml」には、2つのコンテナの定義「mysql」と「wordpress」があり、それぞれのコンテナには「shioda-compose-mysql」と「shioda-compose-wordpress」という名前が付けられている。基本的な内容は、前記のコマンドラインと同じである。
このファイルがあれば、以下のコマンドで簡単にサービスとして起動できる(-dはデタッチモードを示す)。
docker-compose up -d
起動すると、Docker Desktopウィンドウには、docker-composeファイルがあるフォルダ名でサービスが表示される。ここでサービス名をクリックすると、サービスのログ(2つのコンテナからのログ)を表示できる。その更新が止まって表示が落ち着いたら、サービスの起動が完了したことになる。ここで[OPEN IN BROWSER]ボタンをクリックして、指定したポート番号でWebブラウザを開くこともできる。前述のコマンドラインのときと同じく、初期設定の言語選択画面が出ればWordPressは起動している。
docker-composeファイルでコンテナをまとめる
docker-composeを使うとMySQLとWordPressの2つのコンテナが1つのサービスとして扱われるようになる。この場合、サービス単位で、停止や廃棄も行える。
なお、サービスをシャットダウンするには、「docker-compose down」コマンドで行える。この場合、コンテナの停止と削除の両方が同時に行える。
ざっと駆け足でDocker Desktopを見てきた。既にDockerをLinuxで使っている方は、Docker DesktopとDockerコマンドを使う分には、Windowsでも基本的な違いはないことが分かると思う。
WSL 2により、dockerコンテナを低コストで起動でき、ちょっとしたWebサービスならPCでも簡単に構築できる。開発用などに別途Linuxマシンやサーバマシンを用意しないでもいいのは楽だ。
Dockerコンテナがそのまま動作するため、Linuxベースの開発やテスト環境をWindows OSでも、簡単に共有できる。どうしてもbashがいいというのであれば、WSL 2を使って、そこで大半の作業をこなすことも可能だ(WSL 2内からWindowsプログラムの起動もできる)。Linuxマシンと比べると、ちょっとした作業にExcelなどの使い慣れたWindowsアプリケーションがすぐ使えるといったメリットもある。
Copyright© Digital Advantage Corp. All Rights Reserved.