티스토리 뷰
이미지를 빌드하기 위해서는 build 명령어를 사용해야 합니다. 또한 빌드를 하기 위해서는 Dockerfile을 필요로 합니다.
Dockerfile을 사용하여 이미지로 빌드할 때 사용하는 명령어에 대해서 알아보겠습니다.
Dockerfile 빌드
기본적으로 Dockerfile을 빌드하기 위해서는 다음 명령어를 입력해야 합니다. Dockerfile이 존재하는 경로를 찾아 원하는 이미지명을 지정하여 이미지를 생성할 수 있습니다.
$ docker build -t 이미지명 Dockerfile경로
위의 명령어는 빌드를 할 때 필요로 하는 도커파일의 이름을 Dockerfile로 인지하고 있습니다. 따라서 별도로 도커파일의 이름을 지정해주지 않았습니다. 그러나 도커파일명이 항상 Dockerfile 일 수가 없습니다. 이럴 때는 -f 옵션을 사용하여 Dockerfile의 이름을 지정해주어야 합니다.
$ docker build -f 도커파일명 -t 이미지명 Dockerfile경로
-f 옵션은 도커파일명이 Dockerfile이 아닌 경우에만 별도로 지정하는 옵션입니다. 예를 들어 도커파일의 이름이 Dockerfile-env라면 다음과 같이 작성해야 합니다. 현재 디렉토리에 있는 Dockerfile-env 파일을 가지고 build-env 이미지를 빌드하는 명령어입니다.
$ docker build -f Dockerfile-env -t buildapp:env .
ARG vs ENV
Dockerfile을 작성할 때 ARG와 ENV 명령어가 존재합니다. 두 명령어의 역할을 비슷하면서도 다른 부분이 존재하는데요. 사진과 함께 설명을 해보겠습니다.
ARG
Dockerfile에 ARG 옵션을 사용하여 COLOR 환경변수에 red 값을 지정하였습니다. 이미지를 빌드하고 컨테이너를 실행하면 글씨색이 변경되지 않았음을 알 수 있습니다.
ARG 명령어는 빌드 시간에만 적용됩니다. 즉 이미지를 빌드할 때만 해당 옵션의 값이 사용되고, 이 이미지로 생성한 컨테이너에서는 적용되지 않습니다. 그렇다면 ARG 명령어를 굳이 왜 사용하는 걸까요? 동일한 Dockerfile을 여러 환경에서 사용한다고 생각해 봅시다. 예를 들어, 개발 환경에서는 디버그 모드를 활성화하고, 운영환경에서는 디버그 모드를 비활성화할 수 있습니다.
ENV
ARG 명령어와 마찬가지로 Dockerfile의 ENV 명령어에 red 값을 지정하였습니다. 해당 이미지를 빌드 후 실행하면 ARG 명령어와 달리 정상적으로 변경되어 있음을 알 수 있습니다.
ENV 명령어는 빌드된 이미지에 포함되어 컨테이너에서 실행될 때 사용됩니다. ENV로 지정한 변수는 컨테이너 내부에서 환경 변수로 사용되며, 컨테이너 실행 중에도 해당 변수의 값을 수정할 수 있습니다. 따라서 이미지로 빌드할 때 ENV로 정의한 변수의 값이 이미지에 저장되고, 컨테이너에서 실행할 때 해당 값이 적용됩니다.