Docker

[Docker] Dockerfile References - FROM

patrick-star 2023. 9. 5. 17:54
728x90

기본적인 문법

FROM [--platform=<platform>] <image> [AS <name>]

또는

FROM [--platform=<platform>] <image>[:<tag>] [AS <name>]

또는

FROM [--platform=<platform>] <image>[@<digest>] [AS <name>]

FROM 명령어새로운 빌드 stage를 초기화하고 뒤이어 나오는 명령어들에 대해 Base Image를 설정한다.
제대로 된 Dockerfile은 반드시 FROM 명령어 부터 시작해야 한다. 공식적으로 배포되는 이미지를 pull하면서 시작해야 편하다.

FROM 명령어에서 사용하는 변수들

  • ARG : Dockerfile에서 FROM보다 앞에 위치하는 유일한 명령어다. 관련 내용은 잠시 후에 살펴본다.
  • 'FROM' : 하나의 Dockerfile에 여러 번 FROM 명렁어를 사용할 수 있다. 그러면 여러 개의 이미지를 만들 수 있고 하나의 build stage에 이미지들끼리 의존 관계를 부여 할 수도 있다. (각각의 명령어는 이전 명령이 실행되고 나서 실행되기 때문에 이전 FROM을 통해 가져온 이미지와 그 뒤에 나올 이미지는 서로 의존 관계에 있다고 얘기할 수 있다)
  • AS <name>: FROM 명령 자체에 별명을 붙여줄 수 있다. 당연히 이렇게 이름을 붙이고 나면 뒤에 나오는 FROM 명령어에서 해당 이름을 사용할 수 있다. (option)
  • tag 또는 digest : 이 값들을 생략하면 tag값에는 기본적으로 latest가 부여된다. (option)
  • --platform : FROM이 멀티 플랫폼 이미지를 참조하는 경우 이미지의 플랫폼을 해당 flag를 통해 지정할 수 있다. (ex. linux/amd64, linux/arm64, windows/amd64) 기본적으로는 build request의 target platform을 사용한다.

ARG와 FROM

FROM 명령어는 맨 앞에 있는 FROM 이전에 위치한 ARG 명령이 선언한 변수를 지원한다.

ARG  CODE_VERSION=latest
FROM base:${CODE_VERSION}
CMD  /code/run-app

FROM extras:${CODE_VERSION}
CMD  /code/run-extras

FROM 이전에 선언된 ARG 명령어는 build stage에 속하지 않기 때문에 FROM 이후에 나오는 모든 명령에서는 ARG를 사용할 수 없다.
FROM 이전에 선언된 ARG의 기본값을 사용하려면 빌드 stage 내에서 값을 지정하지 않은 ARG 명령을 사용해야 한다.

ARG VERSION=latest
FROM busybox:$VERSION
ARG VERSION
RUN echo $VERSION > image_version # build stage 밖에서 선언한 ARG 변수값