SlideShare a Scribd company logo
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

More Related Content

What's hot

やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているやはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
Koichi Tanaka
 
こわくない Git
こわくない Gitこわくない Git
こわくない Git
Kota Saito
 
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドBuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルド
Akihiro Suda
 
PostgreSQL 15 開発最新情報
PostgreSQL 15 開発最新情報PostgreSQL 15 開発最新情報
PostgreSQL 15 開発最新情報
Masahiko Sawada
 
Marp Tutorial
Marp TutorialMarp Tutorial
Marp Tutorial
Rui Watanabe
 
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
NTT DATA Technology & Innovation
 
並行実行制御の最適化手法
並行実行制御の最適化手法並行実行制御の最適化手法
並行実行制御の最適化手法
Sho Nakazono
 
InnoDBのすゝめ(仮)
InnoDBのすゝめ(仮)InnoDBのすゝめ(仮)
InnoDBのすゝめ(仮)
Takanori Sejima
 
「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜
「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜
「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜Takahiro Inoue
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
Akihiro Suda
 
概念モデリング再入門 + DDD
概念モデリング再入門 + DDD概念モデリング再入門 + DDD
概念モデリング再入門 + DDD
Hiroshima JUG
 
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
NTT DATA Technology & Innovation
 
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
NTT DATA Technology & Innovation
 
シリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのかシリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのか
Atsushi Nakada
 
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
NTT DATA Technology & Innovation
 
PostgreSQL 15の新機能を徹底解説
PostgreSQL 15の新機能を徹底解説PostgreSQL 15の新機能を徹底解説
PostgreSQL 15の新機能を徹底解説
Masahiko Sawada
 
Xbyakの紹介とその周辺
Xbyakの紹介とその周辺Xbyakの紹介とその周辺
Xbyakの紹介とその周辺
MITSUNARI Shigeo
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
Kumazaki Hiroki
 
先駆者に学ぶ MLOpsの実際
先駆者に学ぶ MLOpsの実際先駆者に学ぶ MLOpsの実際
先駆者に学ぶ MLOpsの実際
Tetsutaro Watanabe
 
Docker Compose 徹底解説
Docker Compose 徹底解説Docker Compose 徹底解説
Docker Compose 徹底解説
Masahito Zembutsu
 

What's hot (20)

やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているやはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
 
こわくない Git
こわくない Gitこわくない Git
こわくない Git
 
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドBuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルド
 
PostgreSQL 15 開発最新情報
PostgreSQL 15 開発最新情報PostgreSQL 15 開発最新情報
PostgreSQL 15 開発最新情報
 
Marp Tutorial
Marp TutorialMarp Tutorial
Marp Tutorial
 
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
 
並行実行制御の最適化手法
並行実行制御の最適化手法並行実行制御の最適化手法
並行実行制御の最適化手法
 
InnoDBのすゝめ(仮)
InnoDBのすゝめ(仮)InnoDBのすゝめ(仮)
InnoDBのすゝめ(仮)
 
「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜
「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜
「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
概念モデリング再入門 + DDD
概念モデリング再入門 + DDD概念モデリング再入門 + DDD
概念モデリング再入門 + DDD
 
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
 
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
 
シリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのかシリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのか
 
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
 
PostgreSQL 15の新機能を徹底解説
PostgreSQL 15の新機能を徹底解説PostgreSQL 15の新機能を徹底解説
PostgreSQL 15の新機能を徹底解説
 
Xbyakの紹介とその周辺
Xbyakの紹介とその周辺Xbyakの紹介とその周辺
Xbyakの紹介とその周辺
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
 
先駆者に学ぶ MLOpsの実際
先駆者に学ぶ MLOpsの実際先駆者に学ぶ MLOpsの実際
先駆者に学ぶ MLOpsの実際
 
Docker Compose 徹底解説
Docker Compose 徹底解説Docker Compose 徹底解説
Docker Compose 徹底解説
 

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

サーバーレスで ガチ本番運用までやってるお話し
サーバーレスで ガチ本番運用までやってるお話しサーバーレスで ガチ本番運用までやってるお話し
サーバーレスで ガチ本番運用までやってるお話し
Akira Nagata
 
WebRTC mediasoup on raspberrypi3
WebRTC mediasoup on raspberrypi3WebRTC mediasoup on raspberrypi3
WebRTC mediasoup on raspberrypi3
mganeko
 
パフォーマンス計測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#6
Kazuo 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 WebIOPi
hiro345
 
捕鯨!詳解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 #jawsug
Yasuhiro Matsuo
 
GTC Japan 2017
GTC Japan 2017GTC Japan 2017
GTC Japan 2017
Hitoshi Sato
 
Embedded Webで加速するWeb of Things
Embedded Webで加速するWeb of ThingsEmbedded Webで加速するWeb of Things
Embedded Webで加速するWeb of Things
Futomi Hatano
 
Idcfクラウドで始める構築自動化
Idcfクラウドで始める構築自動化Idcfクラウドで始める構築自動化
Idcfクラウドで始める構築自動化
智之 大野
 
DAS_202109
DAS_202109DAS_202109
DAS_202109
Takefumi MIYOSHI
 

Similar to 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
 

More from 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
オフィス縮退に関する一考察-20200929
Shunsuke 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 さくら データ流通実証実験 中間報告書 20190624
Shunsuke Kikuchi
 
Raspberry Pi用コンテナをさくらのクラウドでビルドする
Raspberry Pi用コンテナをさくらのクラウドでビルドするRaspberry Pi用コンテナをさくらのクラウドでビルドする
Raspberry Pi用コンテナをさくらのクラウドでビルドする
Shunsuke Kikuchi
 
さくらインターネット研究所(菊地)-2018年度研究計画-20180608
さくらインターネット研究所(菊地)-2018年度研究計画-20180608さくらインターネット研究所(菊地)-2018年度研究計画-20180608
さくらインターネット研究所(菊地)-2018年度研究計画-20180608
Shunsuke Kikuchi
 
菊地の研究ポートフォリオ2019版 v1.01
菊地の研究ポートフォリオ2019版 v1.01菊地の研究ポートフォリオ2019版 v1.01
菊地の研究ポートフォリオ2019版 v1.01
Shunsuke Kikuchi
 
データ流通実証実験について-20180207
データ流通実証実験について-20180207データ流通実証実験について-20180207
データ流通実証実験について-20180207
Shunsuke Kikuchi
 
Fogとは何か 20171205
Fogとは何か 20171205Fogとは何か 20171205
Fogとは何か 20171205
Shunsuke Kikuchi
 

More from 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