dockerとVisual StudioでLinuxコンソールモジュール開発

Linuxコンソール開発開発

Docker Desktop for Windowsを用いて、Visual Studio 2019でLinux用C++コンソールモジュールを開発できる環境を構築します。UbuntuおよびCentOSのLinuxコンテナを用意して、そこでVisualStudioからビルド・実行・デバッグします。

スポンサーリンク
スポンサーリンク

dockerイメージ

Dockerfileから、各Linuxイメージをビルドします。

作成

Ubuntu・CentOSのイメージを作成します。ベースとなるOSイメージに、SSH Serverとビルドに必要な基本モジュールをインストール、接続ユーザーの作成をしています。各OSのバージョンおよびインストールモジュールは、必要に応じて変更してください(UbuntuイメージHPCentOSイメージ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を用いた開発環境構築の紹介でした。

スポンサーリンク
スポンサーリンク
スポンサーリンク
開発
Tech WalkIt

コメント