Save 37% off PRO during our Black Friday Sale! »

どこでも動くぞDockerの落とし穴

Ff655584d57df8448153fa618cc86db3?s=47 Daisuke Sato
November 02, 2018

 どこでも動くぞDockerの落とし穴

コンテナに乗り遅れた人たちへ
https://askul.connpass.com/event/104621/

Ff655584d57df8448153fa618cc86db3?s=128

Daisuke Sato

November 02, 2018
Tweet

Transcript

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

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

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

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

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

  6. ちょっと待って!

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

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

  9. Raspberry Pi で遊んだ時のこと

  10. 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)
  11. 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に機器を 接続した
  12. 接続した機器 NFCリーダー PaSoRi S380 バーコードリーダー BC-BR900L-B

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

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

  15. 何が起こったのか

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

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

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

    rview.html
  19. 余談: デバイスの見つけ方 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
  20. 環境依存が発生

  21. ホスト毎にデバイスの認識が異なる • USBのデバイス番号が異なる • マウント先が異なる ◦ Raspbianなど: /dev/bus/usb/* ◦ macOS:

    /Volumes (?)
  22. Docker for Mac の問題 • Docker for Mac ではそもそもUSBをサ ポートしていない

    https://github.com/sorccu/docker-adb/ issues/8
  23. 考えていた開発フロー 1. Mac でソフトウェア開発 2. Docker for Mac で動作検証 3.

    Docker for Raspbian で動作検証
  24. 現実の開発フロー 1. Mac でソフトウェア開発 2. Docker for Mac で動作検証 3.

    Docker for Raspbian で動作検証 Macでデバイス 接続ができない
  25. まとめ

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

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

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

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