Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

外部ライブラリを用いたビルド手順

...

外部ライブラリを用いたサンプルアプリのビルド

外部ライブラリを用いたアプリも、別途ソースコードをビルドしたりせずに利用することが出来ます。外部ライブラリを用いたアプリを開発したい場合も、Dockerfileに記載することで利用することができます。

また、OpenSSL (Ver 3), curl/libcurl (Ver 7.81.0)はベースのDockerイメージに搭載されているのでそのままご使用いただけます。

...

${SDK_DIR}\src\adamapp\skeleton_sample_app\Dockerfile.ext

Code Block
FROM iprocv5xcontainerregistry.azurecr.io/cadamenv:0.1.0ARG CADAMBUILDBASE_PATH
ARG CADAMAPPBASE_PATH
FROM ${CADAMBUILDBASE_PATH} AS build-env

WORKDIR /app
COPY . ./
WORKDIR /iprosdk
RUN chmod +x setup_env.sh
RUN /bin/bash -c "source setup_env.sh ambaCV5XCEXinternal && \
    cd /app && \
    make clean && \
    make"


# Application environment (arm64v8)
FROM iprocv5xcontainerregistry.azurecr.io/cadamappbase:0.0.2${CADAMAPPBASE_PATH} AS aplbase
RUN useradd -ms /bin/bash moduleuser
WORKDIR /app
COPY --chown=moduleuser:moduleuser --from=build-env /app/configuration.txt /app/
COPY --chown=moduleuser:moduleuser --from=build-env /app/data/ /app/data/
COPY --chown=moduleuser:moduleuser --from=build-env /app/setup/ /app/setup/
COPY --chown=moduleuser:moduleuser --from=build-env /app/bin/ /app/bin/
COPY --chown=moduleuser:moduleuser --from=build-env /app/conf/ /app/conf/

USER moduleuser

CMD ["bash"]

  • 1行目から10行目はアプリのビルドを行っています。1行目から12行目はアプリのビルドを行っています。

  • 1行目のFROMに指定しているイメージはi3行目のFROMに指定しているイメージはi-PROが提供する開発環境のイメージとなります。カメラで動作するアプリをビルドするためのライブラリ等が含まれていますので、変更しないでください。

  • 4行目では、skeleton6行目では、skeleton_sample_appフォルダ内のすべてのファイル (.dockerignoreに記載したファイルを除く) をビルドイメージ内にコピーしています。

  • 710-10行目で、setup12行目で、setup_env.shによる環境設定およびアプリのビルドを実施しています。この行は変更しないでください。

  • ビルドに必要な独自のOSSを取り込みたい場合は、2ビルドに必要な独自のOSSを取り込みたい場合は、4-5行目の間に追加してください。以下は、libjpegをインストールする場合の例です。

    Code Block
    #install libJpeg
    RUN apt update && \
        apt install -y libjpeg-dev && \
        apt-get clean && \
        rm -rf /var/lib/apt/lists/* 

     

  • また、OSSをソースコードからビルドしたい場合も同様に追加することができます。以下はEclipse Paho C Client Library for the MQTT Protocolをソースコードからビルドする場合の例です。

    Code Block
    WORKDIR /paho
    RUN git clone https://github.com/eclipse/paho.mqtt.c.git && \
        mkdir /tmp/build.paho && \
        cd /tmp/build.paho && \
        cmake -DPAHO_WITH_SSL=TRUE /paho/paho.mqtt.c && \
        cmake --build .
  • 13行目から25行目はext内に含まれ、実際にカメラ上で動作するイメージのビルド手順です。基本的な流れは、118行目から27行目はext内に含まれ、実際にカメラ上で動作するイメージのビルド手順です。基本的な流れは、1-10行目でビルドしたバイナリをコピーする形となります。12行目でビルドしたバイナリをコピーする形となります。

  • 14行目のFROMに指定しているイメージはi16行目のFROMに指定しているイメージはi-PROが提供するアプリケーションのベースとなるイメージとなります。カメラでで動作するための必要最小限のファイルが含まれていますので、変更しないでください。

  • 15行目では、カメラ内で動作させるためのユーザーを作成しています。i17行目では、カメラ内で動作させるためのユーザーを作成しています。i-PROカメラではroot権限でコンテナを動作させることは禁止されています。

  • 1719-21行目は、既にビルドしたバイナリや、必要なファイルをイメージにコピーしています。23行目は、既にビルドしたバイナリや、必要なファイルをイメージにコピーしています。

  • 23行目で実行ユーザーを15行目で作成した”moduleuser”に設定しています。25行目で実行ユーザーを17行目で作成した”moduleuser”に設定しています。

  • 25行目では、このイメージの起動時のデフォルトのコマンドを指定しています。実際にはdocker27行目では、このイメージの起動時のデフォルトのコマンドを指定しています。実際にはdocker-compose.yamlファイルで、ビルドしたアプリが最初に起動するように上書きされます。

  • 15行目以降で、独自に使用するライブラリがある場合はコピーを行うコードを追加します。以下はlibjpegをコピーするコードの例です。

    Code Block
    # copy libjpeg
    COPY --from=build-env /usr/lib/aarch64-linux-gnu/libjpeg.so.8.2.2 /usr/lib/aarch64-linux-gnu/
    RUN ln -sf /usr/lib/aarch64-linux-gnu/libjpeg.so.8.2.2  /usr/lib/aarch64-linux-gnu/libjpeg.so.8 && \
        ln -sf /usr/lib/aarch64-linux-gnu/libjpeg.so.8.2.2  /usr/lib/aarch64-linux-gnu/libjpeg.so
  • どのファイルをコピーする必要があるかは、ビルドしたバイナリに対してlddコマンドを使用したり、apt-getでインストールした場合は、dpkg -L コマンドを使用したりして調べてください。

...