WSL 2 での Docker リモート コンテナーの概要Get started with Docker remote containers on WSL 2

このステップバイステップガイドでは、WSL 2 (windows Subsystem for Linux、バージョン 2) を使用して Docker Desktop For Windows をセットアップすることで、リモートコンテナーを使用した開発を始めることができます。This step-by-step guide will help you get started developing with remote containers by setting up Docker Desktop for Windows with WSL 2 (Windows Subsystem for Linux, version 2).

Windows 用 Docker デスクトップは無料で利用でき、docker 化アプリのビルド、配布、実行のための開発環境を提供します。Docker Desktop for Windows is available for free and provides a development environment for building, shipping, and running dockerized apps. WSL 2 ベースのエンジンを有効にすることで、同じコンピューター上の Docker デスクトップで Linux と Windows の両方のコンテナーを実行できます。By enabling the WSL 2 based engine, you can run both Linux and Windows containers in Docker Desktop on the same machine.

Docker コンテナーの概要Overview of Docker containers

Docker は、コンテナーを使用してアプリケーションを作成、展開、および実行するために使用されるツールです。Docker is a tool used to create, deploy, and run applications using containers. コンテナーを使用すると、開発者はアプリを必要なすべての部分 (ライブラリ、フレームワーク、依存関係など) とともにパッケージ化し、すべてを 1 つのパッケージとして出荷できます。Containers enable developers to package an app with all of the parts it needs (libraries, frameworks, dependencies, etc) and ship it all out as one package. コンテナーを使用すると、カスタマイズされた設定や、アプリを実行しているコンピューターに以前にインストールされていたライブラリが、アプリのコードの記述とテストに使用されたマシンと異なる可能性がある場合でも、アプリが同じように実行されることが保証されます。Using a container ensures that the app will run the same regardless of any customized settings or previously installed libraries on the computer running it that could differ from the machine that was used to write and test the app's code. これにより、開発者は、コードが実行されるシステムの心配をすることなく、コードの記述に集中できます。This permits developers to focus on writing code without worrying about the system that code will be run on.

Docker コンテナーは仮想マシンに似ていますが、仮想オペレーティング システム全体を作成するわけではありません。Docker containers are similar to virtual machines, but don't create an entire virtual operating system. 代わりに、Docker により、アプリが実行されているシステムと同じ Linux カーネルを使用することができます。Instead, Docker enables the app to use the same Linux kernel as the system that it's running on. これにより、アプリ パッケージにはホスト コンピューター上にまだ存在しない部分だけが必要になるため、パッケージ サイズが減り、パフォーマンスを向上させることができます。This allows the app package to only require parts not already on the host computer, reducing the package size and improving performance.

Kubernetes などのツールで Docker コンテナーを使用する、継続的な可用性が、コンテナーの人気のもう 1 つの理由です。Continuous availability, using Docker containers with tools like Kubernetes, is another reason for the popularity of containers. これにより、複数のバージョンのアプリ コンテナーを異なるタイミングで作成できます。This enables multiple versions of your app container to be created at different times. 更新またはメンテナンスのためにシステム全体を停止するのではなく、各コンテナー (およびその特定のマイクロサービス) をすぐに置き換えることができます。Rather than needing to take down an entire system for updates or maintenance, each container (and it's specific microservices) can be replaced on the fly. すべての更新プログラムが含まれた新しいコンテナーを準備し、運用環境用にコンテナーを設定して、新しいコンテナーの準備ができたら、それをポイントするだけです。You can prepare a new container with all of your updates, set up the container for production, and just point to the new container once it's ready. また、コンテナーを使用して異なるバージョンのアプリをアーカイブし、必要に応じて安全のフォールバックとしてそれらを実行し続けることもできます。You can also archive different versions of your app using containers and keep them running as a safety fallback if needed.

詳細については、Microsoft Learn の Docker コンテナーの概要 に関するページを参照してください。To learn more, checkout the Introduction to Docker containers on Microsoft Learn.

前提条件Prerequisites

注意

Wsl は、WSL バージョン1または WSL 2 モードの両方でディストリビューションを実行できます。WSL can run distributions in both WSL version 1 or WSL 2 mode. これを確認するには、PowerShell を開き、「」と入力し wsl -l -v ます。You can check this by opening PowerShell and entering: wsl -l -v. 次のように入力して、ディストリビューションが WSL 2 を使用するように設定されていることを確認し wsl --set-version <distro> 2 ます。Ensure that the your distribution is set to use WSL 2 by entering: wsl --set-version <distro> 2. <distro>をディストリビューション名 (Ubuntu 18.04 など) に置き換えます。Replace <distro> with the distro name (e.g. Ubuntu 18.04).

WSL バージョン1では、Windows と Linux の基本的な違いにより、Docker エンジンは WSL 内で直接実行できませんでした。そのため、Docker チームは、Hyper-v Vm と LinuxKit を使用して代替ソリューションを開発しました。In WSL version 1, due to fundamental differences between Windows and Linux, the Docker Engine couldn't run directly inside WSL, so the Docker team developed an alternative solution using Hyper-V VMs and LinuxKit. ただし、WSL 2 は、完全なシステムコールの容量を持つ Linux カーネルで実行されるようになったため、Docker は WSL 2 で完全に実行できます。However, since WSL 2 now runs on a Linux kernel with full system call capacity, Docker can fully run in WSL 2. つまり、Linux コンテナーはエミュレーションなしでネイティブに実行できるため、Windows と Linux の両方のツール間でパフォーマンスと相互運用性が向上します。This means that Linux containers can run natively without emulation, resulting in better performance and interoperability between your Windows and Linux tools.

Docker Desktop のインストールInstall Docker Desktop

Docker Desktop for Windows でサポートされている WSL 2 バックエンドでは、Linux ベースの開発環境で作業し、コードの編集とデバッグに Visual Studio Code を使用し、Windows の Microsoft Edge ブラウザーでコンテナーを実行できます。With the WSL 2 backend supported in Docker Desktop for Windows, you can work in a Linux-based development environment and build Linux-based containers, while using Visual Studio Code for code editing and debugging, and running your container in the Microsoft Edge browser on Windows.

Docker をインストールするには ( WSL 2を既にインストールした後):To install Docker (after already installing WSL 2):

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

  2. インストールが完了したら、Windows の [スタート] メニューから Docker Desktop を起動し、タスクバーの [非表示のアイコン] メニューから Docker アイコンを選択します。Once installed, start Docker Desktop from the Windows Start menu, then select the Docker icon from the hidden icons menu of your taskbar. アイコンを右クリックして [Docker コマンド] メニューを表示し、[設定] を選択します。Right-click the icon to display the Docker commands menu and select "Settings". Docker デスクトップダッシュボードアイコンDocker Desktop dashboard icon

  3. [設定] > [全般] で [wsl 2 ベースのエンジンを使用する] がオンになっていることを確認します。Ensure that "Use the WSL 2 based engine" is checked in Settings > General. Docker Desktop の全般設定Docker Desktop general settings

  4. [設定] [リソース] [ > Resources > wsl 統合] の順に移動して、Docker 統合を有効にするインストール済みの wsl 2 ディストリビューションを選択します。Select from your installed WSL 2 distributions which you want to enable Docker integration on by going to: Settings > Resources > WSL Integration. Docker デスクトップリソースの設定Docker Desktop resource settings

  5. Docker がインストールされていることを確認するには、次のように入力して、WSL ディストリビューション (Ubuntu など) を開き、バージョンとビルド番号を表示します。 docker --versionTo confirm that Docker has been installed, open a WSL distribution (e.g. Ubuntu) and display the version and build number by entering: docker --version

  6. 次のものを使用して単純な組み込みの Docker イメージを実行することで、インストールが正しく機能することをテストします。 docker run hello-worldTest that your installation works correctly by running a simple built-in Docker image using: docker run hello-world

ヒント

いくつかの便利な Docker コマンドを次に示します。Here are a few helpful Docker commands to know:

  • docker を入力して、Docker CLI で使用できるコマンドを一覧表示します。List the commands available in the Docker CLI by entering: docker
  • docker <COMMAND> --help を使用して、特定のコマンドの情報を一覧表示します。List information for a specific command with: docker <COMMAND> --help
  • docker image ls --all を使用して、お使いのマシン上の docker イメージを一覧表示します (この時点では hello world イメージのみ)。List the docker images on your machine (which is just the hello-world image at this point), with: docker image ls --all
  • コンピューターのコンテナーを一覧表示 docker container ls --all する: または docker ps -a (-a show all フラグを指定しない場合は、実行中のコンテナーのみが表示されます)List the containers on your machine, with: docker container ls --all or docker ps -a (without the -a show all flag, only running containers will be displayed)
  • 次のように、WSL 2 コンテキストで使用可能な統計とリソース (CPU & メモリ) を含む、Docker のインストールに関するシステム全体の情報を一覧表示します。 docker infoList system-wide information regarding the Docker installation, including statistics and resources (CPU & memory) available to you in the WSL 2 context, with: docker info

VS Code を使用したリモートコンテナーでの開発Develop in remote containers using VS Code

WSL 2 で Docker を使用してアプリの開発を開始するには、リモート WSL 拡張機能と Docker 拡張機能と共に VS Code を使用することをお勧めします。To get started developing apps using Docker with WSL 2, we recommend using VS Code, along with the Remote-WSL extension and Docker extension.

  • VS Code Remote WSL 拡張機能をインストールします。Install the VS Code Remote-WSL extension. この拡張機能を使用すると、VS Code の WSL で実行されている Linux プロジェクトを開くことができます (パスの問題、バイナリの互換性、またはその他の OS 間の課題について心配する必要はありません)。This extension enables you to open your Linux project running on WSL in VS Code (no need to worry about pathing issues, binary compatibility, or other cross-OS challenges).

  • VS code Remote-Containers 拡張機能をインストールします。Install the VS code Remote-Containers extension. この拡張機能を使用すると、コンテナー内のプロジェクトフォルダーまたはリポジトリを開くことができます。これにより、Visual Studio Code の完全な機能セットを利用して、コンテナー内で開発作業を行うことができます。This extension enables you to open your project folder or repo inside of a container, taking advantage of Visual Studio Code's full feature set to do your development work within the container.

  • VS Code Docker 拡張機能をインストールします。Install the VS Code Docker extension. この拡張機能により、VS Code の内部からコンテナー化アプリケーションをビルド、管理、およびデプロイする機能が追加されます。This extension adds the functionality to build, manage, and deploy containerized applications from inside VS Code. (実際に開発環境としてコンテナーを使用するには、Remote-Container の拡張機能が必要です)。(You need the Remote-Container extension to actually use the container as your dev environment.)

Docker を使用して、既存のアプリプロジェクトの開発コンテナーを作成しましょう。Let's use Docker to create a development container for an existing app project.

  1. この例では、Python 開発環境の Django に関する Hello World 記事のソースコードを使用して、ドキュメントを設定します。独自のプロジェクトソースコードを使用する場合は、この手順を省略できます。For this example, I'll use the source code from my Hello World tutorial for Django in the Python development environment set up docs. You can skip this step if you prefer to use your own project source code. GitHub から HelloWorld-Django web アプリをダウンロードするには、WSL ターミナル (Ubuntu など) を開き、次のように入力します。 git clone https://github.com/mattwojo/helloworld-django.gitTo download my HelloWorld-Django web app from GitHub, open a WSL terminal (Ubuntu for example) and enter: git clone https://github.com/mattwojo/helloworld-django.git

    注意

    コードは、ツールを使用しているのと同じファイルシステムに常に格納してください。Always store your code in the same file system that you're using tools in. これにより、ファイルアクセスのパフォーマンスが向上します。This will result in faster file access performance. この例では、Linux ディストリビューション (Ubuntu) を使用して、WSL ファイルシステムにプロジェクトファイルを格納し \\wsl\ ます。In this example, we are using a Linux distro (Ubuntu) and want to store our project files on the WSL file system \\wsl\. Windows ファイルシステムにプロジェクトファイルを格納すると、WSL の Linux ツールを使用してこれらのファイルにアクセスするときに、処理が大幅に遅くなります。Storing project files on the Windows file system would significantly slow things down when using Linux tools in WSL to access those files.

  2. WSL ターミナルから、このプロジェクトのソースコードフォルダーにディレクトリを変更します。From your WSL terminal, change directories to the source code folder for this project:

    cd helloworld-django
    
  3. 次のように入力して、ローカルのリモート WSL 拡張サーバーで実行されている VS Code でプロジェクトを開きます。Open the project in VS Code running on the local Remote-WSL extension server by entering:

    code .
    

    VS Code インスタンスの左下隅にある緑色のリモートインジケーターを確認して、WSL Linux ディストリビューションに接続していることを確認します。Confirm that you are connected to your WSL Linux distro by checking the green remote indicator in the bottom-left corner of your VS Code instance.

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

  4. VS Code コマンドパレット (Ctrl + Shift + P) で、「 リモートコンテナー: コンテナー内のフォルダーを開く... 」と入力します。入力を開始したときにこのコマンドが表示されない場合は、上にリンクされているリモートコンテナー拡張機能がインストールされていることを確認してください。From the VS Code command pallette (Ctrl + Shift + P), enter: Remote-Containers: Open Folder in Container... If this command doesn't display as you begin to type it, check to ensure that you've installed the Remote Container extension linked above.

    リモートコンテナーコマンドの VS Code

  5. コンテナー化するプロジェクトフォルダーを選択します。Select the project folder that you wish to containerize. ここでは、次のようになります。 \\wsl\Ubuntu-20.04\home\mattwojo\repos\helloworld-django\In my case, this is \\wsl\Ubuntu-20.04\home\mattwojo\repos\helloworld-django\

    リモートコンテナーフォルダーの VS Code

  6. プロジェクトフォルダー (リポジトリ) に DevContainer 構成がまだないため、コンテナー定義の一覧が表示されます。A list of container definitions will appear, since there is no DevContainer configuration in the project folder (repo) yet. 表示されるコンテナー構成定義の一覧は、プロジェクトの種類に基づいてフィルター処理されます。The list of container configuration definitions that appears is filtered based on your project type. Django プロジェクトの場合は、Python 3 を選択します。For my Django project, I'll select Python 3.

    リモートコンテナー構成定義の VS Code

  7. VS Code の新しいインスタンスが開き、新しいイメージの構築が開始されます。ビルドが完了すると、コンテナーが開始されます。A new instance of VS Code will open, begin building our new image, and once the build completed, will start our container. 新しい .devcontainer フォルダーが、およびファイル内のコンテナー構成情報と共に表示され Dockerfile devcontainer.json ます。You will see that a new .devcontainer folder has appeared with container configuration information inside a Dockerfile and devcontainer.json file.

    VS Code devcontainer フォルダー

  8. プロジェクトが引き続き WSL とコンテナー内の両方に接続されていることを確認するには、VS Code 統合ターミナル (Ctrl + Shift + ~) を開きます。To confirm that your project is still connected to both WSL and within a container, open the VS Code integrated terminal (Ctrl + Shift + ~). 次のように入力してオペレーティングシステムを確認します。 uname python3 --versionCheck the operating system by entering: uname and the Python version with: python3 --version. Uname が "Linux" として返されたので、WSL 2 エンジンにまだ接続していることを確認できます。 Python のバージョン番号は、WSL 分布にインストールされている Python のバージョンとは異なる可能性のあるコンテナーの構成に基づいています。You can see that the uname came back as "Linux", so you are still connected to the WSL 2 engine, and Python version number will be based on the container config that may differ from the Python version installed on your WSL distribution.

  9. Visual Studio Code を使用してコンテナー内でアプリを実行およびデバッグするには、最初に [ 実行 ] メニューを開きます (Ctrl + Shift + D キーを押すか、左端のメニューバーで [] タブを選択します)。To run and debug your app inside of the container using Visual Studio Code, first open the Run menu (Ctrl+Shift+D or select the tab on the far left menu bar). 次に、[ 実行とデバッグ ] を選択してデバッグ構成を選択し、プロジェクトに最適な構成を選択します (この例では "Django" になります)。Then select Run and Debug to select a debug configuration and choose the configuration that best suites your project (in my example, this will be "Django"). これにより、 launch.json プロジェクトのフォルダーにファイルが作成され、 .vscode アプリを実行する手順が表示されます。This will create a launch.json file in the .vscode folder of your project with instructions on how to run your app.

    デバッグ構成を実行 VS Code には

  10. VS Code 内から [デバッグ] [デバッグの開始]を選択し > Start debuggingます (または、 F5キーを押します)。From inside VS Code, select Run > Start debugging (or just press the F5 key). これにより VS Code 内のターミナルが開き、" http://127.0.0.1:8000/ コントロール-C を使用してサーバーを起動しています" という結果が表示されます。This will open a terminal inside VS Code and you should see a result saying something like: "Starting development server at http://127.0.0.1:8000/ Quit the server with CONTROL-C." Ctrl キーを押しながら、表示されるアドレスを選択して、既定の web ブラウザーでアプリを開き、そのコンテナー内で実行されているプロジェクトを確認します。Hold down the Control key and select the address displayed to open your app in your default web browser and see your project running inside of its container.

    Docker コンテナーを実行 VS Code

これで、WSL 2 バックエンドを使用している Docker Desktop を使用してリモート開発コンテナーが正常に構成されました。これは、VS Code を使用してコーディング、ビルド、実行、配置、またはデバッグを行うことができます。You have now successfully configured a remote development container using Docker Desktop, powered by the WSL 2 backend, that you can code in, build, run, deploy, or debug using VS Code!

トラブルシューティングTroubleshooting

WSL docker コンテキストの非推奨WSL docker context deprecated

WSL 用の Docker の早期技術プレビューを使用していた場合は、"wsl" という名前の Docker コンテキストを使用している可能性があります。これは現在非推奨とされ、使用されなくなりました。If you were using an early Tech Preview of Docker for WSL, you may have a Docker context called "wsl" that is now deprecated and no longer used. を確認するには、コマンドを使用 docker context ls します。You can check with the command: docker context ls. この "wsl" コンテキストを削除して、コマンドでエラーを回避できます。 docker context rm wsl Windows と WSL2 の両方に既定のコンテキストを使用します。You can remove this "wsl" context to avoid errors with the command: docker context rm wsl as you want to use the default context for both Windows and WSL2.

この非推奨の 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.Possible errors you might encounter with this deprecated wsl context include: docker wsl open //./pipe/docker_wsl: The system cannot find the file specified. or 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 をセットアップする方法に関する説明を参照してください。For more on this issue, see How to set up Docker within Windows System for Linux (WSL2) on Windows 10.

Docker イメージストレージフォルダーの検索に問題がありますTrouble finding docker image storage folder

Docker では、データを格納するために2つのディストリビューションフォルダーが作成されます。Docker creates two distro folders to store data:

  • \wsl $-dockerdesktop\wsl$\docker-desktop
  • \wsl $/dockerdata\wsl$\docker-desktop-data

これらのフォルダーを見つけるには、WSL Linux ディストリビューションを開き、「」と入力します。エクスプローラー explorer.exe . でフォルダーを表示するには、「」と入力します。You can find these folders by opening your WSL Linux distribution and entering: explorer.exe . to view the folder in Windows File Explorer. 「」と入力します。 \\wsl\<distro name>\mnt\wsl <distro name> は、実際の配布の名前 (ie) に置き換えます。これらのフォルダーを表示するには、Ubuntu-20.04) を参照してください。Enter: \\wsl\<distro name>\mnt\wsl replacing <distro name> with the name of your distribution (ie. Ubuntu-20.04) to see these folders.

WSL で docker ストレージの場所を見つける方法の詳細については、 wsl リポジトリ またはこの stackoverlow の投稿にあるこの問題を参照してください。Find more on locating docker storage locations in WSL, see this issue from the WSL repo or this StackOverlow post.

WSL での一般的なトラブルシューティングの問題の詳細については、 トラブルシューティング に関するドキュメントを参照してください。For more help with general troubleshooting issues in WSL, see the Troubleshooting doc.

その他のリソースAdditional resources