Docker#C++開発環境を作ろう

今回の記事ではDocker上でC++アプリケーションを実行する環境を作り、Visual StudioからRemote Debugするまでの構築手順を1から説明します。

また、私はソフトウェアに関してあまり深い知識がないので、間違えたところも多いと思います。そのとき指摘していただければ嬉しいです。

さ、はじめよう。

Reference Link

https://learn.microsoft.com/en-us/cpp/linux/?view=msvc-160

https://devblogs.microsoft.com/cppblog/build-c-applications-in-a-linux-docker-container-with-visual-studio/

https://www.linuxquestions.org/questions/programming-9/running-a-out-files-158541/

Docker Installation

DockerFileを作成します。

# our local base image
FROM ubuntu

LABEL description=”Container for use with Visual Studio”

# install build dependencies
RUN apt-get update && apt-get install -y g++ rsync zip openssh-server make

# configure SSH for communication with Visual Studio
RUN mkdir -p /var/run/sshd

RUN echo ‘PasswordAuthentication yes’ >> /etc/ssh/sshd_config && \
  ssh-keygen -A

# expose port 22
EXPOSE 22-9999

Built the Images

DockerFileを利用しImagesをビルドします。

mkdir yourTestingEnv
cd yourTestingEnv

docker build -t ubuntu-vs .

docker run –p 5000:22 –i -t ubuntu-vs /bin/bash

Confiugre the User

最後はOSのConsoleにLoginし、SSH Serverを起動し、Userを作成しましょう。

<user-name>はUser名に変更してください。

service ssh start
useradd -m -d /home/<username> -s /bin/bash -G sudo <username>
passwd <username>

G++

g++はGCCのGNU C++コンパイラです。

https://stackoverflow.com/questions/1516609/difference-between-cc-gcc-and-g

rsync

rsyncファイルやディレクトリをバックアップ/同期するツールであり、変更を検出して差分のみを転送するため、バックアップや同期をネットワーク経由で効率的に行うことができ、sshなどのリモートシェルからも利用できる。バックアップやミラーリングの目的では、基本的にコピー元とコピー先にはわずかな差分しかないはずで、ファイルの差分だけを転送するrsyncは効率的に動作する。

https://rsync.samba.org/

Ubuntu on remote Linux systems

ターゲットのLinuxシステムには、openssh-server、g++、gdb、makeをインストールする必要があり、またninja-buildはCMakeプロジェクトにのみ必要です。

zip と rsync は、Intellisense をサポートするために、リモート・ヘッダーをローカル・マシンと自動的に同期するために必要です。これらのアプリケーションがまだインストールされていない場合は、以下の手順でインストールしてください:

sudo apt-get install openssh-server g++ gdb make ninja-build rsync zip

https://learn.microsoft.com/en-us/cpp/linux/download-install-and-setup-the-linux-development-workload?view=msvc-170

Configure the Visual Studio

CPPをプログラムするPCにVisual Studioをインストールし、またOther ToolsetsにあるLinux Development with C++のオプションも入れましょう。

今回は試しにConsole Applicationを作成します。

Project>Propertiesを開きます。

Platform Toolset

Platform ToolsetでGCC for Remote Linuxを選びます。

Remote Copy Include Diretories

Remote Copy Include Diretoriesにはリモート環境にCopyするプロジェクトFileを設定します。

Drop-ListからEditをクリックします。

赤枠のICONをクリックします。

新しいCOPY元が追加され、…ボタンをクリックします。

Directoryを設定します。

もしRemote Copy Include Diretoriesを設定しなかった場合、以下のエラーが発生しますので、必ずRemote Copy Include Diretoriesを設定しましょう。

Remote Deploy Directory

次はRemote開発環境の接続環境を設定するため、Remote Deploy DirectoryのDrop-ListからEditをクリックします。

SSH Serverの接続情報を入力しましょう。Formatは以下になります。

your ssh server ip(username=your username,port=your port,authentication=yourpassword)

こちらは設定例です。

192.168.232.136(username=abc,port=5000,authentication=0000000)

Configuration Type

Application(.out)のままにします。

Remote Debug Machine

Debug>yourappname Debug Propertiesを開きます。

Debuggingの項目に接続するRemote Debug Machineを確認しましょう。

Debugging Mode

Debugging Modeをgdbに設定します。

Test the Connection With Remote Machine

Remote Debug Machineの接続をテストするため、Tools>Optionsをクリックします。

Cross Platform>Connection Managerを開くと、先程設定したSSH接続が表示されます。

Verifyをクリックし、Remote SSH Serverの接続をCheckします。

Done!

Open Linux Console

Remote Debug Machineの出力も確認したいので、Debug>Linux Consoleをクリックします。

Applications

今回は環境の構築だけなので、Hallo Worldのプログラムしか入っていません。

Build Solution

Build>Rebuild Solutionでプロジェクトをビルドしましょう。

Done!FileもRemote Debug Machineに転送しました。

Start Debug!

赤枠のボタンでDebugをスタートします。

Done!!!Linux Consoleからアプリケーションの出力を確認できました。

念の為、Remote Debug Machine側にも確認しましょう。ConsoleApplication1.outというFileがあります。

abc@ad1d4c4feb56:~$ ls projects/ConsoleApplication1/bin/x64/Debug/
ConsoleApplication1.out

下記のコマンドでアプリケーションを実行しましょう。

abc@ad1d4c4feb56:~/projects/ConsoleApplication1/bin/x64/Debug$ ./ConsoleApplication1.out
hello from ConsoleApplication1!

Footer_Basic

Please Support some devices for my blog

Amazon Gift List

Find ME

Twitter:@3threes2
Email:soup01threes*gmail.com (* to @)
YoutubeChannel:https://www.youtube.com/channel/UCQ3CHGAIXZAbeOC_9mjQiWQ

シェアする

  • このエントリーをはてなブックマークに追加

フォローする