dogwood008の開発メモ!

最近のマイブームは機械学習, Ruby on Rails。中でも機械学習を使った金融商品の自動取引に興味があります。

【Docker】FROMより前の段階でARGを使う

要旨

  • Dockerfile には、FROMより前の段階でARGを置くことができる
  • FROMより後の段階でそのビルド引数を使用したければ、再度宣言が必要

詳細

下記記事より。

blog.dogwood008.com

github.com

# Dockerfile

# 使用するDebianのバージョンを固定
ARG DEBIAN_CODENAME=bullseye
# 使用するRubyのバージョンを固定
ARG RUBY_VERSION=3.1.2
FROM ruby:${RUBY_VERSION?}-${DEBIAN_CODENAME?}
(中略)
ARG DEBIAN_CODENAME
ARG RUBY_VERSION

一般的に、DockerfileFROMで始めることが多い。ただし、ARGを先に置くこともできる。

今回の用法がまさにそれで、使用するイメージのタグをビルド引数として与えるようなときに使用できる。

1点注意が必要で、 FROMより前に宣言したARGは、ビルドステージの外にあるため、FROM より後で再利用したい場合は、再度宣言しない限り使えない1。上記の例だと、ARG DEBIAN_CODENAME ARG RUBY_VERSION が該当する。

根拠

An ARG declared before a FROM is outside of a build stage, so it can’t be used in any instruction after a FROM. To use the default value of an ARG declared before the first FROM use an ARG instruction without a value inside of a build stage:

https://docs.docker.com/engine/reference/builder/#understand-how-arg-and-from-interact