バージョン
Visual Studio 2017: 15.9.4
Docker for Windows: Engine: 18.09.0 Compose: 1.23.2
Linux C++ ワークロード
Visual Studio 2017でLinuxターゲットのC++プロジェクトが作れてしまう、クロスプラットフォームな奴。Linuxといいつつ実際はGNUツールチェインが相手なので、Linuxカーネルでなくても使えそう。
SSHでつないでgcc-g++とgdbserverを叩く。
元のDockerイメージ
私のターゲットがAWS Lambdaなので、quiltdata/lambda。
Dockerfile
公開鍵認証でログインしたいところが、Visual Studio 2017の15.9.4はこのバグが再発している模様なので、パスワードでログインする。
たくさんyum installするので時間がかかる。
FROM quiltdata/lambda
ARG USER
RUN yum -y update && yum -y install openssh-server && yum -y install sudo && yum -y install passwd && yum -y install gdb-gdbserver && yum -y install gcc-c++ && yum -y install gdb
RUN adduser $USER && echo abcd | passwd --stdin $USER
RUN echo "$USER ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
RUN sed -ri 's/PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config
CMD /etc/init.d/sshd start && tail -f /dev/null
docker-compose.yml
SSHのポートは2022にフォワーディング。SYS_PTRACEはgdbに必要。
version: '2'
services:
app:
build:
context: .
args:
USER: user1
container_name: lambda
stdin_open: true
tty: true
ports:
- "2022:22"
volumes:
- .:/share
cap_add:
- SYS_PTRACE
security_opt:
- seccomp:unconfined
Dockerイメージのビルド・実行
Dockerfileとdocker-compose.ymlを同じフォルダに入れて、そのフォルダにcdしてdocker-compose build
起こすときはそのフォルダでdocker-compose up -d
寝かすときはそのフォルダでdocker-compose stop
Linux C++ワークロードプロジェクトのリモートデバッグ
Visual Studioのツール→オプション→クロスプラットフォーム→接続マネージャーでSSH接続を追加する。ポートは2022、ユーザ名はuser1、パスワードはabcd。
SSH接続は問題なく作れたのにリモート実行できないときは、ソリューションのリビルド。
参考
amazon linuxのイメージを使用してsshできるコンテナを作る
Build Lambda deployment packages faster with Docker