node_modules를 추가해서 있는 지 확인 할 수 있다.
npm install을 해도 이미지에 복사되지 않는다.
폴더가 존재하면 npm install로 생성된 node_modules 폴더를 덮어쓸 것이기 때문이다.
=> 로컬 이 오래되었을수도, 중요한 종속성 누락, 복사 프로세스가 더 오래 걸릴 수 있기 때문이다.
.dockerignore 파일에 "무시할" 파일 및 폴더를 더 추가할 수 있습니다.
예를 들어, 항목에 다음을 추가하는 것을 고려하세요.
Dockerfile
.git
이것은 잠재적으로 존재하는 .git 폴더와 Dockerfile 자체를 무시합니다(프로젝트에 Git을 사용하는 경우).
일반적으로 애플리케이션이 올바르게 실행되는데 필요없는 모든 것을 추가하고자 할 겁니다
build-time Arguments: Dockerfile에서 특정 Dockerfile 명령으로 다른값을 추출하는데 사용할 수 있는 변수를 설정.
docker build 실행할때 => --build-arg 옵션과 함꼐 제공되는 인수를 기반으로 해서 말이다.
Environment -> Dockerfile 내부에서 사용가능하다. 반면 인수는 실행중인 애플리케이션의 전체 애플리케이션 코드에서 사용할 수 있다.
Dockerfile 내부의 ENV옵션으로 환경변수 존재한다고 알린다음 dokcer run --env 옵션을 사용해서 구체적인 값을 제공한다.
사용가능한 process.env 에 접근하여 전역적으로 사용 가능한 환경변수를 설정할 수 있다. PORT라는 env를 얻을 수 있다. Dockerfile내부에서 설정하거나 알릴 수 있다.
Dockerfile
ENV PORT 80
EXPOSE $PORT
$: Docker에게 $뒤에 있는 것이 환경변수의 이름임을 알려준다
이미지 빌드하기
docker build -t feedback-node:env .
Docker run
docker run -d --rm -p 3000:80 --name feedback-app -v feedback:/app/feedback -v "USErs/~~/docker-complete:/app:ro" -v /app/node_modules -v /app/temp feedback-node:env
명령어에서 설정해주기
docker run -d --rm -p 3000:80 --env PORT=8000 --name feedback-app -v feedback:/app/feedback -v "USErs/~~/docker-complete:/app:ro" -v /app/node_modules -v /app/temp feedback-node:env
=> 여러개의 환경변수 등록가능
-> reload만 하면 된다
-> 여러개의 -e만 추가하면 된다
.env
PORT=8000
파일을 등록해서 읽어오기
docker run -d --rm -p 3000:80 --env-file ./.env --name feedback-app -v feedback:/app/feedback -v "USErs/~~/docker-complete:/app:ro" -v /app/node_modules -v /app/temp feedback-node:env
인수와 환경변수는 서로 다른 모드, 다른 구성에서 하나의 동일한 이미지를 기반으로 하나의 동일한 컨테이너를 실행하는데 도움이 된다.
환경 변수 및 보안에 대한 한 가지 중요한 참고사항: 환경 변수에 저장하는 데이터의 종류에 따라, 보안 데이터를 Dockerfile에 직접 포함하고 싶지 않을 수도 있습니다.
그 대신 런타임에만 사용되는 별도의 환경 변수 파일로 이동시키죠. (즉, Docker run으로 컨테이너를 실행할 때).
그렇지 않으면, 값이 '이미지에 포함'되며, 모든 이가 'docker history <이미지>'를 통해, 이 값을 읽을 수 있습니다.
일부 값의 경우, 이것이 중요하지 않을 수도 있지만, 자격 증명, 개인 키 등의 경우에는 확실히 피해야만 합니다!
별도의 파일을 사용하는 경우, 'docker run'을 실행할 때 그 파일을 가리키므로, 그 값은 이미지의 일부분이 아닙니다. 하지만 소스 컨트롤을 사용하는 경우, 별도의 파일을 소스 컨트롤 저장소의 일부분으로 커밋하지 않도록 조심하세요.
DOCKERFILE
ARG DEFAULT_PORT=80
ENV PORT $DEFUALT_PORT
cmd에서는 사용되면 안된다. 다른 모든 명령에선는 사용가능하다
env에서도 사용가능하다
동적인수 설정 가능 -> 디펄트 값.
docker build -t feedback-node:web-app .
docker build -t feedback-node:dev --build-arg DEFAULT_PORT=8000 .
ARG는 무조건 Dockerfile의 시작부분에 적으면 안된다
무언가 변경되면 모든 후속 레이어가 리빌드된다. 모든 후속 명령이 재시작 된다.