日々精進

新しく学んだことを書き留めていきます

Dockerfile内でインストールしたパッケージがdocker imageに入っていない

現象は以下。

  • 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/