Docker ツールチェーン
Docker コンテナーでの開発を目的として、CLion は専用の Docker ツールチェーンを介して完全な Docker 統合を提供します。 詳細については、このビデオを参照してください。
サンプル Dockerfile
CLion で Docker 開発を始めるために、Ubuntu ベースイメージ用の Dockerfile の例を作成しました。 このファイルをプロジェクトにコピーしてニーズに合わせて調整するか、参照として使用することができます。
サンプルファイルには、次の行とセクションが含まれています。
上部のコメントには、コンテナーを 構築するためのコマンドがあります。
FROM ubuntu:20.04行は、コンテナーのベースイメージを参照します。apt-getパーツは、すべてのツールチェーンの依存関係をコンテナーにインストールします。 ここでは、ツールとそのバージョンを調整できます。
コンテナーを構築する
Dockerfile の先頭から
docker buildコマンドを実行します。docker build -t clion/ubuntu/cpp-env:1.0 -f Dockerfile.cpp-env-ubuntu .プラットフォームと Docker 設定によっては、
sudoを使用して実行する必要がある場合があります。このコマンドは、適切なツールチェーンの依存関係を持つ Ubuntu ベースイメージを構築します。
Docker ツールチェーンを作成する
に進みます。
をクリックし、 Docker を選択します。

サーバー フィールドの歯車ボタンをクリックして、Docker イメージを追加します。

で Docker サーバーを構成し、ツールチェーン設定でそれを選択することもできます。
Docker イメージを選択し、ツールの検出が完了するまで待ちます。

コンテナー設定 フィールドを使用して、ポートやボリュームのバインディングなどの追加のコンテナー設定を提供します。

Docker ツールチェーンを使用したビルド、実行、デバッグ
Docker ツールチェーンを構成した後、 CMake プロファイルまたは Makefile 設定で選択できます。 または、ツールチェーンをリストの一番上に移動して、デフォルトにします。

プロジェクトフォルダーは Docker コンテナーにマウントされ、その中でビルド / 実行 / デバッグが実行されます。
デフォルトでは、プロジェクトフォルダーはコンテナーの /tmp フォルダーにマウントされます。 ただし、 ツールチェーンでパスマッピングが指定されている場合、CLion はそれらを使用します。
例えば、プロジェクトルートが /data/code/project でツールチェーンパスマッピングが /data/code -> /code の場合、CLion はこのマッピングを再利用し、プロジェクトを /tmp/project にマウントしません。
CLion はコマンド実行後にコンテナーを起動し、シャットダウンします。
SELinux でマウントをバインドする
:z 構成フラグを Docker バインドマウントに追加して、SELinux が有効なワークステーションで実行されているコンテナーにファイルとフォルダーを接続できます。 これにより、CMake やその他のツールがシステム上のプロジェクトファイルやその他のファイルにアクセスできるようになります。
に進みます。
対応するチェックボックスを設定します:

Windows での Docker ツールチェーンのパフォーマンスを向上させる
Windows でのパフォーマンスを向上させるには、WSL2 バックエンドで Docker を使用することをお勧めします。
Docker デスクトップアプリケーションで、 に移動し、WSL ディストリビューション(たとえば、
ubuntu-20.04)との統合を有効にします。プロジェクトソースを WSL ファイルシステム(例: \\wsl$\ubuntu-20.04\tmp\llvm )に配置し、それを CLion で開いて Docker ツールチェーンを構成します。
WSL で Docker のデバッグ出力を有効にする
WSL 内の Docker ツールチェーンを使用してデバッグするときにデバッグ出力を取得するには、 wsl.conf を変更する必要があります。
WSL シェルを開きます。
wsl.conf ファイルを編集のために開きます。
sudo $EDITOR /etc/wsl.conf以下の行を追加してください。
[automount] root = /mnt crossDistro = true options = "metadata"変更内容を保管します。
WSL を再起動します。 これを行うには、
wsl -t <distribution_name>を実行します。
代替ワークフロー: ローカルソースでリモートを使用して Docker で開発する
この場合、Docker ベースのツールチェーンは、 ローカルソースを使用してリモートを介して構成されます。 コンテナーは SSH デーモンで実行されている必要があります。
リモートシナリオのサンプル Dockerfile
remote-cpp-env(英語) サンプルファイルを使用します。 2 つの追加セクションが含まれています。
sshセクションでは、CLion が接続するための SSH を設定します。ユーザーセクションは、コンテナーにユーザーを作成します。
1。 コンテナーを構築する
Dockerfile の上から
docker build行を使用します。docker build -t clion/remote-cpp-env:0.5 -f Dockerfile.remote-cpp-env .プラットフォームと Docker 設定によっては、
sudoを使用して実行する必要がある場合があります。このコマンドは、適切なツールチェーンの依存関係を使用して Ubuntu ベースイメージを構築し、SSH を設定して、ユーザーを作成します。
2。 コンテナーを実行する
次のコマンド
docker runを使用します。docker run -d --cap-add sys_ptrace -p127.0.0.1:2222:22 --name clion_remote_env clion/remote-cpp-env:0.5この行では、
-dがコンテナをデーモンとして実行し、--cap-add sys_ptraceがデバッグに必要なptraceのケーパビリティを追加します。-p部分は、ポートマッピングを指定します。 コンテナー(22)内のデフォルトの SSH ポートをホスト環境のポート 2222 として公開します。 ここで使用可能なポート番号を指定できます。(オプション)
-vフラグを使用してマップされたボリュームを作成できます:-v /local/path/to/project:/remote/path/to/projectその後、 に移動し、接続タイプを ローカルまたはマウント済みフォルダー に変更して、パスマッピングを設定します。 ローカルソースを使用したリモート: デプロイ構成を確認して調整するを参照してください。
3。 キャッシュされた SSH キーをクリアする
コンテナのビルドと実行の最後のステップは
ssh-keygenコマンドで、キャッシュされた SSH キーをクリアします。 これは、localhost のポートが一時的にしかマッピングされず、異なるコンテナーで再利用されるため重要です。ssh-keygen -f "$HOME/.ssh/known_hosts" -R "[localhost]:2222"
4。 リモートホストツールチェーンを作成する
この時点で、コンテナーは SSH サーバーデーモンで実行されており、CLion の標準リモート開発機能を使用してコンテナーに接続できます。
リモートツールチェーンの作成に関する一般的な手順に従います。
資格情報 フィールドで、SSH 構成をセットアップします。
ホスト - ローカルホスト
ポート-2222
ユーザー名パスワード - Dockerfile で指定されているとおり
接続を確立した後、CLion はツールチェーンの検出を試みます。 ツールはデフォルトの場所にインストールされているため、自動的に検出されます。
Dockefile の
apt-get部分を変更してツールを他の場所にインストールする場合は、 Make、 C コンパイラー、 C++ コンパイラー、 デバッガー フィールドにパスを指定します。リモートツールチェーンを使用する CMake プロファイルを作成します。 プロジェクトが再読み込みされるのを待ちます。
ファイルがコンテナーに転送されたら、実行 / デバッグ構成スイッチャーでプロファイルを選択して、指定したツールチェーンを使用してコンテナー内でコードをビルド、実行、デバッグできます。