빌드 인자와 캐시 없이 서비스 빌드
이 단계에서는 Docker Compose 의 두 가지 고급 빌드 옵션인 빌드 인자 사용과 캐시 없이 빌드하는 방법을 살펴보겠습니다.
빌드 인자를 사용하면 Docker 빌드 프로세스에 변수를 전달할 수 있습니다. 이는 Dockerfile 자체를 변경하지 않고도 다양한 환경 또는 구성에 따라 빌드를 사용자 정의하는 데 유용합니다.
먼저, 빌드 인자를 수락하도록 Dockerfile을 수정해 보겠습니다. 편집을 위해 Dockerfile을 엽니다.
nano ~/project/Dockerfile
내용을 다음으로 변경합니다.
FROM ubuntu:latest
ARG MESSAGE="Hello from build argument!"
RUN apt-get update && apt-get install -y cowsay
CMD ["cowsay", "$MESSAGE"]
MESSAGE라는 빌드 인자를 기본값과 함께 정의하기 위해 ARG MESSAGE 지시어를 추가했습니다. 또한 CMD 지시어를 변경하여 이 인자를 사용하도록 했습니다.
Ctrl + X, Y, Enter를 눌러 Dockerfile을 저장합니다.
이제 이 빌드 인자에 값을 전달하도록 docker-compose.yml 파일을 수정해 보겠습니다. 편집을 위해 파일을 엽니다.
nano ~/project/docker-compose.yml
내용을 다음으로 변경합니다.
version: "3.8"
services:
cow:
build:
context: .
args:
MESSAGE: "Custom message from Compose!"
build: 지시어를 context: 및 args:가 있는 객체로 변경했습니다.
context: .는 Dockerfile이 포함된 디렉토리인 빌드 컨텍스트를 지정합니다.
args:는 Dockerfile에 전달할 빌드 인자의 맵입니다. MESSAGE 인자에 값 "Custom message from Compose!"를 전달하고 있습니다.
Ctrl + X, Y, Enter를 눌러 docker-compose.yml 파일을 저장합니다.
이제 빌드 인자를 사용하여 이미지를 빌드해 보겠습니다. ~/project 디렉토리에 있는지 확인하십시오.
cd ~/project
docker-compose build
빌드 출력을 관찰합니다. 빌드 프로세스 중에 빌드 인자가 사용되는 것을 확인할 수 있습니다.
빌드가 완료된 후 이 이미지에서 컨테이너를 실행하여 출력을 확인해 보겠습니다.
docker run project_cow
"Custom message from Compose!" 메시지가 포함된 cowsay 출력을 볼 수 있습니다. 이는 빌드 인자가 성공적으로 전달되고 사용되었음을 확인합니다.
경우에 따라 캐싱 문제를 의심하거나 깨끗한 빌드를 보장하기 위해 Docker 가 모든 레이어를 다시 빌드하도록 강제할 수 있습니다. 이는 docker-compose build 명령과 함께 --no-cache 플래그를 사용하여 수행할 수 있습니다.
--no-cache 플래그를 사용하여 이미지를 다시 빌드해 보겠습니다.
docker-compose build --no-cache
빌드 출력을 다시 관찰합니다. 이번에는 Docker 가 캐시된 레이어를 사용하지 않고 Dockerfile의 모든 단계를 다시 빌드하는 것을 볼 수 있습니다. 이 프로세스는 캐시된 빌드보다 더 오래 걸립니다.
빌드가 완료된 후 컨테이너를 다시 실행하여 메시지가 여전히 빌드 인자를 통해 전달된 것인지 확인할 수 있습니다.
docker run project_cow
여전히 "Custom message from Compose!"를 볼 수 있습니다. --no-cache 플래그는 docker-compose.yml에 정의된 구성이 아닌 빌드 프로세스에만 영향을 미칩니다.