透過Qemu在X86機器上執行Pi
Pi是Arm的CPU架構,因此在執行上無法透過X86的機器來執行Pi所編譯出來的image與相關程式... 而參考Resin跟Philipzh大大的文章後,大致上可以了解用qemu的
Install Qemu
在你的Docker Host上安裝qemu arm的套件
apt-get -y install qemu-system-arm
Run Pi image
安裝後,接下來找出qemu-system-arm的安裝位置
# which qemu-system-arm
/usr/bin/qemu-system-arm
然後可以透過下面指令讓pi的相關image跑起來
docker run -it --rm -v /usr/bin/qemu-system-arm:/usr/bin/qemu-arm-static philipz/rpi-raspbian bash
在X86上build Pi image
在build的時候,因為docker build限制只能載入目前目錄底下的資料,因此我們直接把qemu-system-arm複製到當前目錄裡面...
cp /usr/bin/qemu-system-arm .
然後透過類似下面的Dockerfile
FROM hypriot/rpi-node
COPY qemu-arm /usr/bin/qemu-arm
RUN apt-get update -y
RUN apt-get install libapparmor-dev -y
ADD ./app /app
WORKDIR /app
CMD ["npm", "start"]
其中只有一行比較特別... 就是"COPY qemu-arm /usr/bin/qemu-arm",只要有這行,一般的Linux image都可以直接透過X86來做docker build...
docker build -t test/my-pi-image .
Reference
- Philipzh介紹在X86機器上執行Pi的docker: http://www.instructables.com/id/Uniform-Development-by-Docker-QEMU/
- Resin.io介紹arm docker build的方式:https://resin.io/blog/building-arm-containers-on-any-x86-machine-even-dockerhub/
- 執行arm的corss compile: https://github.com/justincormack/cross-docker/blob/master/cross-docker
- Resin.io建置raspbian base image的方式:https://github.com/resin-io-library/resin-armhfv7-debian