はじめに
主にやりたいことは、以下 2点です。
- Gitlab CI で クロスビルドをするための Docker イメージを構築する
- ONBUILD で ツールチェインを取り込む
ツールチェインは Yocto で生成しているため、割愛します。
Docker ONBUILD とは
ONBUILD で指定された処理 (ADD/RUN/etc...) は、次のイメージ作成時に行われる。
今回は、ツールチェインとなるバイナリの取り込みをONBUILDする。
手順
以下のような形になります。
1. ベースとなるイメージを作成 (ONBUILDを使ったDockerfileから作成)
2. クロスビルド環境のイメージを作成 (ベースイメージを指定したDockerfileから生成)
1. ベースとなるイメージを作成
Dockerfile
FROM ubuntu:14.04
MAINTAINER yuu
ENV DEBIAN_FRONTEND noninteractive
RUN apt-get update && \
apt-get install -y --no-install-recommends \
bzip2
ENV DEBIAN_FRONTEND dialog
RUN ln -s /usr/bin/python3 /usr/bin/python
ONBUILD ADD toolchain.sh /
ONBUILD RUN chmod +x toolchain.sh && /toolchain.sh -y && rm /toolchain.sh
ONBUILD RUN /toolchain.sh -y
RUN ln -fs /bin/bash /bin/sh
Docker Hub を見ていると大体イメージ名に -onbuild
を付与していますね。
docker-onbuild
$ docker build -t crossbuild-onbuild:0.0.1 .
2. クロスビルド環境のイメージを作成
Dockerfile
FROM crossbuild-onbuild:0.0.1
MAINTAINER yuu
CMD source /opt/fsl-imx-fb/3.14.52-1.1.0/environment-setup-cortexa9hf-vfp-neon-poky-linux-gnueabi && \
source /opt/fsl-imx-fb/3.14.52-1.1.0/sysroots/x86_64-pokysdk-linux/environment-setup.d/qt5.sh && \
bash
toolchain.sh
を同じディレクトリに配置 (シンボリックリンクでも可)
docker-build
$ docker build -t crossbuild:0.0.1 .
今回の docker build で Dockerfile
に記述していない処理(ONBUILD処理)が走るのが確認できると思います。
まとめ
- ONBUILDを使うことで、フレキシブルなベースイメージを作れる
注意事項
クロスビルドの確認まで起こっていません。
そのため足りないパッケージ(cmake,autotools,...)が発生する可能性があります。