cRIO(RealTimeLinux) C/C++ SDKをDockerで動かす

cRIO(RealTime Linux)用C/C++SDKをDockerで動かす

前回の投稿「 cRIO(RealTimeLinux)用のC/C++クロスコンパイル環境をUbuntu上に作る - 取るに足らないブログ 」では、UbuntuにcRIO(RealTIme Linux)のC/C++ SDKをインストールする話でしたが、 今回は、さらにDockerにC/C++SDKをインストールして、ビルドする環境を作ってみます。

インターネットに接続できてDockerがインストールしてあるPCがあれば、 DockerfileからSDKの入ったコンテナーイメージがすぐに作れます。

LabVIEW開発をメインでやっている人が一時的にC/C++ビルドできる環境を用意したい といった場合は、Dockerでビルドできる環境を作ったほうが楽かもしれない、という話。
実際、Dockerfileは数行だしコピペで作って、Docker buildすれば、あら不思議、30分もかからずに ビルドできる環境が手に入る。いらなくなれば作成したイメージを消せばよい。

C/C++ SDK ダウンロード

ひとまず、必要なのは、cRIO(RealTime Linux)用C/C++SDKです。
以下のページがからダウンロードしてください。

GNU C & C++コンパイルツールx64 のダウンロード - NI

DockerfileとSDKインストーラ

適当なフォルダを作成して、以下のDockerfileと、ダウンロードしたSDKのファイルを配置します。

Dockerfile

From ubuntu:20.04

RUN apt-get update && apt-get install -y \
    python3 \
    cmake \
    ninja-build

RUN cd /tmp; mkdir sdkdir;
COPY oecore-x86_64-core2-64-toolchain-6.0.sh /tmp/sdkdir
RUN chmod +x /tmp/sdkdir/oecore-x86_64-core2-64-toolchain-6.0.sh \
    && /tmp/sdkdir/oecore-x86_64-core2-64-toolchain-6.0.sh
RUN rm -rf /tmp/sdkdir

Docker イメージビルド

DockerfileとSDKインストーラのあるフォルダに移動
Dockerビルドコマンドを実行

  $ docker build -t <tagname>:<version> .

baseは、Ubuntu20.04(64bit)にした。

インストーラをコンテナー側にコピーした後にインストールするのが無駄な気がするが うまい方法が見つからなかったので、ひとまずこのまま。

作成したDocker イメージの確認

  $ docker images

Dockerのイメージサイズが3G超えている。
Ubuntu自体は72Mなので、SDK、その他もろもろの方がでかそう。

Docker コンテナを実行

ホームディクトリにソースを配置するフォルダを作成(以下の例ではworkとした)
ソースをそのフォルダにコピーして、Dockerコンテナーを動かす。

  $ docker run -it --rm -v $PWD:/work <tagname>:<version> /bin/bash

docker では --it /bin/bashとすれば、コンテナ側の端末を開いた状態になるので、 そこで、CMakeやninjaを使ってビルドする、という形になる。
-v で、ソース、プロジェクトのあるフォルダをDockerコンテナ側に割り当てます。

ソースの編集・ビルド

ソースの編集などは、LinuxとかWindowsのVisualStudioCodeなど、ホスト側で使い慣れたもので編集、 ビルドは、Dockerコンテナーの端末から実行する、形になります。

サンプルソース

サンプルソースはこちら

alucky4416 / docker_ubuntu_rtlsdk_x64 · GitLab