このステップ バイ ステップ ガイドは、WSL 2 (Linux 用 Windows サブシステム、バージョン 2) を使用して Windows 用 Docker Desktop を設定 することで、リモート コンテナーでの開発を開始するのに役立ちます。
Docker Desktop for Windows には、Docker 化されたアプリをビルド、出荷、実行するための開発環境が用意されています。 WSL 2 ベースのエンジンを有効にすると、同じコンピューター上の Docker Desktop で Linux コンテナーと Windows コンテナーの両方を実行できます。 (Docker Desktop は個人向けおよび小規模企業向けに無料です。Pro、Team、または Business の価格については、 Docker サイトの FAQ を参照してください)。
注
Windows および Linux 用 Windows サブシステムとの統合により、Docker Desktop を使用することをお勧めします。 ただし、Docker Desktop では Linux コンテナーと Windows コンテナーの両方の実行がサポートされていますが、両方を同時に実行 することはできません 。 Linux コンテナーと Windows コンテナーを同時に実行するには、WSL に別の Docker インスタンスをインストールして実行する必要があります。 同時コンテナーを実行する必要がある場合、またはコンテナー エンジンを Linux ディストリビューションに直接インストールする場合は、そのコンテナー サービスの Linux インストール手順に従います ( たとえば、Ubuntu に Docker Engine をインストール する、 Linux コンテナーを実行するための Podman のインストール)。
Docker コンテナーの概要
Docker は、コンテナーを使用してアプリケーションを作成、デプロイ、実行するために使用されるツールです。 コンテナーを使用すると、開発者は、必要なすべてのパーツ (ライブラリ、フレームワーク、依存関係など) を含むアプリをパッケージ化し、すべてを 1 つのパッケージとして配布できます。 コンテナーを使用すると、カスタマイズされた設定や、アプリのコードの記述とテストに使用されたコンピューターとは異なる可能性がある、カスタマイズされた設定や以前にインストールされたライブラリに関係なく、アプリが同じように実行されるようになります。 これにより、開発者は、コードが実行されるシステムについて心配することなく、コードの記述に集中できます。
Docker コンテナーは仮想マシンに似ていますが、仮想オペレーティング システム全体は作成しません。 代わりに、Docker を使用すると、アプリで実行されているシステムと同じ Linux カーネルを使用できます。 これにより、アプリ パッケージはホスト コンピューター上にないパーツのみを必要とするため、パッケージ サイズが小さくなり、パフォーマンスが向上します。
Kubernetes などのツールで Docker コンテナーを使用した継続的な可用性も、コンテナーの人気のもう 1 つの理由です。 これにより、アプリ コンテナーの複数のバージョンを異なる時間に作成できます。 更新やメンテナンスのためにシステム全体を停止する必要はなく、各コンテナー (およびその特定のマイクロサービス) をその場で置き換えることができます。 すべての更新プログラムを使用して新しいコンテナーを準備し、運用環境用にコンテナーを設定し、準備ができたら新しいコンテナーをポイントするだけです。 コンテナーを使用してさまざまなバージョンのアプリをアーカイブし、必要に応じて安全フォールバックとして実行し続けることもできます。
詳細については、「 Docker コンテナーの概要」を参照してください。
[前提条件]
- WSL バージョン 1.1.3.0 以降。
- Windows 11 64 ビット: Home または Pro バージョン 21H2 以降、または Enterprise または Education バージョン 21H2 以降。
- Windows 10 64 ビット (推奨): Home または Pro 22H2 (ビルド 19045) 以降、または Enterprise または Education 22H2 (ビルド 19045) 以降。 (最小): Home または Pro 21H2 (ビルド 19044) 以降、または Enterprise または Education 21H2 (ビルド 19044) 以降。 Windows の更新
- 第 2 レベル アドレス変換 (SLAT) を備えた 64 ビット プロセッサ。
- 4 GB システム RAM。
- BIOS でハードウェア仮想化を有効にします。
- WSL をインストールし、WSL 2 で実行されている Linux ディストリビューションのユーザー名とパスワードを設定します。
- Visual Studio Code をインストールします (省略可能)。 これにより、リモート Docker コンテナー内でコードを作成してデバッグしたり、Linux ディストリビューションに接続したりする機能など、最適なエクスペリエンスが提供されます。
- Windows ターミナルをインストールします (省略可能)。 これにより、同じインターフェイス (Ubuntu、Debian、PowerShell、Azure CLI、または使用するものを含む) で複数のターミナルをカスタマイズして開く機能など、最適なエクスペリエンスが提供されます。
- Docker Hub で Docker ID にサインアップします (省略可能)。
- 使用条件の更新については、 Docker Desktop の使用許諾契約書 を参照してください。
詳細については、 Windows に Docker Desktop をインストールするための Docker ドキュメントのシステム要件に関する記事を参照してください。
Windows Server に Docker をインストールする方法については、「 作業の開始: コンテナー用の Windows の準備」を参照してください。
注
WSL は、WSL バージョン 1 モードと WSL 2 モードの両方でディストリビューションを実行できます。 これを確認するには、PowerShell を開き、「 wsl -l -v
」と入力します。 「 wsl --set-version <distro> 2
」と入力して、ディストリビューションが WSL 2 を使用するように設定されていることを確認します。
<distro>
をディストリビューション名 (Ubuntu 18.04 など) に置き換えます。
WSL バージョン 1 では、Windows と Linux の基本的な違いにより、Docker エンジンを WSL 内で直接実行できなかったため、Docker チームは、Hyper-V VM と LinuxKit を使用して代替ソリューションを開発しました。 ただし、WSL 2 は完全なシステム呼び出し容量を持つ Linux カーネルで実行されるようになったため、Docker は WSL 2 で完全に実行できます。 つまり、Linux コンテナーはエミュレーションなしでネイティブに実行できるため、Windows ツールと Linux ツール間のパフォーマンスと相互運用性が向上します。
Docker Desktop をインストールする
Docker Desktop for Windows でサポートされている WSL 2 バックエンドを使用すると、Linux ベースの開発環境で作業し、Linux ベースのコンテナーをビルドしながら、コードの編集とデバッグに Visual Studio Code を使用し、Windows 上の Microsoft Edge ブラウザーでコンテナーを実行できます。
Docker をインストールするには ( WSL を既にインストールした後):
Docker Desktop をダウンロードし、インストール手順に従います。
インストールが完了したら、Windows の [スタート] メニューから Docker Desktop を起動し、タスク バーの非表示のアイコン メニューから Docker アイコンを選択します。 アイコンを右クリックして Docker コマンド メニューを表示し、[設定] を選択します。
>] で [WSL 2 ベースのエンジンを使用する] がオンになっていることを確認します。
インストールされている WSL 2 ディストリビューションから、Docker 統合を有効にするディストリビューションから選択します。[設定]、[>]、[>に移動します。
Docker がインストールされていることを確認するには、WSL ディストリビューション (Ubuntu など) を開き、次のように入力してバージョンとビルド番号を表示します。
docker --version
次を使用して、単純な組み込みの Docker イメージを実行して、インストールが正しく動作することをテストします。
docker run hello-world
ヒント
知っておくべきいくつかの役に立つ Docker コマンドを次に示します。
- 次のように入力して、Docker CLI で使用できるコマンドを一覧表示します。
docker
- 特定のコマンドの情報を次のコマンドで一覧表示します。
docker <COMMAND> --help
- お使いのマシン上の Docker イメージ (この時点では hello-world イメージにすぎません) を次の内容で一覧表示します。
docker image ls --all
-
docker container ls --all
またはdocker ps -a
を使用してマシン上のコンテナーを一覧表示します (-a が表示されていない場合は、実行中のコンテナーのみが表示されます) - WSL 2 コンテキストで使用できる統計とリソース (CPU とメモリ) など、Docker のインストールに関するシステム全体の情報を次の内容で一覧表示します。
docker info
VS Code を使用してリモート コンテナーで開発する
WSL 2 で Docker を使用してアプリの開発を開始するには、WSL、Dev Containers、Docker 拡張機能と共に VS Code を使用することをお勧めします。
VS Code WSL 拡張機能をインストールします。 この拡張機能を使用すると、VS Code で WSL で実行されている Linux プロジェクトを開くことができます (パスの問題、バイナリ互換性、またはその他の OS 間の課題について心配する必要はありません)。
VS Code Dev Containers 拡張機能をインストールします。 この拡張機能を使用すると、Visual Studio Code の完全な機能セットを利用して、コンテナー内で開発作業を行うために、コンテナー内のプロジェクト フォルダーまたはリポジトリを開きます。
VS Code Docker 拡張機能をインストールします。 この拡張機能により、VS Code 内からコンテナー化されたアプリケーションをビルド、管理、デプロイする機能が追加されます。 (実際にコンテナーを開発環境として使用するには、Dev Containers 拡張機能が必要です)。
Docker を使用して、既存のアプリ プロジェクトの開発コンテナーを作成しましょう。
この例では、Python 開発環境のセットアップ ドキュメントで 、Django 用の Hello World チュートリアル のソース コードを使用します。独自のプロジェクト ソース コードを使用する場合は、この手順をスキップできます。 gitHub から HelloWorld-Django Web アプリをダウンロードするには、WSL ターミナル (Ubuntu など) を開き、次のように入力します。
git clone https://github.com/mattwojo/helloworld-django.git
注
常に、ツールを使用しているのと同じファイル システムにコードを格納します。 これにより、ファイル アクセスのパフォーマンスが向上します。 この例では、Linux ディストリビューション (Ubuntu) を使用しており、プロジェクト ファイルを WSL ファイル システム
\\wsl\
に格納します。 Windows ファイル システムにプロジェクト ファイルを格納すると、WSL で Linux ツールを使用してこれらのファイルにアクセスするときに、処理速度が大幅に低下します。WSL ターミナルから、このプロジェクトのソース コード フォルダーにディレクトリを変更します。
cd helloworld-django
次のように入力して、ローカル WSL 拡張サーバーで実行されている VS Code でプロジェクトを開きます。
code .
VS Code インスタンスの左下隅にある緑色のリモート インジケーターを確認して、WSL Linux ディストリビューションに接続されていることを確認します。
VS Code コマンド パレット (Ctrl + Shift + P) から、「: Dev Containers: Reopen in Container 」と入力します。WSL 拡張機能を使用して既に開いているフォルダーを使用しているためです。 または、 Dev Containers: Open Folder in Container... を使用して、ローカル
\\wsl$
共有 (Windows 側) を使用して WSL フォルダーを選択します。 詳細については、「Visual Studio Code クイック スタート: コンテナー内の既存のフォルダーを開く 」を参照してください。 入力を開始するときにこれらのコマンドが表示されない場合は、上記でリンクされている Dev Containers 拡張機能がインストールされていることを確認してください。コンテナー化するプロジェクト フォルダーを選択します。 私の場合、これは
\\wsl\Ubuntu-20.04\home\mattwojo\repos\helloworld-django\
プロジェクト フォルダー (リポジトリ) に開発コンテナー構成がまだないため、コンテナー定義の一覧が表示されます。 表示されるコンテナー構成定義の一覧は、プロジェクトの種類に基づいてフィルター処理されます。 Django プロジェクトでは、Python 3 を選択します。
VS Code の新しいインスタンスが開き、新しいイメージのビルドが開始され、ビルドが完了するとコンテナーが開始されます。
.devcontainer
とDockerfile
ファイル内にコンテナー構成情報を含む新しいdevcontainer.json
フォルダーが表示されていることがわかります。プロジェクトが WSL とコンテナー内の両方にまだ接続されていることを確認するには、VS Code 統合ターミナル (Ctrl + Shift + ~) を開きます。 オペレーティング システムを確認するには、「
uname
」と入力し、Python のバージョンを「python3 --version
」と入力します。 uname が "Linux" として返されたので、まだ WSL 2 エンジンに接続されていることがわかります。Python のバージョン番号は、WSL ディストリビューションにインストールされている Python バージョンとは異なる可能性があるコンテナー構成に基づいています。Visual Studio Code を使用してコンテナー内でアプリを実行してデバッグするには、まず [実行 ] メニューを開きます (Ctrl + Shift + D キーを押すか、左端のメニュー バーのタブを選択します)。 次に、[ 実行とデバッグ ] を選択してデバッグ構成を選択し、プロジェクトに最適な構成を選択します (私の例では、これは "Django" になります)。 これにより、アプリの実行方法を示す
launch.json
ファイルがプロジェクトの.vscode
フォルダーに作成されます。VS Code 内から[実行]>[デバッグの開始]を選択します (または F5 キーを押します)。 これにより、VS Code 内にターミナルが開き、「開発サーバーを起動中 http://127.0.0.1:8000/ サーバーを終了するには CONTROL-C を使用」のような結果が表示されます。Controlキーを押しながら表示されたアドレスを選択すると、既定のWebブラウザーでアプリが開き、コンテナー内でプロジェクトが実行されていることを確認できます。
これで、WSL 2 バックエンドを利用した Docker Desktop を使用したリモート開発コンテナーの構成が正常に完了しました。これにより、VS Code を使用してコーディング、ビルド、実行、デプロイ、デバッグを行うことができます。
トラブルシューティング
WSL Docker コンテキストの非推奨
初期の Tech Preview of Docker for WSL を使用していた場合、"wsl" という Docker コンテキストが非推奨になり、使用されなくなった可能性があります。
docker context ls
コマンドで確認できます。 この "wsl" コンテキストを削除すると、Windows と WSL2 の両方に既定のコンテキストを使用する docker context rm wsl
コマンドでエラーを回避できます。
この非推奨の wsl コンテキストで発生する可能性のあるエラーには、 docker wsl open //./pipe/docker_wsl: The system cannot find the file specified.
または error during connect: Get http://%2F%2F.%2Fpipe%2Fdocker_wsl/v1.40/images/json?all=1: open //./pipe/docker_wsl: The system cannot find the file specified.
この問題の詳細については、 Windows 10 上の Windows System for Linux (WSL2) 内で Docker を設定する方法に関する記事を参照してください。
Docker イメージのストレージ フォルダーの検索に関する問題
Docker は、データを格納する 2 つのディストリビューション フォルダーを作成します。
- \wsl$\docker-desktop
- \wsl$\docker-desktop-data
これらのフォルダーを見つけるには、WSL Linux ディストリビューションを開き、「 explorer.exe .
」と入力して、Windows エクスプローラーでそのフォルダーを表示します。 Enter: \\wsl\<distro name>\mnt\wsl
の<distro name>
をあなたのディストリビューション名 (例: Ubuntu-20.04) に置き換えて、このフォルダーを表示します。
WSL での Docker ストレージの場所の検索の詳細については、 WSL リポジトリ または この StackOverflow の投稿からこの問題を参照してください。
WSL の一般的なトラブルシューティングの問題の詳細については、 トラブルシューティングドキュメントを 参照してください。
その他のリソース
Windows Subsystem for Linux