次の方法で共有


WSL 2 で Docker リモート コンテナーを開始する

このステップ バイ ステップ ガイドは、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 コンテナーの概要」を参照してください。

[前提条件]

詳細については、 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 を既にインストールした後):

  1. Docker Desktop をダウンロードし、インストール手順に従います。

  2. インストールが完了したら、Windows の [スタート] メニューから Docker Desktop を起動し、タスク バーの非表示のアイコン メニューから Docker アイコンを選択します。 アイコンを右クリックして Docker コマンド メニューを表示し、[設定] を選択します。 Docker Desktop ダッシュボード アイコン

  3. >] で [WSL 2 ベースのエンジンを使用する] がオンになっていることを確認します。 Docker Desktop の全般設定

  4. インストールされている WSL 2 ディストリビューションから、Docker 統合を有効にするディストリビューションから選択します。[設定]、[>]、[>に移動します。 Docker Desktop のリソース設定

  5. Docker がインストールされていることを確認するには、WSL ディストリビューション (Ubuntu など) を開き、次のように入力してバージョンとビルド番号を表示します。 docker --version

  6. 次を使用して、単純な組み込みの 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 を使用して、既存のアプリ プロジェクトの開発コンテナーを作成しましょう。

  1. この例では、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 ツールを使用してこれらのファイルにアクセスするときに、処理速度が大幅に低下します。

  2. WSL ターミナルから、このプロジェクトのソース コード フォルダーにディレクトリを変更します。

    cd helloworld-django
    
  3. 次のように入力して、ローカル WSL 拡張サーバーで実行されている VS Code でプロジェクトを開きます。

    code .
    

    VS Code インスタンスの左下隅にある緑色のリモート インジケーターを確認して、WSL Linux ディストリビューションに接続されていることを確認します。

    VS Code WSL リモート インジケーター

  4. 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 拡張機能がインストールされていることを確認してください。

    VS Code Dev Containers コマンド

  5. コンテナー化するプロジェクト フォルダーを選択します。 私の場合、これは \\wsl\Ubuntu-20.04\home\mattwojo\repos\helloworld-django\

    VS Code Dev Containers フォルダー

  6. プロジェクト フォルダー (リポジトリ) に開発コンテナー構成がまだないため、コンテナー定義の一覧が表示されます。 表示されるコンテナー構成定義の一覧は、プロジェクトの種類に基づいてフィルター処理されます。 Django プロジェクトでは、Python 3 を選択します。

    VS Code Dev Containers の構成定義

  7. VS Code の新しいインスタンスが開き、新しいイメージのビルドが開始され、ビルドが完了するとコンテナーが開始されます。 .devcontainerDockerfile ファイル内にコンテナー構成情報を含む新しいdevcontainer.json フォルダーが表示されていることがわかります。

    VS Code .devcontainer フォルダー

  8. プロジェクトが WSL とコンテナー内の両方にまだ接続されていることを確認するには、VS Code 統合ターミナル (Ctrl + Shift + ~) を開きます。 オペレーティング システムを確認するには、「 uname 」と入力し、Python のバージョンを「 python3 --version」と入力します。 uname が "Linux" として返されたので、まだ WSL 2 エンジンに接続されていることがわかります。Python のバージョン番号は、WSL ディストリビューションにインストールされている Python バージョンとは異なる可能性があるコンテナー構成に基づいています。

  9. Visual Studio Code を使用してコンテナー内でアプリを実行してデバッグするには、まず [実行 ] メニューを開きます (Ctrl + Shift + D キーを押すか、左端のメニュー バーのタブを選択します)。 次に、[ 実行とデバッグ ] を選択してデバッグ構成を選択し、プロジェクトに最適な構成を選択します (私の例では、これは "Django" になります)。 これにより、アプリの実行方法を示す launch.json ファイルがプロジェクトの .vscode フォルダーに作成されます。

    VS Code のデバッグ構成の実行

  10. VS Code 内から[実行]>[デバッグの開始]を選択します (または F5 キーを押します)。 これにより、VS Code 内にターミナルが開き、「開発サーバーを起動中 http://127.0.0.1:8000/ サーバーを終了するには CONTROL-C を使用」のような結果が表示されます。Controlキーを押しながら表示されたアドレスを選択すると、既定のWebブラウザーでアプリが開き、コンテナー内でプロジェクトが実行されていることを確認できます。

    Docker コンテナーを実行している VS Code

これで、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 の一般的なトラブルシューティングの問題の詳細については、 トラブルシューティングドキュメントを 参照してください。

その他のリソース