4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Docker のマルチステージビルド (Multi Stage Build) で Symbolic Link を使う

Last updated at Posted at 2020-08-27

Dockerはサイズを小さくするために、builderと実際使うイメージでステージを分けて書くマルチステージビルド(multi-stage builds)がよく使われています。このマルチステージビルドを使う時、builderでライブラリをインストールし、実際使うイメージにライブラリをADDやCOPYで追加して使いたい場合があります。

ライブラリにはSymbolic Linkがよく含まれるのですが、DockerのADDやCOPYコマンドはSymbolic Linkを追加することは出来ません。

この問題は、builderで必要なSymbolic Linkをtarで固め、次のステージでtarファイルを展開することで意外と簡単に解決できます。

実際のDockerfileの例で詳しく見てみましょう。

Dockerfileの例と解説


FROM debian:latest as builder
RUN tar czf testlib.tar.gz /usr/local/lib/test.so.* \  
            /usr/local/lib/test1.so.* \
            /usr/local/lib/test2.so.* # 必要なSymbolic Linkをtarにする

FROM debian:latest
COPY --from=builder /testlib.tar.gz /testlib.tar.gz  # 固めたtarファイルをコピー
RUN cd / && tar xzf testlib.tar.gz # 固めたSymbolic Linkを展開

この方法を知るまでADDやCOPYでSymbolic Linkを追加しようと苦労したことが夢のようです。

参考

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?