現象は以下。
- Dockerfile内でapt-getでlibopencv-devをインストールした
- imageからコンテナを作ってログインするとlibopencv-devが無い
原因はdokcerのmulti stage buildを利用していて、Dockerfileは以下のような感じだったんだけど、 これだと/opt/の下しか実行イメージにコピーされないのでここ以外にインストールされたライブラリは実行イメージに入らないこと。
RUN apt-get install ... (環境構築のコード) FROM prebuild COPY --from=prebuild /opt/. /opt/
multi stage buildの仕組みがよく分かってなかった。。 以下のように、パッケージをインストールした後レイヤーに別名を付けておき、それを実行イメージのベースイメージにすることで解決した。
RUN apt-get install ... FROM preinst as prebuild (環境構築のコード) FROM preinst COPY --from=preinst /opt/. /opt/