Docker Desktop for Windowsを用いて、Visual Studio 2019でLinux用C++コンソールモジュールを開発できる環境を構築します。UbuntuおよびCentOSのLinuxコンテナを用意して、そこでVisualStudioからビルド・実行・デバッグします。
dockerイメージ
Dockerfileから、各Linuxイメージをビルドします。
作成
Ubuntu・CentOSのイメージを作成します。ベースとなるOSイメージに、SSH Serverとビルドに必要な基本モジュールをインストール、接続ユーザーの作成をしています。各OSのバージョンおよびインストールモジュールは、必要に応じて変更してください(UbuntuイメージHPとCentOSイメージHP)。
Ubuntuの場合
下記Dockerfile_uファイルを用意します。
ARG VER=20.04 FROM ubuntu:${VER} RUN apt update && apt install -y sudo openssh-server g++ gdb gdbserver && apt autoremove && apt clean RUN service ssh start RUN useradd -m vsuser --groups sudo && echo 'vsuser:P@ssw0rd' | chpasswd EXPOSE 22 CMD ["/usr/sbin/sshd", "-D"] && tail -f /dev/null
Powershellから、下記コマンドでビルドを実行します。
> docker build . -f ./Dockerfile_u -t ssh_server_u
CentOSの場合
下記Dockerfile_cファイルを用意します。
ARG VER=centos7.9.2009 FROM centos:${VER} RUN yum update -y && yum install -y openssh-server gcc gcc-c++ gdb gdb-gdbserver && yum autoremove -y && yum clean all RUN systemctl enable sshd RUN useradd -m vsuser --groups wheel && echo 'vsuser:P@ssw0rd' | chpasswd EXPOSE 22 CMD ["/usr/sbin/init"]
Powershellから、下記コマンドでビルドを実行します。
> docker build . -f ./Dockerfile_c -t ssh_server_c
起動
Ubuntuの場合
下記コマンドでコンテナを起動します。コンテナ名build_ubuntuおよびポート番号8888は任意です。
> docker run --name build_ubuntu -d -p 8888:22 ssh_server_u
CentOSの場合
下記コマンドでコンテナを起動します。コンテナ名build_centosおよびポート番号9999は任意です。
> docker run --privileged --name build_centos -d -p 9999:22 ssh_server_c
起動・接続確認
下記コマンドで、起動を確認します。
> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ab6c1f8150b4 ssh_server_c "/usr/sbin/init" 8 seconds ago Up 7 seconds 0.0.0.0:9999->22/tcp build_centos
b2870f4bedfb ssh_server_u "/usr/sbin/sshd -D" 8 minutes ago Up 8 minutes 0.0.0.0:8888->22/tcp build_ubuntu
sshクライアントが存在するなら、下記コマンドで接続を確認しておきます。ポート番号は、コンテナ起動時の設定値(例では、8888または9999)を用いてください。
> ssh vsuser@127.0.0.1 -p8888
Visual Studio設定
プロジェクトは、[ファイル]-[新規作成]-[プロジェクト]-[C++、Linux、コンソール]の”コンソールアプリケーション“でプロジェクトを作成します。
コンテナ接続設定
Visual Studio 2019を起動し、[ツール]-[オプション]-[クロスプラットフォーム]-[接続マネージャー]にターゲットのコンテナを2つ追加します。
- ホスト名:127.0.0.1
- ポート:8888 (または9999)
- ユーザー名:vsuser
- 認証の種類:パスワード
- パスワード:P@ssw0rd
ビルド
ターゲットコンテナの切り替えは、[プロジェクト]-[ConsoleApplication1のプロパティ]-[構成のプロパティ]-[全般]の”リモートビルドマシン“で行います。ターゲットを切り替えた場合、一度リビルドしたほうが良いようです。
後は、Windows開発時と同じように、ビルド・デバッグ等を操作します。
ビルドが成功すれば、ターゲットコンテナ内では/home/vsuser/projectsフォルダ内に実行モジュール等生成物が格納されます。
コンテナへの接続は、下記コマンドを実行します。
> docker exec -it build_ubuntu bash
> docker exec -it build_centos bash
※CentOSでは、Visual Studioに”リモートマシンに必要なツールがありません。…”と表示されるのですが、コンテナ内に生成モジュールは存在し、正常実行できていました。不都合が生じれば、今後設定を見直します。
まとめ
コンテナを用いれば、複数のLinuxプラットフォームに対しても簡単に開発・動作確認環境を用意できます。環境を壊してしまってもすぐに復旧できるのがコンテナの利点なので、Windows派のユーザーもLinuxに慣れていきましょう。
マイクロソフトのLinux開発環境詳細は、ここに掲載されています。
以上、dockerとVisual Studioを用いた開発環境構築の紹介でした。
コメント