4
0

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 1 year has passed since last update.

DockerfileでDocker Hub上のイメージから特定のファイルをコピーしてみる

Posted at

こんにちは!こんばんは!

今回はDockerfileで特定のイメージから特定のファイルをコピーする方法を紹介したいと思います!

まえがき

Dockerfileを書いていると特定のイメージから特定のファイルを今ビルドしているイメージ内に収めたいことが時々あります。

たとえば、Laravelの実行環境をDockerで作りたいってなったときに、Composerのイメージから composer の実行ファイルをもらってきて、それを使ってcomposer installしたいといった使い方があるかと思います。

wgetなどを上手く使って、公開元のGitHubのレポジトリから取って来るなど様々なやり方があるかと思いますが、今回は公開されているイメージから特定のファイルのみをコピーする方法でやりたいと思います。

イメージ間のファイルのコピーは通常通りCOPYで出来る

今回はcomposer:2.2.7のイメージからcomposerの実行ファイルを取ってきて、ビルドしている対象のイメージにcomposerをコピーしてインストールしてみます。

COPY --from=composer:2.2.7 /usr/bin/composer /usr/bin/composer

はい、なんとこれだけで出来ます。

マルチステージビルドをしていると同じ書き方で別のステージからファイルを持ってくるやり方がありますが、これと似た書き方でDocker Hub上で公開されているイメージからファイルを取ってくることが出来ます。

どういう時に使うか?

個人的には特にマルチアーキテクチャ(x86_64、aarch64等)に対応したイメージをビルドしたいときには特に使える技じゃないかと思います。

たとえば、ビルド済みのバイナリを特定のイメージから取ってきて入れたいといったときには、対象のアーキテクチャを意識する必要があります。

今回の方法だとコピー元のイメージがビルド対象のアーキテクチャに対応していれば、何も指定しなくてもそのまま合ったものを取ってきてくれるので考えることが一つ減って嬉しいですね。

さいごに

今回の手法を使うことで、wgetや複雑なワンライナーを使う必要すらなく簡単にファイルをコピーすることが出来ました。

是非、Dockerfileを書く時に活用してみてください!

4
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?