Slide 1

Slide 1 text

どこでも動くぞDocker コンテナに乗り遅れた人たちへ 2018.11.2 daisuke sato @dskst9 の落とし穴

Slide 2

Slide 2 text

daisuke sato @dskst9 Engineering Manager at ASKUL クラウドとアーキテクチャ、組織論が好き。最近はエンジニ アリングマネージャ楽しいよというのを世の中に広めたいと 思っている。

Slide 3

Slide 3 text

コンテナの話で よく見るシーン

Slide 4

Slide 4 text

あれ? 私の環境だと 動いたんだけどな。。

Slide 5

Slide 5 text

ということがなくなる あれ? 私の環境だと 動いたんだけどな。。

Slide 6

Slide 6 text

ちょっと待って!

Slide 7

Slide 7 text

実は動かないことも あるんです

Slide 8

Slide 8 text

本日お話すること Dockerはどこでも動くが、 ホスト上のデバイスが関わると 動かないこともあるよという話

Slide 9

Slide 9 text

Raspberry Pi で遊んだ時のこと

Slide 10

Slide 10 text

Raspberry Pi 3 Model B ● PCB Ver:1.2 (Made in Japan) ● CPU:Cortex-A53 4コア 1.2GHz(ARMv8、64bit) ● GPU:2コア VideoCore IV 400MHz(3D 300MHz) ● メモリー:1GB DDR2 450MHz ● 電源:Micro USB / 2.54mm ピンヘッダ 5V 2.5A ● LAN:100Base RJ45 ● Wi-Fi:802.11 b/g/n 2.4GHz ● Bluetooth:4.1, LE ● ビデオ出力:HDMI、コンポジット、DSI(MIPI) ● オーディオ出力:3.5mm ジャック、HDMI、I2S ● USB:USB 2.0 × 4 ● ピンヘッダ:GPIO×26 3.3V、UART、I2C、SPI、I2S、PWM、5V、3.3V ● メモリー カード:micro SDメモリーカード(SDIO)

Slide 11

Slide 11 text

Raspberry Pi 3 Model B ● PCB Ver:1.2 (Made in Japan) ● CPU:Cortex-A53 4コア 1.2GHz(ARMv8、64bit) ● GPU:2コア VideoCore IV 400MHz(3D 300MHz) ● メモリー:1GB DDR2 450MHz ● 電源:Micro USB / 2.54mm ピンヘッダ 5V 2.5A ● LAN:100Base RJ45 ● Wi-Fi:802.11 b/g/n 2.4GHz ● Bluetooth:4.1, LE ● ビデオ出力:HDMI、コンポジット、DSI(MIPI) ● オーディオ出力:3.5mm ジャック、HDMI、I2S ● USB:USB 2.0 × 4 ● ピンヘッダ:GPIO×26 3.3V、UART、I2C、SPI、I2S、PWM、5V、3.3V ● メモリー カード:micro SDメモリーカード(SDIO) USBに機器を 接続した

Slide 12

Slide 12 text

接続した機器 NFCリーダー PaSoRi S380 バーコードリーダー BC-BR900L-B

Slide 13

Slide 13 text

こいつらはただ接続すれば Dockerで動作するのか?

Slide 14

Slide 14 text

接続した機器 NFCリーダー PaSoRi S380 バーコードリーダー BC-BR900L-B

Slide 15

Slide 15 text

何が起こったのか

Slide 16

Slide 16 text

問題と原因 NFCデバイスを Docker が認識ができな かった Docker からNFCデバイスを明示的に指定 しないと認識ができない

Slide 17

Slide 17 text

やったこと docker run でデバイスが接続されている USBポートを指定する $ docker run \ --device=/dev/bus/usb/001/001

Slide 18

Slide 18 text

余談: nfcpy が動作しない nfcpyとは? Python で NFC デバイスを利用するための ライブラリ https://nfcpy.readthedocs.io/en/latest/ove rview.html

Slide 19

Slide 19 text

余談: デバイスの見つけ方 lsusb コマンドでホストに接続されているデ バイスを確認する $ lsusb 2018-10-29 22:33:43.056 system_profiler[*****:*******] SPUSBDevice: IOCreatePlugInInterfaceForService failed 0xe00002be Bus 020 Device 000: ID 05ac:8600 Apple Inc. iBridge Bus 000 Device 001: ID 1d6b:PTLP Linux Foundation USB 3.0 Bus Bus 001 Device 001: ID 1d6b:CIAR Linux Foundation USB 3.1 Bus Bus 000 Device 001: ID 1d6b:CIAR Linux Foundation USB 3.1 Bus

Slide 20

Slide 20 text

環境依存が発生

Slide 21

Slide 21 text

ホスト毎にデバイスの認識が異なる ● USBのデバイス番号が異なる ● マウント先が異なる ○ Raspbianなど: /dev/bus/usb/* ○ macOS: /Volumes (?)

Slide 22

Slide 22 text

Docker for Mac の問題 ● Docker for Mac ではそもそもUSBをサ ポートしていない https://github.com/sorccu/docker-adb/ issues/8

Slide 23

Slide 23 text

考えていた開発フロー 1. Mac でソフトウェア開発 2. Docker for Mac で動作検証 3. Docker for Raspbian で動作検証

Slide 24

Slide 24 text

現実の開発フロー 1. Mac でソフトウェア開発 2. Docker for Mac で動作検証 3. Docker for Raspbian で動作検証 Macでデバイス 接続ができない

Slide 25

Slide 25 text

まとめ

Slide 26

Slide 26 text

コンテナは どこでも動くけど、

Slide 27

Slide 27 text

デバイスを接続する時は 環境依存に注意しよう

Slide 28

Slide 28 text

コンテナホストとの 環境依存に注意しよう

Slide 29

Slide 29 text

ご清聴ありがとうございました