.env 파일(NextJS)에서 도커 빌드 인수 설정
까다로운 점은 컨테이너를 한 번 빌드하고 환경 구성이 다른 여러 포드에 배포한다는 것입니다.
기술적으로 도커는 다음과 같이 옵션
.env
과 함께 실행될 때 --env-file
파일을 존중할 수 있습니다.docker run --rm --env-file .env -p 3000:3000 -d YOUR_CONTAINER_TAG:prod
그래서 여기에 문제가 있습니다 ...
그러나 환경은 컨테이너 내부의 빌드 시간 동안 설정되었고 NextJS는 자동 사이트 최적화 기능이 있으며 빌드 중에 서버 측 렌더링을 위해 미리 렌더링된 페이지를 빌드하기 때문에 Docker 빌드 실행의 환경 변수가 이미지에 구워져 신경쓰지 않았습니다. 서버 논리에 대한
.env
파일에 대해.구조를 위한 작은 bash 스크립트
Envault를 사용하여 환경 구성을 관리하고 있으며 이미지가 Jenkins 파이프라인으로 빌드되고 있기 때문에 파이프라인은 매번 Envault에서 올바른
.env
파일을 가져옵니다.Dockerfile
내부에서 vars를 다음과 같이 변경합니다.ARG DB_USER
ARG DD_SVC_NAME
ENV DB_USER=$DB_USER
ENV DD_SVC_NAME=$ARG DD_SVC_NAME
이는 빌드 명령이 각 변수에 대한 매개변수
--build-arg
를 포함해야 함을 의미합니다.bash를 통해
.env
파일에서 이를 읽으려면 다음을 사용할 수 있습니다.$(for i in `cat .env`; do out+="--build-arg $i " ; done; echo $out;out="")
도커 명령은 다음과 같습니다.
docker build -f Dockerfile -t MYTAG:prod $(for i in `cat .env`; do out+="--build-arg $i " ; done; echo $out;out="") .
보너스 라운드: makefile
나는 Makefile을 좋아하기 때문에 명령에 bash 루프를 포함하는 방법에 약간의 함정이 있습니다. 그래서 참조용 Makefile은 다음과 같습니다.
SHELL := /bin/bash
...
# this line will set the build args from env file
DECONARGS = $(shell echo "$$(for i in `cat .env`; do out+="--build-arg $$i " ; done; echo $$out;out="")")
GEN_ARGS = $(eval BARGS=$(DECONARGS))
.PHONY: dist-prod
dist-prod:
@echo "Running docker build for PROD ..."
$(GEN_ARGS)
docker build -f Dockerfile -t $(TAG_SHA) $(BARGS) .
...
Reference
이 문제에 관하여(.env 파일(NextJS)에서 도커 빌드 인수 설정), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/darksmile92/set-docker-build-args-from-env-file-2p4a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)