皆様は自社の組込みシステムにDocker、コンテナを活用されていますか。エンタープライズ由来のDockerですが、組込み製品の開発に採用することにより、別々のシステムで動作していた複数のサービスをアプリケーション実行環境ごとひとつの組込みシステム上に統合し、高付加価値の組込みシステムを構築することができます。

本チュートリアルではDockerについて2本の記事を使ってご紹介します。まず前半となる本記事「はじめて学ぶDocker―コンテナのメリットと活用方法をマスターする」では、Wind River Linuxが標準でサポートしているDockerの特徴と魅力について触れ、組込みシステムにおける活用例をご紹介します。後半の記事「はじめて学ぶDocker―カスタムコンテナイメージの作成・公開・実行までをマスターする」では、実際の使い方はもちろん、Linux Assembly Tools(LAT)を活用してアプリケーションの実行に最適なコンテナをゼロから生成する手順について解説します。併せてご活用ください。



3分でわかるDockerの特徴!

Dockerはコンテナを活用したミドルウェアで、ひとつのシステム上に、仮想的な複数のアプリケーション実行環境を構築することができます。

コンテナとは

コンテナは、アプリケーションやサービスの実行に必要となるライブラリ、ミドルウェア、ユーティリティ、ネットワークインタフェースやストレージの設定といったOSの各種設定を封入したソフトウェアプラットフォームを構築し、仮想的なアプリケーション実行環境を提供する技術です。コンテナはアプリケーションやサービスの実行に必要となるライブラリなど、仮想的なアプリケーション実行環境を提供します。例えばUbuntuコンテナは、アプリケーションから見るとLinuxディストリビューションのUbuntuそのもののように見えます。Dokcerコンテナを実行しているベースOSや、異なるコンテナが同じシステム動作していることの影響を受けません。実行前のオブジェクトをコンテナイメージと呼び、コンテナイメージはコンテナエンジン(DockerではDockerエンジン)によりインスタンス化され、実行されます。


hypervisor
図1:ネイティブ環境で動作するアプリケーションと、コンテナにより統合されたアプリケーション - DockerはLinuxディストリビューションを模倣するインタフェースを定義し、仮想的なアプリケーション実行環境を提供する

コンテナのメリット

Dockerコンテナのベースイメージには、UbuntuやCentOSなどのイメージがあり、これらを利用することにより、仮想的なUbuntuやCentOSの環境をダウンロードするだけで構築することができます。一例を挙げると、ひとつのUbuntuシステム上で動作している画像解析の機械学習のサービスと、別のCentOSシステム上で動作している情報提供サービスに対して、UbuntuベースコンテナイメージとCentOSベースコンテナイメージを準備することにより、ひとつの組込みシステム上にこれらのサービスを同居させ、解析機能と表示機能を兼ね備えた医療機器を実現することができます。このとき、コンテナごとにネットワークインタフェース設定などの環境設定が保持されており、互いに干渉することはありません。そのため、サービスを実行する環境の整合性の不一致などに悩まされることはありません。


hypervisor
図2:Dockerコンテナで、Ubuntu、CentOS、Wind River Linuxのサービスをひとつの組込みシステムに統合する

Dockerコンテナイメージはdocker hubにて配布されており、ダウンロードするだけですぐに使うことができます。ウインドリバーはdocker hubにてWind River LinuxのDockerコンテナイメージを提供しています(https://hub.docker.com/r/windriver/wrlx-image)。Wind River LinuxのDockerコンテナイメージを活用することにより、別々の組込みシステムのWind River Linux上で動作していたサービスを、簡単にひとつのシステム上に統合することができます。


hypervisor


Wind River Linux × Dockerの魅力

LATでつくる最適構成のコンテナイメージ

ウインドリバーの提供するLATは、ひとつのyaml設定ファイルを記述するだけで、アプリケーションに最適なLinuxディストリビューションを作成することができるツールです。LATは通常のOSイメージの作成機能に加えて、コンテナイメージの作成機能を提供しています。LATを活用することによりコンテナ上で実行するサービスに必要最低限の機能のみを備え、不要なリソース消費のないコンテナイメージを準備し、製品に最適なソフトウェアプラットフォームの構築が可能です。


hypervisor
図3:LATで最適構成のコンテナイメージを作成・実行するフロー

Wind River LinuxによるDockerエンジンのサポート

最新のWind River Linuxは標準でDockerエンジンをサポートしています。そのため、Dockerコンテナを実行するためのベースOSとしてWind River Linuxを利用することができます。Wind River Linuxは組込み用途に適した、必要最低限の機能のみを集約できる柔軟性から、ベースOSとなった際も無駄なリソースを消費することなくDockerコンテナの実行に必要な必要最低限のリソースのみを使用して、小フットプリントでシステムを動作させることができます。ソースコード版のWind River Linuxはもちろん、ダウンロードするだけですぐに使うことのできるWind River Linux Distroでも、Dockerをご利用いただけます。

Wind River Linuxの柔軟性については「簡単にカスタマイズ/パッケージ管理ができるLinux Assembly Tools(LAT)」をご参照ください。


コンテナとハードウェア仮想化の違いと、使い分け

ひとつのシステム上に複数のサービスを統合する方法に、ハードウェア仮想化があります。この手法を使うと、システム上に仮想的なハードウェアプラットフォームを定義し、その上にOSをインストールすることで、複数のソフトウェアプラットフォームを同居させることができます。

ハードウェア仮想化が仮想的なハードウェアプラットフォームを提供するのに対して、コンテナは仮想的なLinuxディストリビューションのプラットフォームを提供します。そのため、コンテナはOSのAPIやファイルシステムレベルの仮想化の処理しか必要とせず、ハードウェア仮想化に比べて少ないオーバーヘッドでサービスを同居させることができます。

一方、ハードウェア仮想的はでは仮想的なハードウェアプラットフォームを提供することから、LinuxとRTOS(Wind River LinuxとVxWorks)といった異なる種類のOSをひとつのシステム上に統合することや、重要度の異なるサービス、車載システムで例えるとADAS機能とカーナビゲーション機能を分離し、互いが障害の影響を及ぼすことなく管理することができます。ウインドリバーはハードウェア仮想化を活用した製品として、Helix Virtualization Platformを提供しています。最適なソリューションをご選択ください。 


hypervisor
図4:コンテナとハードウェア仮想化の違い – コンテナは仮想的なLinuxディストリビューションのプラットフォームを提供するのに対し、ハードウェア仮想化はハードウェアプラットフォームを仮想化する(赤枠部分)



こんなに便利!Dockerの活用例

組込みシステムにDockerを活用することにより、別々の環境で動作していたアプリケーション、ユーティリティ、ミドルウェアを統合し、高機能な組込みシステムを実現することができます。

Dockerを利用することにより、それぞれのアプリケーション毎の実行環境を定義できるため、Pythonのバージョンを合わせなければならないといった制約や、各アプリケーションが依存するライブラリのバージョンが異なるといった制約にも対応可能で、互いのアプリケーションの差異を意識することなく統合することができます。例えば、Python2.x系で動作するレガシーなハードウェア制御アプリケーション、Python3.x系で動作する最新の機械学習のアプリケーション、データを管理するMongoDBを使ったデータベースシステム、ユーザーにUIを提供できるnginxベースのWEBアプリケーションをひとつの環境に統合して、高機能なエッジコンピューティング・デバイスを短期間で開発することが可能です。

また、コンテナイメージを取得するだけで様々なアプリケーションを実行できるため、機械学習の知識はあるがデーターベースの環境構築の経験が無い開発メンバーも、手順を誤ることなく手早くデーターベースを活用したアプリケーションを開発することができます。


hypervisor
図5:Dockerの活用例

Wind River LinuxによるDockerの活用には、簡素なアプリケーションの統合だけでなく、AI アプリケーションに人気の高い NVIDIA container runtime を Wind River Linux 上で動作させた例をブログで紹介しています(ブログ掲載時のバージョンとなるため、ご興味のある方は最新バージョンの情報等はお問い合わせください)。

NVIDIA container runtime for Wind River Linux




以上が、コンテナの特徴とメリットです。コンテナを組込みシステムに採用したいと感じた方も多かったかと思います。Wind River Linuxは標準でDockerをサポートしているため、ダウンロードするだけですぐに使いはじめることができます。次回は、「はじめて学ぶDocker―カスタムコンテナイメージの作成・公開・実行までをマスターする」をご紹介します。Wind River Linuxで実際にDockerを使う手順と、アプリケーション向けにカスタマイズしたコンテナイメージを作成する方法についてご紹介します。本記事と併せてご活用ください。


リソース