はじめに
Docker Desktopは2022年から大企業向けに有料化されました。
しかし WSL2上にDocker Engineを直接インストール すれば、Docker Desktopなしで同等の開発環境が無料で構築できます。
この記事では、WindowsのVSCodeからDevContainerを使ってC++開発環境を立ち上げるまでを解説します。
この記事でできること
- Docker Desktopなしで、WSL2上のDockerをVSCodeから使う
- C++ + GCC + CMakeが入ったDevContainerを起動する
- Hello Worldをビルド・実行する
対象読者
- WSL2とDockerの基本は知っている方
- Docker Desktopを使わない環境を作りたい方
- VSCodeのDevContainerを試してみたい方
シリーズ構成
| 回 | 内容 |
|---|---|
| 第1弾(本記事) | 環境構築 → Hello World |
| 第2弾 | CMake + vcpkg で本格プロジェクト |
| 第3弾 | C#編(.NET + DevContainer) |
構成の全体像
Windows
└── VSCode(Dev Containers拡張)
└── WSL2(Ubuntu)
└── Docker Engine(Docker Desktop不使用)
└── DevContainer
└── C++環境(GCC + CMake)
ポイントは Docker Engineの実体はWSL2側にある という点です。
VSCodeのDev Containers拡張が「WSL2上のDockerを使う」設定になっていれば、Windows側にDocker Desktopは不要です。
前提条件
- Windows 10 バージョン2004以上(ビルド19041以上)またはWindows 11
- WSL2がインストール済みで、デフォルトディストリビューションがUbuntu
- VSCodeがインストール済み
WSL2のインストール方法は 公式ドキュメント を参照してください。
Step 1: WSL2上にDocker Engineをインストールする
WSL2(Ubuntu)上で作業します。
競合パッケージの削除
for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do
sudo apt-get remove $pkg
done
Docker公式リポジトリの追加
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Docker Engineのインストール
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io \
docker-buildx-plugin docker-compose-plugin
sudoなしでdockerコマンドを使えるようにする
sudo usermod -aG docker $USER
一度ログアウト・再ログインして反映させます。
動作確認
docker --version
Docker version 28.3.2, build 578ccf6
docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
4f55086f7dd0: Pull complete
Digest: sha256:f9078146db2e05e794366b1bfe584a14ea6317f44027d10ef7dad65279026885
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
...
Hello from Docker! と表示されれば成功です。
初回はイメージのダウンロードが走りますが、次回以降はキャッシュが使われるので即座に起動します。
Step 2: Docker Engineの自動起動を確認する
WSL2はWindowsと一緒に起動しますが、サービスが自動起動するかどうかはsystemdの設定次第です。
まず現在の状態を確認します。
systemctl is-enabled docker
systemctl status docker
enabled
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; preset: enabled)
Active: active (running) since Fri 2026-04-17 08:07:36 JST; 6min ago
Main PID: 260 (dockerd)
...
enabled かつ active (running) であれば自動起動は設定済みです。
自動起動が設定されていない場合
disabled または inactive と表示された場合は以下を実行します。
① systemdを有効化する(/etc/wsl.conf を確認・作成)
cat /etc/wsl.conf
systemd=true の記載がなければ追記します。
sudo bash -c 'cat >> /etc/wsl.conf << EOF
[boot]
systemd=true
EOF'
PowerShellからWSL2を再起動します。
wsl --shutdown
wsl
② Dockerの自動起動を有効化する
sudo systemctl enable docker
sudo systemctl start docker
再度 systemctl status docker で active (running) になっていれば完了です。
Step 3: VSCodeの拡張機能を設定する
拡張機能のインストール
VSCodeに以下の拡張機能をインストールします。
-
Dev Containers (
ms-vscode-remote.remote-containers) -
WSL (
ms-vscode-remote.remote-wsl)
Dev Containers拡張の設定
Dev Containers 拡張の設定で Execute in WSL を有効にします。
- VSCodeの設定(
Ctrl+,)を開く - 検索欄に
Execute in WSLと入力 - Dev > Containers: Execute In WSL にチェックを入れる
タイトルバーとステータスバーに 開発コンテナー: C++ Development と表示されている状態で確認すると、DevContainerとWSLが正しく連携していることがわかります。
補足:複数のPCでVSCodeの設定を同期している場合、この設定は同期から外しておくことをおすすめします(環境依存の設定のため)。
Step 4: C++用DevContainerを作成する
Windowsのエクスプローラーで作業フォルダを作成し、VSCodeで開きます。
ここでは C:\projects\hello-cpp とします。
.devcontainerフォルダの作成
VSCodeのターミナルで以下を実行します。
mkdir .devcontainer
devcontainer.jsonの作成
.devcontainer/devcontainer.json を以下の内容で作成します。
{
"name": "C++ Development",
"image": "mcr.microsoft.com/devcontainers/cpp:1-ubuntu-24.04",
"customizations": {
"vscode": {
"extensions": [
"ms-vscode.cpptools",
"ms-vscode.cmake-tools",
"xaver.clang-format"
],
"settings": {
"editor.formatOnSave": true
}
}
},
"postCreateCommand": "gcc --version && cmake --version"
}
ポイント
-
mcr.microsoft.com/devcontainers/cppはMicrosoft公式のC++開発用イメージです - GCC、CMake、clang-formatがあらかじめ入っています
-
postCreateCommandでコンテナ起動後にバージョン確認が走ります
Step 5: DevContainerを起動する
- VSCodeの左下にある リモートメニュー(
><アイコン)をクリック - コンテナーで再度開く を選択
⚠️ 通知バナーの「コンテナーで再度開く」ボタンではなく、左下のリモートメニューから操作してください。パスの問題でエラーになる場合があります。
初回はイメージのダウンロードが走るので少し時間がかかります。
起動が完了すると、devcontainer.json に書いた拡張機能が自動でインストールされます。
Extension 'ms-vscode.cpp-devtools' v0.4.6 was successfully installed.
Extension 'ms-vscode.cmake-tools' v1.23.51 was successfully installed.
Extension 'ms-vscode.cpptools' v1.31.4 was successfully installed.
VSCodeのウィンドウ左下が 開発コンテナー: C++ Development に変われば起動成功です。
設定を書くだけでC++開発に必要な拡張機能が揃うのがDevContainerの便利なところです。
Step 6: Hello Worldを書いてビルドする
ソースファイルの作成
main.cpp を作成します。
#include <iostream>
int main() {
std::cout << "Hello, World!" << std::endl;
return 0;
}
ビルドと実行
DevContainer内のターミナルで実行します。
g++ -std=c++23 -o hello main.cpp
./hello
Hello, World!
C++23まで対応したGCCでコンパイルできています。
まとめ
| 項目 | 内容 |
|---|---|
| Docker Desktop | 不要(無料) |
| Docker Engine | WSL2(Ubuntu)上にインストール |
| VSCode設定 | Dev Containers拡張の「Execute in WSL」を有効化 |
| C++イメージ | mcr.microsoft.com/devcontainers/cpp |
| コンパイラ | GCC(C++23対応) |
Windows側にdocker.exeやdocker-compose.exeは不要です。
DevContainer開発においては、VSCodeがWSL2のDockerを直接操作するため、Windows側のDockerコマンドは使われません。
次回予告
第2弾 では、CMakeによるプロジェクト構成とvcpkgによるライブラリ管理を導入し、より本格的なC++開発環境を作ります。
-
CMakeLists.txtの書き方 - vcpkgでEigenやGoogle Testを追加する
- クロスプラットフォームなビルド設定
参考
- WSL2でDocker環境構築(Docker Desktop有料化対策) - Qiita
-
WSL2上のDockerをWindows上のVSCodeから操作する - Zenn
- ※ C++開発用途ではWindows側のDocker CLIは不要と判断し、本記事ではWSL2側のみの構成にしています
- Install Docker Engine on Ubuntu - Docker Docs
- Dev Containers - VSCode Docs
- microsoft/vscode-dev-containers - GitHub
