SlideShare ist ein Scribd-Unternehmen logo
1 von 26
Downloaden Sie, um offline zu lesen
How to Build a
Docker Container for Raspberry Pi
in the Cloud.
Raspberry Pi⽤Dockerコンテナをクラウドでビルドする
2019/May/24
(C) Copyright 1996-2019 SAKURA Internet Inc
SAKURA Internet
Research Center.
Senior Researcher
KIKUCHI Shunsuke
菊地 俊介
SAKURA Internet Inc.
Table of Contents
Part 0.
Motivation, Background. / なにがやりたいのか
Part 1.
How to use Container on Raspberry Pi.
Raspberry Piでコンテナを動かす
Part 2.
How to build Container for Raspberry Pi in the cloud.
Raspberry Piのコンテナをクラウドでビルドする
2
Self Introduction
菊地 俊介 (東京都出⾝、品川区在住)
4
所属 さくらインターネット研究所
経歴 早稲⽥⼤学⼤学院 卒
富⼠通(株)富⼠通研究所
ネットの研究やったり、トイレIoT作ったり
さくらインターネット研究所
データ流通実証実験、Fogコンピューティング、
AR/VR、量⼦(アニーリング)コンピュータ
専⾨ エッジ・Fogコンピューティング
(分散系システムのあたり)
趣味 新技術調査、家庭内IoT、⾞、鉄道
Part 0.
Motivation / なにがやりたいのか
4
Use Raspberry Pi for Iot and Fog Computing Implementation.
• IoTやそれを発展させたサイバーフィジカル・システ
ムによる、実世界(現場)の⾼度化が今ホット。
• 本業として、コンピューティングリソースが現場に溶
け込んでいく(近)未来の実現にむけて、エッジコン
ピューティング・Fogコンピューティングを研究開発。
• IoT、Fogコンピューティングの実装に今⼀番便利なの
はRaspberry Pi。
5
IoT with Raspberry Pi.
• 最もお⼿軽なIoTマシン。
• GPIOが使えて、Linuxが動く。
• すでにエコシステム(豊富な3rdパーティ部品、開発ノウハ
ウ)が確⽴。
6
さくらインターネット研究所
で実施中の、
Raspberry Piを⽤いた
Fogコンピューティング試作
• たくさんのRaspberry Piを並べてFogシステムを作りたい。
ラズパイ+コンテナで / Raspberry Pi with Container Technology
• 台数が増えてくると、個々のRaspberry Piに対して作
業をしていられなくなる。
• →デプロイシステムがほしい
• 台数が増えてくると、個々のRaspberry Piに対して状
態管理をしていられなくなる。
• →マネジメントシステムがほしい
• Raspberry Piとコンテナエコシステム(Docker,
Docker-compose, Kubernetes)を組み合わせて
使いたい。システムの開発の⾼度化(CI/CD)を実現
したい。
7
Part 1.
Raspberry Piでコンテナを動かす
How to use Container on Raspberry Pi.
8
ラズパイでの開発⼿法 / Developing Method with Raspberry Pi.
9
プログラム
作業マシン
Raspberry Pi
…
• Raspberry Piでもコンテナベースの開発に移⾏したい
コンテナ
作業マシン …
Docker
Raspberry Pi
DockerFile
• →できます。しかもそれほど難しくなく。
ラズパイでもDocker(コンテナ)使えます / Raspberry Pi + Docker is available.
• RaspbianOSに(普通に)Docker⼊ります。
• ただし、Rasperry Pi Zero(WH)もターゲットにする場合は
version=18.06.3まで。
• それ以降だとZeroでインストールできなくなる。
• Docker-Composeは、(⼊るけど)インストールが難しい
• 本家からはRaspberry Pi(arm7l)⽤バイナリが提供されていない。
• ⾃前でビルド必要だがエラーで⽌まる等、⼀筋縄ではいかない。
• pipで⼊れるのが楽。
• https://qiita.com/Amb98/items/23b455a83c8a6dacaa5b
• Kubernetesも使えます。
• k3sで動作確認できた。(本発表ではスコープ外とします)
10
$ sudo apt-get update
$ sudo apt-get install curl
$ curl -sSL https://get.docker.com | VERSION=18.06.3 sh
GPIOやI2Cにもアクセス可能 / Can use GPIO and I2C from Container
• コンテナ使えれば楽なのはわかっているのだけど、コ
ンテナじゃRaspberry Pi固有のハードウェアにアクセ
スできないのでは...?
• →ファイルシステムとして⾒えているハードウェアであれば、
ホストデバイスへのアクセスを指定することで、扱えます。
11
$ docker run --name app --device /dev/gpiomem --device /dev/i2c-1 -d app
コンテナのアプリから、
GPIO(焦電センサ)と
i2cデバイス(LEDアレイ)に
アクセスしている様⼦
Part 2.
Raspberry Piのコンテナをクラウドでビルドする
How to build Container for Raspberry Pi
in the Cloud.
12
ラズパイでもDocker(コンテナ)使えます、が...
• Raspberry Piではコンテナイメージビルドが遅い...
• ちょっとアプリを作り込み始めると、buildに30分とかざら。
13
コンテナ
作業マシン …
Docker
Raspberry Pi
DockerFile
作業マシン
Raspberry Pi
Docker
Cloud
DockerFile
Container Build
Idea : クラウド上でコンテナイメージビルドできれば早くなるんじゃ...?
クラウド上でRaspberry Piのコンテナイメージをビルドするには
How to build a Container Image in the Cloud : Problem
• ⼀⾒簡単そうに思えるが、実はそうでもなかった。
• Raspberry PiはARMプロセッサ搭載だから、同じARM採⽤のサーバでイ
メージビルドすればOK ?!
• Amazon EC2 A1インスタンス、Packetクラウド ARMベアメタルサーバなどARM
サーバのクラウドも出始めているので。
• 難しさの原因
• Raspberry Pi 3B+は64bit ARMプロセッサ搭載
• Raspberry Pi Zeroなどは32bit ARMプロセッサ搭載
• 下位互換性確保のため︖か、RaspbianOSは32bitOSとして作られている
• →Raspberry Pi⽤イメージは32bit(armhf/armv7l)で作成する必要がある
• ⼀⽅、世の中のほとんどのARMサーバとOSは、64bit(arm64/armv8l)へ
の移⾏を済ませている
• ARMサーバ上でさっとイメージビルドしてRaspberry Piに持ってくる、
という訳にはいかない 14
Special Thanks!! to
Mr. Nishinaga, Mr. Hiramatsu
クラウド上でRaspberry Piのコンテナイメージをビルドする⽅法
How to build a Container Image in the cloud : 2 Approaches
• 2つのアプローチ
• アプローチ1︓x86サーバ上のarmhfエミュレーション環境
でのイメージビルド
• アプローチ2︓ARMプロセッサ搭載サーバでのバイナリ互
換モードを利⽤したイメージビルド
15
Raspberry Pi
armhf
x86 Server
x86_64
armhf
ARM Server
arm
v8l
arm
hf
Approach1
Approach2
Approach1 : multi-arch Project
• multi-archプロジェクトのツール・コンテナを利⽤す
ることで、x86アーキのマシン上でターゲットアーキ
(armhf)のバイナリ(コンテナ)を作成する事が可能
• https://github.com/multiarch
• 動作原理
• qemu + binfmt-misc + docker
• (= ターゲットアーキエミュレーション + シームレスバイ
ナリ実⾏ + 環境アイソレーション)
16
x86 Server
armhf
binfmt-miscにより、バイナリフォー
マットの種別に応じて任意のコマンド
(エミュレータ)を実⾏させられる
x86_64
armhfフォーマットのバイナリ
群で構成したコンテナ環境
qemuによりarmhf バイナリを
エミュレーション実⾏
「qemu + binfmt-misc + chroot」は10年前から存在する技術 http://blog.kmckk.com/archives/2342452.html
Approach1 : multi-arch Project example.
• 実際の使い⽅例(1/2)
17
[root@fogregistry qemu]# uname -a
Linux fogregistry 3.10.0-957.5.1.el7.x86_64 #1 SMP Fri Feb 1 14:54:57 UTC 2019
x86_64 x86_64 x86_64 GNU/Linux
[root@fogregistry qemu]# docker run --rm --privileged multiarch/qemu-user-
static:register
...<snip>...
[root@fogregistry qemu]# docker build -t armhf-artful-vim -f Dockerfile .
...<snip>...
[root@fogregistry qemu]# docker run -it --rm armhf-artful-vim:latest bash
root@e8418d14f0e5:/# uname –a
Linux e8418d14f0e5 3.10.0-957.5.1.el7.x86_64 #1 SMP Fri Feb 1 14:54:57 UTC 2019
armv7l armv7l armv7l GNU/Linux
root@e8418d14f0e5:/# file /bin/bash
/bin/bash: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked,
interpreter /lib/ld-linux-armhf.so.3, for GNU/Linux 3.2.0,
BuildID[sha1]=c2fac9c07846ccd7daa2c96126fa93ce863b2ea4, stripped
root@e8418d14f0e5:/# exit
exit
[root@fogregistry qemu]#
←これだけ︕
Approach1 : multi-arch Project example. (Contʼd)
• 実際の使い⽅例(2/2)
18
Dockerfileで、ベースになるイメージを指定する
FROM multiarch/ubuntu-core:armhf-bionic
RUN apt-get update && ¥
apt-get install -y vim
root@e8418d14f0e5:/# cd /usr/bin
root@e8418d14f0e5:/usr/bin# ls q*
qemu-arm-static
root@e8418d14f0e5:/usr/bin#
コンテナの内部に、qemu本体が含まれる
←armhfを指定
Approach 2 : ARMサーバ上でバイナリ互換を利⽤する⽅法
Approach 2 : Binary Compatibility by ARM chip/Server
• 調査したものの、⽅法を発⾒できず。
• armv8lマシン上でarmhfのバイナリを実⾏する⽅法⾃体は
存在している。
• http://arch.jpn.org/archives/272
• arm32のバイナリを作る⽅法は、クロスコンパイル環境を
構築するしかない︖
• その環境をdockerコンテナ内に隔離する⽅法は︖
• 詳しい⽅のご助⼒をお願いしたい
19
ARM Server
arm
v8l
arm
hf
性能評価 / Performance Evaluation
• Raspberry Pi 3B+で直接コンテナをつくる場合に⽐べて、
• x86サーバ上でarmhfコンテナイメージを作成する場合
• (ARMv8lサーバ上でarmv8lコンテナイメージを作成する場合、参考情報)
について作成時間を評価した。
計測⽅法
• docker/docker-composeのコンテナビルド時間をtimeコマンドで計測
評価環境
1. Raspberry Pi 3B+ / Raspbian OS(stretch)
2. x86_64 1コア1GBメモリ、SSD、さくらのクラウド上 / Ubuntu 18.04.3
3. x86_64 2コア1GBメモリ、SSD、さくらのクラウド上 / Ubuntu 18.04.3
4. ARM64 64コア256GBメモリ、HDD(?)、 HP Apollo 70 System,
(ThinderX2) / Ubuntu 18.04
20
性能評価 計測結果 / Performance Evaluation Results.
■ごく簡単なDockerfile
21
simple-x86 simple-armhf simple-arm64
Raspberry Pi 3B+ NG 5m35.115s NG
x86_64 1core 0m31.054s 1m23.923s 1m10.271s
x86_64 2core 0m28.809s 1m11.900s 1m7.687s
Apollo70 NG NG 1m6.642s
app-x86 app-armhf app-arm64
Raspberry Pi 3B+ NG 31m40.088s NG
x86_64 1core 2m12.228s 39m10.197s 46m22.468s
x86_64 2core 1m48.210s 32m47.068s 31m4.249s
Apollo70 NG NG 14m23.764s
コンテナのターゲットアーキ
評価対象
システム
■典型的アプリ想定のDockerfile
評価で使⽤したDockerfileの内容 / Dockerfile Sample.
• あまり作り込まず基本的な構造のものを⽤意した
22
FROM multiarch/ubuntu-core:armhf-bionic
RUN apt-get update && ¥
apt-get install -y vim
■ごく簡単なDockerfile ■典型的アプリ想定のDockerfile
FROM multiarch/ubuntu-core:armhf-bionic
WORKDIR /app
COPY requirements.txt .
RUN set -x ¥
&& apt-get update ¥
&& apt-get install -y build-essential
python3-smbus python3-pip
RUN pip3 install -r requirements.txt
COPY . .
EXPOSE 8630
CMD ["python3", "-u", "app.py"]
Flask==1.0.2
pyserial==3.4
RPi.GPIO==0.6.5
scrollphathd==1.2.1
smbus==1.1.post2
requests==2.21.0
性能評価結果の考察1 / Discussion Point 1.
• Raspberry Pi 3B+ネイティブに対して、x86_64サー
バ上でのコンテナビルドの性能は︖
• 結果
• シンプルDockerfileで、5m35.115s→1m23.923s/
1m11.900sとなり、およそ1/5に改善
• 典型的アプリDockerflieでは、31m40.088s→
39m10.197s/32m47.068sとなり、わずかだが性能悪化
• 考察
• x86_86でのビルドの様⼦を⾒たところ、numpyのビルドに
⼤変時間がかかっていた。このことから、qemuのエミュ
レーションでは浮動⼩数点演算がソフトウェアで遅いので
は︖と推測される。
23
性能評価結果の考察2 / Discussion Point 2.
• ARM64サーバ(HP Apollo70)の、x86サーバ(エミュ
レーション)に対する性能は︖
• 結果
• シンプルDockerfileで、1m6.642s→1m10.271s/1m7.687sと
なり、x86のエミュレーションよりわずかに早くなっている。
• 典型的アプリDockerflieでは、14m23.764s→ 31m4.249sと2
倍程度の速さ。
• 考察
• x86のソフトウェアエミュレーションに対して劇的に早いとは⾔
えない。典型的アプリのケースで2倍早いのは、おそらくx86で
は浮動⼩数点演算がソフトウェア処理であることによるボトル
ネックに起因するのではないか。
• ARMの64コアを使いこなしている様には思われない。(パラメー
タチューニング等未確認)
24
まとめ / Summary.
• IoT/Fogコンピューティング⽤途で、Raspberry Piをたくさん
並べて使いたいので、コンテナ+デプロイ環境を⽤意したい。
そのニーズに答えられるソリューションを検討した。
• Raspberry PiにDocker/Docker-Compose/Kubernetesを⼊れ
て使うことはできる。オススメ。
• コンテナビルドをクラウドで⾼速化する⽬論⾒は、仕組みとし
ては可能だが性能があまり出ないという結果に。アプリ(ソフ
トウェア)を選ぶ可能性がある。
• ARM64サーバを32bitバイナリ作成には今のところ使えないこ
とがわかった。しかし原理的にできないとは考えづらく、追跡
調査・識者のご意⾒求む。
• そもそもARM64サーバの性能が良くない。OSチューニングが
必要/待たれる。
• Raspberry Piは、RaspbianOSを捨てるべきかもしれない。
25
Thank you for Listening !!
26

Weitere ähnliche Inhalte

Was ist angesagt?

eStargzイメージとlazy pullingによる高速なコンテナ起動
eStargzイメージとlazy pullingによる高速なコンテナ起動eStargzイメージとlazy pullingによる高速なコンテナ起動
eStargzイメージとlazy pullingによる高速なコンテナ起動Kohei Tokunaga
 
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜Preferred Networks
 
今話題のいろいろなコンテナランタイムを比較してみた
今話題のいろいろなコンテナランタイムを比較してみた今話題のいろいろなコンテナランタイムを比較してみた
今話題のいろいろなコンテナランタイムを比較してみたKohei Tokunaga
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話Kumazaki Hiroki
 
「スプラトゥーン」リアルタイム画像解析ツール 「IkaLog」の裏側
「スプラトゥーン」リアルタイム画像解析ツール 「IkaLog」の裏側「スプラトゥーン」リアルタイム画像解析ツール 「IkaLog」の裏側
「スプラトゥーン」リアルタイム画像解析ツール 「IkaLog」の裏側Takeshi HASEGAWA
 
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021Preferred Networks
 
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドBuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドAkihiro Suda
 
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなKentaro Matsui
 
KubernetesのRBACを掘り下げてみる(Kubernetes Novice Tokyo #17 発表資料)
KubernetesのRBACを掘り下げてみる(Kubernetes Novice Tokyo #17 発表資料)KubernetesのRBACを掘り下げてみる(Kubernetes Novice Tokyo #17 発表資料)
KubernetesのRBACを掘り下げてみる(Kubernetes Novice Tokyo #17 発表資料)NTT DATA Technology & Innovation
 
ARMアーキテクチャにおけるセキュリティ機構の紹介
ARMアーキテクチャにおけるセキュリティ機構の紹介ARMアーキテクチャにおけるセキュリティ機構の紹介
ARMアーキテクチャにおけるセキュリティ機構の紹介sounakano
 
実環境にTerraform導入したら驚いた
実環境にTerraform導入したら驚いた実環境にTerraform導入したら驚いた
実環境にTerraform導入したら驚いたAkihiro Kuwano
 
コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門Kohei Tokunaga
 
【第33回コンピュータビジョン勉強会@関東】OpenVX、 NVIDIA VisionWorks使ってみた
【第33回コンピュータビジョン勉強会@関東】OpenVX、 NVIDIA VisionWorks使ってみた【第33回コンピュータビジョン勉強会@関東】OpenVX、 NVIDIA VisionWorks使ってみた
【第33回コンピュータビジョン勉強会@関東】OpenVX、 NVIDIA VisionWorks使ってみたYasuhiro Yoshimura
 
(2017.6.9) Neo4jの可視化ライブラリまとめ
(2017.6.9) Neo4jの可視化ライブラリまとめ(2017.6.9) Neo4jの可視化ライブラリまとめ
(2017.6.9) Neo4jの可視化ライブラリまとめMitsutoshi Kiuchi
 
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptxネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptxShota Shinogi
 
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けモノビット エンジン
 
WebRTC SFU mediasoup sample
WebRTC SFU mediasoup sampleWebRTC SFU mediasoup sample
WebRTC SFU mediasoup samplemganeko
 
Kongの概要と導入事例
Kongの概要と導入事例Kongの概要と導入事例
Kongの概要と導入事例briscola-tokyo
 

Was ist angesagt? (20)

PCL
PCLPCL
PCL
 
eStargzイメージとlazy pullingによる高速なコンテナ起動
eStargzイメージとlazy pullingによる高速なコンテナ起動eStargzイメージとlazy pullingによる高速なコンテナ起動
eStargzイメージとlazy pullingによる高速なコンテナ起動
 
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
 
今話題のいろいろなコンテナランタイムを比較してみた
今話題のいろいろなコンテナランタイムを比較してみた今話題のいろいろなコンテナランタイムを比較してみた
今話題のいろいろなコンテナランタイムを比較してみた
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
 
「スプラトゥーン」リアルタイム画像解析ツール 「IkaLog」の裏側
「スプラトゥーン」リアルタイム画像解析ツール 「IkaLog」の裏側「スプラトゥーン」リアルタイム画像解析ツール 「IkaLog」の裏側
「スプラトゥーン」リアルタイム画像解析ツール 「IkaLog」の裏側
 
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
 
WebSocket / WebRTCの技術紹介
WebSocket / WebRTCの技術紹介WebSocket / WebRTCの技術紹介
WebSocket / WebRTCの技術紹介
 
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドBuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルド
 
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
 
KubernetesのRBACを掘り下げてみる(Kubernetes Novice Tokyo #17 発表資料)
KubernetesのRBACを掘り下げてみる(Kubernetes Novice Tokyo #17 発表資料)KubernetesのRBACを掘り下げてみる(Kubernetes Novice Tokyo #17 発表資料)
KubernetesのRBACを掘り下げてみる(Kubernetes Novice Tokyo #17 発表資料)
 
ARMアーキテクチャにおけるセキュリティ機構の紹介
ARMアーキテクチャにおけるセキュリティ機構の紹介ARMアーキテクチャにおけるセキュリティ機構の紹介
ARMアーキテクチャにおけるセキュリティ機構の紹介
 
実環境にTerraform導入したら驚いた
実環境にTerraform導入したら驚いた実環境にTerraform導入したら驚いた
実環境にTerraform導入したら驚いた
 
コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門
 
【第33回コンピュータビジョン勉強会@関東】OpenVX、 NVIDIA VisionWorks使ってみた
【第33回コンピュータビジョン勉強会@関東】OpenVX、 NVIDIA VisionWorks使ってみた【第33回コンピュータビジョン勉強会@関東】OpenVX、 NVIDIA VisionWorks使ってみた
【第33回コンピュータビジョン勉強会@関東】OpenVX、 NVIDIA VisionWorks使ってみた
 
(2017.6.9) Neo4jの可視化ライブラリまとめ
(2017.6.9) Neo4jの可視化ライブラリまとめ(2017.6.9) Neo4jの可視化ライブラリまとめ
(2017.6.9) Neo4jの可視化ライブラリまとめ
 
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptxネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
 
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
 
WebRTC SFU mediasoup sample
WebRTC SFU mediasoup sampleWebRTC SFU mediasoup sample
WebRTC SFU mediasoup sample
 
Kongの概要と導入事例
Kongの概要と導入事例Kongの概要と導入事例
Kongの概要と導入事例
 

Ähnlich wie Raspberry Pi用のコンテナをクラウドでビルドする方法

サーバーレスで ガチ本番運用までやってるお話し
サーバーレスで ガチ本番運用までやってるお話しサーバーレスで ガチ本番運用までやってるお話し
サーバーレスで ガチ本番運用までやってるお話しAkira Nagata
 
WebRTC mediasoup on raspberrypi3
WebRTC mediasoup on raspberrypi3WebRTC mediasoup on raspberrypi3
WebRTC mediasoup on raspberrypi3mganeko
 
パフォーマンス計測Ciサービスを作って得た知見を共有したい
パフォーマンス計測Ciサービスを作って得た知見を共有したいパフォーマンス計測Ciサービスを作って得た知見を共有したい
パフォーマンス計測Ciサービスを作って得た知見を共有したいzaru sakuraba
 
Starting qt5beta at_raspberry_pi Qtnagoya#6
Starting qt5beta at_raspberry_pi Qtnagoya#6Starting qt5beta at_raspberry_pi Qtnagoya#6
Starting qt5beta at_raspberry_pi Qtnagoya#6Kazuo Asano (@kazuo_asa)
 
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Masahito Zembutsu
 
20分でわかるgVisor入門
20分でわかるgVisor入門20分でわかるgVisor入門
20分でわかるgVisor入門Shuji Yamada
 
Dockerの仕組みとIIJ社内での利用例
Dockerの仕組みとIIJ社内での利用例Dockerの仕組みとIIJ社内での利用例
Dockerの仕組みとIIJ社内での利用例maebashi
 
実践 Web App for Containers! ~コンテナ開発の基礎からDevOps環境の構築まで~
実践 Web App for Containers! ~コンテナ開発の基礎からDevOps環境の構築まで~実践 Web App for Containers! ~コンテナ開発の基礎からDevOps環境の構築まで~
実践 Web App for Containers! ~コンテナ開発の基礎からDevOps環境の構築まで~Saki Homma
 
root権限無しでKubernetesを動かす
root権限無しでKubernetesを動かす root権限無しでKubernetesを動かす
root権限無しでKubernetesを動かす Akihiro Suda
 
Raspberry Pi and WebIOPi
Raspberry Pi and WebIOPiRaspberry Pi and WebIOPi
Raspberry Pi and WebIOPihiro345
 
捕鯨!詳解docker
捕鯨!詳解docker捕鯨!詳解docker
捕鯨!詳解docker雄哉 吉田
 
もっとも簡単なKubernetes構築 on Raspberry pi (July tech festa winter 2021)
もっとも簡単なKubernetes構築 on Raspberry pi  (July tech festa winter 2021)もっとも簡単なKubernetes構築 on Raspberry pi  (July tech festa winter 2021)
もっとも簡単なKubernetes構築 on Raspberry pi (July tech festa winter 2021)Kamon Nobuchika
 
はじめてのAzure Web App for Containers! -コンテナの基礎から DevOps 環境の構築まで-
はじめてのAzure Web App for Containers! -コンテナの基礎から DevOps 環境の構築まで-はじめてのAzure Web App for Containers! -コンテナの基礎から DevOps 環境の構築まで-
はじめてのAzure Web App for Containers! -コンテナの基礎から DevOps 環境の構築まで-Saki Homma
 
ICSをビルドしてみた
ICSをビルドしてみたICSをビルドしてみた
ICSをビルドしてみたkinneko
 
JAWS目黒 EC2チューニングTips #jawsmeguro #jawsug
JAWS目黒 EC2チューニングTips #jawsmeguro #jawsugJAWS目黒 EC2チューニングTips #jawsmeguro #jawsug
JAWS目黒 EC2チューニングTips #jawsmeguro #jawsugYasuhiro Matsuo
 
Embedded Webで加速するWeb of Things
Embedded Webで加速するWeb of ThingsEmbedded Webで加速するWeb of Things
Embedded Webで加速するWeb of ThingsFutomi Hatano
 
Idcfクラウドで始める構築自動化
Idcfクラウドで始める構築自動化Idcfクラウドで始める構築自動化
Idcfクラウドで始める構築自動化智之 大野
 

Ähnlich wie Raspberry Pi用のコンテナをクラウドでビルドする方法 (20)

サーバーレスで ガチ本番運用までやってるお話し
サーバーレスで ガチ本番運用までやってるお話しサーバーレスで ガチ本番運用までやってるお話し
サーバーレスで ガチ本番運用までやってるお話し
 
WebRTC mediasoup on raspberrypi3
WebRTC mediasoup on raspberrypi3WebRTC mediasoup on raspberrypi3
WebRTC mediasoup on raspberrypi3
 
パフォーマンス計測Ciサービスを作って得た知見を共有したい
パフォーマンス計測Ciサービスを作って得た知見を共有したいパフォーマンス計測Ciサービスを作って得た知見を共有したい
パフォーマンス計測Ciサービスを作って得た知見を共有したい
 
Starting qt5beta at_raspberry_pi Qtnagoya#6
Starting qt5beta at_raspberry_pi Qtnagoya#6Starting qt5beta at_raspberry_pi Qtnagoya#6
Starting qt5beta at_raspberry_pi Qtnagoya#6
 
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
 
20分でわかるgVisor入門
20分でわかるgVisor入門20分でわかるgVisor入門
20分でわかるgVisor入門
 
Dockerの仕組みとIIJ社内での利用例
Dockerの仕組みとIIJ社内での利用例Dockerの仕組みとIIJ社内での利用例
Dockerの仕組みとIIJ社内での利用例
 
実践 Web App for Containers! ~コンテナ開発の基礎からDevOps環境の構築まで~
実践 Web App for Containers! ~コンテナ開発の基礎からDevOps環境の構築まで~実践 Web App for Containers! ~コンテナ開発の基礎からDevOps環境の構築まで~
実践 Web App for Containers! ~コンテナ開発の基礎からDevOps環境の構築まで~
 
root権限無しでKubernetesを動かす
root権限無しでKubernetesを動かす root権限無しでKubernetesを動かす
root権限無しでKubernetesを動かす
 
Raspberry Pi and WebIOPi
Raspberry Pi and WebIOPiRaspberry Pi and WebIOPi
Raspberry Pi and WebIOPi
 
捕鯨!詳解docker
捕鯨!詳解docker捕鯨!詳解docker
捕鯨!詳解docker
 
もっとも簡単なKubernetes構築 on Raspberry pi (July tech festa winter 2021)
もっとも簡単なKubernetes構築 on Raspberry pi  (July tech festa winter 2021)もっとも簡単なKubernetes構築 on Raspberry pi  (July tech festa winter 2021)
もっとも簡単なKubernetes構築 on Raspberry pi (July tech festa winter 2021)
 
はじめてのAzure Web App for Containers! -コンテナの基礎から DevOps 環境の構築まで-
はじめてのAzure Web App for Containers! -コンテナの基礎から DevOps 環境の構築まで-はじめてのAzure Web App for Containers! -コンテナの基礎から DevOps 環境の構築まで-
はじめてのAzure Web App for Containers! -コンテナの基礎から DevOps 環境の構築まで-
 
ICSをビルドしてみた
ICSをビルドしてみたICSをビルドしてみた
ICSをビルドしてみた
 
JAWS目黒 EC2チューニングTips #jawsmeguro #jawsug
JAWS目黒 EC2チューニングTips #jawsmeguro #jawsugJAWS目黒 EC2チューニングTips #jawsmeguro #jawsug
JAWS目黒 EC2チューニングTips #jawsmeguro #jawsug
 
GTC Japan 2017
GTC Japan 2017GTC Japan 2017
GTC Japan 2017
 
Embedded Webで加速するWeb of Things
Embedded Webで加速するWeb of ThingsEmbedded Webで加速するWeb of Things
Embedded Webで加速するWeb of Things
 
Idcfクラウドで始める構築自動化
Idcfクラウドで始める構築自動化Idcfクラウドで始める構築自動化
Idcfクラウドで始める構築自動化
 
DAS_202109
DAS_202109DAS_202109
DAS_202109
 
Zynga
ZyngaZynga
Zynga
 

Mehr von Shunsuke Kikuchi

誰でもできるスマートシティ向けOSS : FIWAREのはじめかた
誰でもできるスマートシティ向けOSS : FIWAREのはじめかた誰でもできるスマートシティ向けOSS : FIWAREのはじめかた
誰でもできるスマートシティ向けOSS : FIWAREのはじめかたShunsuke Kikuchi
 
超個体性をもったエッジコンピューティング実現に向けたElixir/Nerves環境の適合性評価
超個体性をもったエッジコンピューティング実現に向けたElixir/Nerves環境の適合性評価超個体性をもったエッジコンピューティング実現に向けたElixir/Nerves環境の適合性評価
超個体性をもったエッジコンピューティング実現に向けたElixir/Nerves環境の適合性評価Shunsuke Kikuchi
 
オフィス縮退に関する一考察-20200929
オフィス縮退に関する一考察-20200929オフィス縮退に関する一考察-20200929
オフィス縮退に関する一考察-20200929Shunsuke Kikuchi
 
クラウドをエッジに延伸せよ
クラウドをエッジに延伸せよクラウドをエッジに延伸せよ
クラウドをエッジに延伸せよShunsuke Kikuchi
 
さくらインターネット最新の取り組み
さくらインターネット最新の取り組みさくらインターネット最新の取り組み
さくらインターネット最新の取り組みShunsuke Kikuchi
 
プラットフォーム事業者としての今後のエッジコンピューティングのあり方について
プラットフォーム事業者としての今後のエッジコンピューティングのあり方についてプラットフォーム事業者としての今後のエッジコンピューティングのあり方について
プラットフォーム事業者としての今後のエッジコンピューティングのあり方についてShunsuke Kikuchi
 
データ活用に関するさくらインターネットの取組事例
データ活用に関するさくらインターネットの取組事例データ活用に関するさくらインターネットの取組事例
データ活用に関するさくらインターネットの取組事例Shunsuke Kikuchi
 
さくらインターネットにおけるアニーリングシステム評価の取り組みのご紹介
さくらインターネットにおけるアニーリングシステム評価の取り組みのご紹介さくらインターネットにおけるアニーリングシステム評価の取り組みのご紹介
さくらインターネットにおけるアニーリングシステム評価の取り組みのご紹介Shunsuke Kikuchi
 
ノード間通信の優位性評価を目的としたFogコンピューティングテストベッドの構築に関する一検討
ノード間通信の優位性評価を目的としたFogコンピューティングテストベッドの構築に関する一検討ノード間通信の優位性評価を目的としたFogコンピューティングテストベッドの構築に関する一検討
ノード間通信の優位性評価を目的としたFogコンピューティングテストベッドの構築に関する一検討Shunsuke Kikuchi
 
NEC x さくら データ流通実証実験 中間報告書 20190624
NEC x さくら データ流通実証実験 中間報告書 20190624NEC x さくら データ流通実証実験 中間報告書 20190624
NEC x さくら データ流通実証実験 中間報告書 20190624Shunsuke Kikuchi
 
Raspberry Pi用コンテナをさくらのクラウドでビルドする
Raspberry Pi用コンテナをさくらのクラウドでビルドするRaspberry Pi用コンテナをさくらのクラウドでビルドする
Raspberry Pi用コンテナをさくらのクラウドでビルドするShunsuke Kikuchi
 
さくらインターネット研究所(菊地)-2018年度研究計画-20180608
さくらインターネット研究所(菊地)-2018年度研究計画-20180608さくらインターネット研究所(菊地)-2018年度研究計画-20180608
さくらインターネット研究所(菊地)-2018年度研究計画-20180608Shunsuke Kikuchi
 
菊地の研究ポートフォリオ2019版 v1.01
菊地の研究ポートフォリオ2019版 v1.01菊地の研究ポートフォリオ2019版 v1.01
菊地の研究ポートフォリオ2019版 v1.01Shunsuke Kikuchi
 
データ流通実証実験について-20180207
データ流通実証実験について-20180207データ流通実証実験について-20180207
データ流通実証実験について-20180207Shunsuke Kikuchi
 

Mehr von Shunsuke Kikuchi (15)

誰でもできるスマートシティ向けOSS : FIWAREのはじめかた
誰でもできるスマートシティ向けOSS : FIWAREのはじめかた誰でもできるスマートシティ向けOSS : FIWAREのはじめかた
誰でもできるスマートシティ向けOSS : FIWAREのはじめかた
 
超個体性をもったエッジコンピューティング実現に向けたElixir/Nerves環境の適合性評価
超個体性をもったエッジコンピューティング実現に向けたElixir/Nerves環境の適合性評価超個体性をもったエッジコンピューティング実現に向けたElixir/Nerves環境の適合性評価
超個体性をもったエッジコンピューティング実現に向けたElixir/Nerves環境の適合性評価
 
オフィス縮退に関する一考察-20200929
オフィス縮退に関する一考察-20200929オフィス縮退に関する一考察-20200929
オフィス縮退に関する一考察-20200929
 
クラウドをエッジに延伸せよ
クラウドをエッジに延伸せよクラウドをエッジに延伸せよ
クラウドをエッジに延伸せよ
 
さくらインターネット最新の取り組み
さくらインターネット最新の取り組みさくらインターネット最新の取り組み
さくらインターネット最新の取り組み
 
プラットフォーム事業者としての今後のエッジコンピューティングのあり方について
プラットフォーム事業者としての今後のエッジコンピューティングのあり方についてプラットフォーム事業者としての今後のエッジコンピューティングのあり方について
プラットフォーム事業者としての今後のエッジコンピューティングのあり方について
 
データ活用に関するさくらインターネットの取組事例
データ活用に関するさくらインターネットの取組事例データ活用に関するさくらインターネットの取組事例
データ活用に関するさくらインターネットの取組事例
 
さくらインターネットにおけるアニーリングシステム評価の取り組みのご紹介
さくらインターネットにおけるアニーリングシステム評価の取り組みのご紹介さくらインターネットにおけるアニーリングシステム評価の取り組みのご紹介
さくらインターネットにおけるアニーリングシステム評価の取り組みのご紹介
 
ノード間通信の優位性評価を目的としたFogコンピューティングテストベッドの構築に関する一検討
ノード間通信の優位性評価を目的としたFogコンピューティングテストベッドの構築に関する一検討ノード間通信の優位性評価を目的としたFogコンピューティングテストベッドの構築に関する一検討
ノード間通信の優位性評価を目的としたFogコンピューティングテストベッドの構築に関する一検討
 
NEC x さくら データ流通実証実験 中間報告書 20190624
NEC x さくら データ流通実証実験 中間報告書 20190624NEC x さくら データ流通実証実験 中間報告書 20190624
NEC x さくら データ流通実証実験 中間報告書 20190624
 
Raspberry Pi用コンテナをさくらのクラウドでビルドする
Raspberry Pi用コンテナをさくらのクラウドでビルドするRaspberry Pi用コンテナをさくらのクラウドでビルドする
Raspberry Pi用コンテナをさくらのクラウドでビルドする
 
さくらインターネット研究所(菊地)-2018年度研究計画-20180608
さくらインターネット研究所(菊地)-2018年度研究計画-20180608さくらインターネット研究所(菊地)-2018年度研究計画-20180608
さくらインターネット研究所(菊地)-2018年度研究計画-20180608
 
菊地の研究ポートフォリオ2019版 v1.01
菊地の研究ポートフォリオ2019版 v1.01菊地の研究ポートフォリオ2019版 v1.01
菊地の研究ポートフォリオ2019版 v1.01
 
データ流通実証実験について-20180207
データ流通実証実験について-20180207データ流通実証実験について-20180207
データ流通実証実験について-20180207
 
Fogとは何か 20171205
Fogとは何か 20171205Fogとは何か 20171205
Fogとは何か 20171205
 

Raspberry Pi用のコンテナをクラウドでビルドする方法

  • 1. How to Build a Docker Container for Raspberry Pi in the Cloud. Raspberry Pi⽤Dockerコンテナをクラウドでビルドする 2019/May/24 (C) Copyright 1996-2019 SAKURA Internet Inc SAKURA Internet Research Center. Senior Researcher KIKUCHI Shunsuke 菊地 俊介 SAKURA Internet Inc.
  • 2. Table of Contents Part 0. Motivation, Background. / なにがやりたいのか Part 1. How to use Container on Raspberry Pi. Raspberry Piでコンテナを動かす Part 2. How to build Container for Raspberry Pi in the cloud. Raspberry Piのコンテナをクラウドでビルドする 2
  • 3. Self Introduction 菊地 俊介 (東京都出⾝、品川区在住) 4 所属 さくらインターネット研究所 経歴 早稲⽥⼤学⼤学院 卒 富⼠通(株)富⼠通研究所 ネットの研究やったり、トイレIoT作ったり さくらインターネット研究所 データ流通実証実験、Fogコンピューティング、 AR/VR、量⼦(アニーリング)コンピュータ 専⾨ エッジ・Fogコンピューティング (分散系システムのあたり) 趣味 新技術調査、家庭内IoT、⾞、鉄道
  • 4. Part 0. Motivation / なにがやりたいのか 4
  • 5. Use Raspberry Pi for Iot and Fog Computing Implementation. • IoTやそれを発展させたサイバーフィジカル・システ ムによる、実世界(現場)の⾼度化が今ホット。 • 本業として、コンピューティングリソースが現場に溶 け込んでいく(近)未来の実現にむけて、エッジコン ピューティング・Fogコンピューティングを研究開発。 • IoT、Fogコンピューティングの実装に今⼀番便利なの はRaspberry Pi。 5
  • 6. IoT with Raspberry Pi. • 最もお⼿軽なIoTマシン。 • GPIOが使えて、Linuxが動く。 • すでにエコシステム(豊富な3rdパーティ部品、開発ノウハ ウ)が確⽴。 6 さくらインターネット研究所 で実施中の、 Raspberry Piを⽤いた Fogコンピューティング試作 • たくさんのRaspberry Piを並べてFogシステムを作りたい。
  • 7. ラズパイ+コンテナで / Raspberry Pi with Container Technology • 台数が増えてくると、個々のRaspberry Piに対して作 業をしていられなくなる。 • →デプロイシステムがほしい • 台数が増えてくると、個々のRaspberry Piに対して状 態管理をしていられなくなる。 • →マネジメントシステムがほしい • Raspberry Piとコンテナエコシステム(Docker, Docker-compose, Kubernetes)を組み合わせて 使いたい。システムの開発の⾼度化(CI/CD)を実現 したい。 7
  • 8. Part 1. Raspberry Piでコンテナを動かす How to use Container on Raspberry Pi. 8
  • 9. ラズパイでの開発⼿法 / Developing Method with Raspberry Pi. 9 プログラム 作業マシン Raspberry Pi … • Raspberry Piでもコンテナベースの開発に移⾏したい コンテナ 作業マシン … Docker Raspberry Pi DockerFile • →できます。しかもそれほど難しくなく。
  • 10. ラズパイでもDocker(コンテナ)使えます / Raspberry Pi + Docker is available. • RaspbianOSに(普通に)Docker⼊ります。 • ただし、Rasperry Pi Zero(WH)もターゲットにする場合は version=18.06.3まで。 • それ以降だとZeroでインストールできなくなる。 • Docker-Composeは、(⼊るけど)インストールが難しい • 本家からはRaspberry Pi(arm7l)⽤バイナリが提供されていない。 • ⾃前でビルド必要だがエラーで⽌まる等、⼀筋縄ではいかない。 • pipで⼊れるのが楽。 • https://qiita.com/Amb98/items/23b455a83c8a6dacaa5b • Kubernetesも使えます。 • k3sで動作確認できた。(本発表ではスコープ外とします) 10 $ sudo apt-get update $ sudo apt-get install curl $ curl -sSL https://get.docker.com | VERSION=18.06.3 sh
  • 11. GPIOやI2Cにもアクセス可能 / Can use GPIO and I2C from Container • コンテナ使えれば楽なのはわかっているのだけど、コ ンテナじゃRaspberry Pi固有のハードウェアにアクセ スできないのでは...? • →ファイルシステムとして⾒えているハードウェアであれば、 ホストデバイスへのアクセスを指定することで、扱えます。 11 $ docker run --name app --device /dev/gpiomem --device /dev/i2c-1 -d app コンテナのアプリから、 GPIO(焦電センサ)と i2cデバイス(LEDアレイ)に アクセスしている様⼦
  • 12. Part 2. Raspberry Piのコンテナをクラウドでビルドする How to build Container for Raspberry Pi in the Cloud. 12
  • 13. ラズパイでもDocker(コンテナ)使えます、が... • Raspberry Piではコンテナイメージビルドが遅い... • ちょっとアプリを作り込み始めると、buildに30分とかざら。 13 コンテナ 作業マシン … Docker Raspberry Pi DockerFile 作業マシン Raspberry Pi Docker Cloud DockerFile Container Build Idea : クラウド上でコンテナイメージビルドできれば早くなるんじゃ...?
  • 14. クラウド上でRaspberry Piのコンテナイメージをビルドするには How to build a Container Image in the Cloud : Problem • ⼀⾒簡単そうに思えるが、実はそうでもなかった。 • Raspberry PiはARMプロセッサ搭載だから、同じARM採⽤のサーバでイ メージビルドすればOK ?! • Amazon EC2 A1インスタンス、Packetクラウド ARMベアメタルサーバなどARM サーバのクラウドも出始めているので。 • 難しさの原因 • Raspberry Pi 3B+は64bit ARMプロセッサ搭載 • Raspberry Pi Zeroなどは32bit ARMプロセッサ搭載 • 下位互換性確保のため︖か、RaspbianOSは32bitOSとして作られている • →Raspberry Pi⽤イメージは32bit(armhf/armv7l)で作成する必要がある • ⼀⽅、世の中のほとんどのARMサーバとOSは、64bit(arm64/armv8l)へ の移⾏を済ませている • ARMサーバ上でさっとイメージビルドしてRaspberry Piに持ってくる、 という訳にはいかない 14 Special Thanks!! to Mr. Nishinaga, Mr. Hiramatsu
  • 15. クラウド上でRaspberry Piのコンテナイメージをビルドする⽅法 How to build a Container Image in the cloud : 2 Approaches • 2つのアプローチ • アプローチ1︓x86サーバ上のarmhfエミュレーション環境 でのイメージビルド • アプローチ2︓ARMプロセッサ搭載サーバでのバイナリ互 換モードを利⽤したイメージビルド 15 Raspberry Pi armhf x86 Server x86_64 armhf ARM Server arm v8l arm hf Approach1 Approach2
  • 16. Approach1 : multi-arch Project • multi-archプロジェクトのツール・コンテナを利⽤す ることで、x86アーキのマシン上でターゲットアーキ (armhf)のバイナリ(コンテナ)を作成する事が可能 • https://github.com/multiarch • 動作原理 • qemu + binfmt-misc + docker • (= ターゲットアーキエミュレーション + シームレスバイ ナリ実⾏ + 環境アイソレーション) 16 x86 Server armhf binfmt-miscにより、バイナリフォー マットの種別に応じて任意のコマンド (エミュレータ)を実⾏させられる x86_64 armhfフォーマットのバイナリ 群で構成したコンテナ環境 qemuによりarmhf バイナリを エミュレーション実⾏ 「qemu + binfmt-misc + chroot」は10年前から存在する技術 http://blog.kmckk.com/archives/2342452.html
  • 17. Approach1 : multi-arch Project example. • 実際の使い⽅例(1/2) 17 [root@fogregistry qemu]# uname -a Linux fogregistry 3.10.0-957.5.1.el7.x86_64 #1 SMP Fri Feb 1 14:54:57 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux [root@fogregistry qemu]# docker run --rm --privileged multiarch/qemu-user- static:register ...<snip>... [root@fogregistry qemu]# docker build -t armhf-artful-vim -f Dockerfile . ...<snip>... [root@fogregistry qemu]# docker run -it --rm armhf-artful-vim:latest bash root@e8418d14f0e5:/# uname –a Linux e8418d14f0e5 3.10.0-957.5.1.el7.x86_64 #1 SMP Fri Feb 1 14:54:57 UTC 2019 armv7l armv7l armv7l GNU/Linux root@e8418d14f0e5:/# file /bin/bash /bin/bash: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, for GNU/Linux 3.2.0, BuildID[sha1]=c2fac9c07846ccd7daa2c96126fa93ce863b2ea4, stripped root@e8418d14f0e5:/# exit exit [root@fogregistry qemu]# ←これだけ︕
  • 18. Approach1 : multi-arch Project example. (Contʼd) • 実際の使い⽅例(2/2) 18 Dockerfileで、ベースになるイメージを指定する FROM multiarch/ubuntu-core:armhf-bionic RUN apt-get update && ¥ apt-get install -y vim root@e8418d14f0e5:/# cd /usr/bin root@e8418d14f0e5:/usr/bin# ls q* qemu-arm-static root@e8418d14f0e5:/usr/bin# コンテナの内部に、qemu本体が含まれる ←armhfを指定
  • 19. Approach 2 : ARMサーバ上でバイナリ互換を利⽤する⽅法 Approach 2 : Binary Compatibility by ARM chip/Server • 調査したものの、⽅法を発⾒できず。 • armv8lマシン上でarmhfのバイナリを実⾏する⽅法⾃体は 存在している。 • http://arch.jpn.org/archives/272 • arm32のバイナリを作る⽅法は、クロスコンパイル環境を 構築するしかない︖ • その環境をdockerコンテナ内に隔離する⽅法は︖ • 詳しい⽅のご助⼒をお願いしたい 19 ARM Server arm v8l arm hf
  • 20. 性能評価 / Performance Evaluation • Raspberry Pi 3B+で直接コンテナをつくる場合に⽐べて、 • x86サーバ上でarmhfコンテナイメージを作成する場合 • (ARMv8lサーバ上でarmv8lコンテナイメージを作成する場合、参考情報) について作成時間を評価した。 計測⽅法 • docker/docker-composeのコンテナビルド時間をtimeコマンドで計測 評価環境 1. Raspberry Pi 3B+ / Raspbian OS(stretch) 2. x86_64 1コア1GBメモリ、SSD、さくらのクラウド上 / Ubuntu 18.04.3 3. x86_64 2コア1GBメモリ、SSD、さくらのクラウド上 / Ubuntu 18.04.3 4. ARM64 64コア256GBメモリ、HDD(?)、 HP Apollo 70 System, (ThinderX2) / Ubuntu 18.04 20
  • 21. 性能評価 計測結果 / Performance Evaluation Results. ■ごく簡単なDockerfile 21 simple-x86 simple-armhf simple-arm64 Raspberry Pi 3B+ NG 5m35.115s NG x86_64 1core 0m31.054s 1m23.923s 1m10.271s x86_64 2core 0m28.809s 1m11.900s 1m7.687s Apollo70 NG NG 1m6.642s app-x86 app-armhf app-arm64 Raspberry Pi 3B+ NG 31m40.088s NG x86_64 1core 2m12.228s 39m10.197s 46m22.468s x86_64 2core 1m48.210s 32m47.068s 31m4.249s Apollo70 NG NG 14m23.764s コンテナのターゲットアーキ 評価対象 システム ■典型的アプリ想定のDockerfile
  • 22. 評価で使⽤したDockerfileの内容 / Dockerfile Sample. • あまり作り込まず基本的な構造のものを⽤意した 22 FROM multiarch/ubuntu-core:armhf-bionic RUN apt-get update && ¥ apt-get install -y vim ■ごく簡単なDockerfile ■典型的アプリ想定のDockerfile FROM multiarch/ubuntu-core:armhf-bionic WORKDIR /app COPY requirements.txt . RUN set -x ¥ && apt-get update ¥ && apt-get install -y build-essential python3-smbus python3-pip RUN pip3 install -r requirements.txt COPY . . EXPOSE 8630 CMD ["python3", "-u", "app.py"] Flask==1.0.2 pyserial==3.4 RPi.GPIO==0.6.5 scrollphathd==1.2.1 smbus==1.1.post2 requests==2.21.0
  • 23. 性能評価結果の考察1 / Discussion Point 1. • Raspberry Pi 3B+ネイティブに対して、x86_64サー バ上でのコンテナビルドの性能は︖ • 結果 • シンプルDockerfileで、5m35.115s→1m23.923s/ 1m11.900sとなり、およそ1/5に改善 • 典型的アプリDockerflieでは、31m40.088s→ 39m10.197s/32m47.068sとなり、わずかだが性能悪化 • 考察 • x86_86でのビルドの様⼦を⾒たところ、numpyのビルドに ⼤変時間がかかっていた。このことから、qemuのエミュ レーションでは浮動⼩数点演算がソフトウェアで遅いので は︖と推測される。 23
  • 24. 性能評価結果の考察2 / Discussion Point 2. • ARM64サーバ(HP Apollo70)の、x86サーバ(エミュ レーション)に対する性能は︖ • 結果 • シンプルDockerfileで、1m6.642s→1m10.271s/1m7.687sと なり、x86のエミュレーションよりわずかに早くなっている。 • 典型的アプリDockerflieでは、14m23.764s→ 31m4.249sと2 倍程度の速さ。 • 考察 • x86のソフトウェアエミュレーションに対して劇的に早いとは⾔ えない。典型的アプリのケースで2倍早いのは、おそらくx86で は浮動⼩数点演算がソフトウェア処理であることによるボトル ネックに起因するのではないか。 • ARMの64コアを使いこなしている様には思われない。(パラメー タチューニング等未確認) 24
  • 25. まとめ / Summary. • IoT/Fogコンピューティング⽤途で、Raspberry Piをたくさん 並べて使いたいので、コンテナ+デプロイ環境を⽤意したい。 そのニーズに答えられるソリューションを検討した。 • Raspberry PiにDocker/Docker-Compose/Kubernetesを⼊れ て使うことはできる。オススメ。 • コンテナビルドをクラウドで⾼速化する⽬論⾒は、仕組みとし ては可能だが性能があまり出ないという結果に。アプリ(ソフ トウェア)を選ぶ可能性がある。 • ARM64サーバを32bitバイナリ作成には今のところ使えないこ とがわかった。しかし原理的にできないとは考えづらく、追跡 調査・識者のご意⾒求む。 • そもそもARM64サーバの性能が良くない。OSチューニングが 必要/待たれる。 • Raspberry Piは、RaspbianOSを捨てるべきかもしれない。 25
  • 26. Thank you for Listening !! 26