環境
- Windows 11 WSL2 Debian bullseye
- Docker version 20.10.11
- VS Codeバージョン: 1.66.2
VS CodeにはRemote - Containers 拡張機能をインストールしておきます。ほかは必要ありません。
手順
DockerでC言語を実行
まずDockerfile
を用意します。
FROM debian:bullseye-slim
WORKDIR /app
RUN apt-get update && apt-get install -y \
git \
gcc \
gdb \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
CMD /bin/sh -c "echo '準備完了' && sleep infinity"
apt-get
はお好みでbuild-essential
で必要なものをまとめて入れてもいいと思います。
適当なプログラムを記述します。
# include <stdio.h>
int main()
{
printf("Hello, world.\n");
return 0;
}
Dockerでコンテナをビルドして、実行してみます。
$ docker build . -t myclang
$ docker run --name myclang --interactive --tty --rm --volume $(pwd):/app myclang bash
コンテナ内で、gcc
コマンドでプログラムをコンパイルして実行できます。
# gcc main.c -o main
# ./main
Hello, world.
と表示されたら成功です。
VS CodeでC言語の開発
Dockerコンテナが実行中の間に、VS Codeを起動して、コマンドパレットを起動(Ctrl+Shift+P)して、>Remote-Containers: Attach to Running Container...
を実行すると、VS Codeを起動中のコンテナにアタッチできます。
C/C++ Extension Pack拡張機能をコンテナ内にインストールします。.vscode/extensions.json
をセットしておけば再度コンテナをビルドした時も推奨の拡張機能として表示されます。
{
"recommendations": [
"ms-vscode.cpptools-extension-pack"
]
}
VS Codeのコマンドパレットから>View: Show 実行とデバッグ
を実行し、サイドパネルから「実行とデバッグ」→C++ (GDB/LLDB)
→C/C++: gcc-10
で、デバッグできます。ブレークポイントを貼ったりできます。
今回構築したプロジェクトのソースコードはGitHubにあります。