web-dev-qa-db-ja.com

組み込みシステム上のDocker、なぜですか?

最近、いくつかの(Linux対応の)組み込みデバイスのオーケストレーション、それらへのソフトウェアのデプロイ、およびgitリポジトリでコードベースが更新されたときにアプリケーションを更新できるようにするプロジェクトが投げかけられました。

最初の考えは、各デバイスの標準イメージを作成することでした。私は、UDOOQuadとIntelEdisonにdockerをインストールして開始しようとしましたが、これまで成功しませんでした。

私の考えでは、組み込みデバイスにDockerをインストールするのは良い考えのようですが、そうであれば、確かに今では移植されているはずです。これらの努力をしているように見える唯一のグループはResin.ioです。

私が見逃しているものはありますか、それとも組み込みデバイスでDockerが意味をなさない明確な理由がありますか?理由がなく、組み込みシステムでDockerを実行することが意味がある場合、私が見落としていることがありますか?移植に関する議論の情報源、またはこれをカバーするハウツーはありますか?

11
Bobby

2018年のアップデートは次のとおりです。

RaspbianおよびArmbianオペレーティングシステムイメージの開発が進歩したため、RaspberryPiやOrangePiなどの組み込みデバイスでDockerを非常に簡単に操作できるようになりました。具体的には、両方のタイプのデバイスとそれぞれのOSイメージが、Dockerを問題なくインストールするのに十分なバージョンのカーネルをサポートするようになりました(少なくともバージョン3.10ですが、どちらも4.x +バージョンを提供しています)。

組み込みDockerを使用することで、より高速な変更を望むことが確実に実現できます。私は経験から、あなたが説明するアプローチをテストし、定期的に実行していると言えます。基本的に、RaspbianやArmbianなどの基本オペレーティングシステムイメージから始め、そのオペレーティングシステムを十分に微調整して、安全でDockerがインストールされているようにします。次に、Dockerを使用して開発の反復とアプリケーションの更新を処理します。

余談ですが、組み込みLinuxデバイスでDockerを実行することに興味がある場合は、開発者が複数のデバイスで組み込みDockerを一度に操作できるように、私が作成した無料のオープンソースのMITライセンスコマンドラインツールを確認することをお勧めします。 https://github.com/ForwardLoopLLC/floopcli

ツール自体に興味がない場合でも、ツールのドキュメントには、複数の言語の複数のデバイスでDocker化されたアプリケーションを操作するためのいくつかのパターンが記載されています。 https://docs.forward-loop.com/floopcli/master /index.html 。そこでの資料は、アプリケーションをDockerに移植し、それらを組み込みデバイスにデプロイするための開始点として機能する必要があります。このドキュメントでは、ARMv6とARMv7の違いなど、組み込みデバイスの微妙な点についても説明しています。うまくいけば、これはあなたが始めるのに役立ちます!

3
Nick Settje

組み込みデバイス(mipsシステム)でdockerを実行することを検討しましたが、そのようにはしませんでした。私の謙虚な見方では、それにはいくつかの問題があります。

  1. DockerはGolangに実装されています。現在、mipsをコンパイルするために利用できるツールチェーンはありません。 gcc-goを使用して自分でツールチェーンを作成する必要があります。

  2. Dockerのサイズがlxcよりも大きいです。デスクトップコンピュータでは、これは問題ではありませんが、組み込みデバイスのフラッシュストレージは限られています。

  3. Dockerは、Linuxカーネルの非常に最新の機能を使用します。組み込みデバイスのカーネルバージョンはそれほど新しくなく、それを機能させるにはバックポートが必要な場合があります。

  4. Dockerイメージは、ランタイム環境と同じアーキテクチャで構築する必要があります。つまり、Raspberry PiでDockerコンテナーを実行する場合は、DockerイメージをARMアーキテクチャシステムで構築する必要があります。 QEMUは、クラウドでDockerイメージを構築するために使用できますが、組み込みシステムで使用されるすべてのCPUアーキテクチャをサポートしているわけではありません。 (たとえば、現在MIPSをサポートしていません)

結局、組み込みデバイスでコンテナーを実行するという特定のタスクのためにlxcが選択されました。 Dockerと比較して機能が制限されていますが、現在はプロジェクトの要件に適合しています。

2019年の時点で、ARM cpuを使用して組み込みシステムにポートドッカーを行ったので、この回答を更新したいと思います。フラッシュ使用量、メモリ使用量の価格で、ドッカーを使用するとコンテナーが作成されます管理、イメージ管理、およびDockerハブからイメージを実行する準備ができている多くのイメージ。したがって、決定はコストと機能のバランスです。

9
Jing Qiu
0
Ahmed Samir

多くの場合、組み込みシステムの変更速度は非常に遅いです。 Dockerは、最小限のビルドでうまく機能し、次にその上に階層化します。最小限の組み込みシステムでDockerを実行するオーバーヘッドを犠牲にして、Dockerがビルドシステムと安定した変更率を実現できるようにする場合は、それをエクスプローラーで実行できます。

0
shadowbq