바인드 마운트 덮어씌우기 문제 해결
도커 컨테이너에 익명 볼륨을 추가해 외부에서 덮어쓰면 안될 폴더를 지정
덮어씌워지지 않는 이유, 도커는 항상 컨테이너에 설정하는 모든 볼륨을 평가하며, 충돌이 있는 경우에는 더 긴 '내부' 경로를 우선하기 때문이다.
/app 보다 /app/node_modules 가 더 구체적이므로 덮어씌워지지 않는다.
추가로 아래 설정을 하면, 런타임 환경에서 코드가 바로 반영되니 개발 시 리빌드하여 재구동할 필요가 없다.
단, 개발중에만 실시간 코드 확인을 위해 바인드 마운트를 사용하지 실제 운영에선 바인드 마운트를 사용하지 않을 것이다.
소스가 업데이트 될 일도 없고 보안 문제도 있다.
dockerignore
COPY 명령으로 복사하면 안될 것들 정의
로컬에 nodeJS 서버를 사용한다면 아래를 추가하는 것이 좋다.
만약 로컬에서 npm install로 생성된 모듈이있으면, 컨테이너 구동 시 생성된 node_modules이 덮어씌워짐
환경변수
--env, -e
docker run 시 사용할 환경변수 등록 방법
$는 환경변수임을 알리는 기호
여러 개도 가능 약어로 -e PORT=123 가능
대문자는 관례로 가급적 지키는 것이 좋다.
--env-file 은 환경변수 파일을 지정
환경변수는 직접 읽을 이름을 Dockerfile에 지정하면되기에 관례에 따른 이름을 짓는다.
./은 현재 위치
환경 변수 & 보안
환경 변수에 저장하는 데이터의 종류에 따라, 보안 데이터를 Dockerfile에 직접 포함하지 않을 때 유용하다.
환경 변수나 환경 변수 파일은 런타임 시에 적용되기 때문이다.
빌드 인수(ARG)
--build-arg
이 인수는 Dockerfile에서만 사용할 수 있다. 단, Dockerfile에서도 모든 명령에 사용할 수 있는 건 아니다
예를 들어, CMD에서 사용할 수 없다.
ARG는 컨테이너가 시작될 때 실행되는 런타임 명령이기 때문이다.
다른 모든 명령에선 'ARG'를 사용할 수 있다
'개발 > 도커' 카테고리의 다른 글
네트워킹:(교차) 컨테이너 통신 (1) | 2023.02.19 |
---|---|
데이터 관리 및 볼륨으로 작업하기 - 요약 (0) | 2023.02.17 |
데이터 관리 및 볼륨으로 작업하기 - 02 (0) | 2023.02.15 |
데이터 관리 및 볼륨으로 작업하기 - 01 (0) | 2023.02.12 |
Docker 이미지 & 컨테이너 : 코어 빌딩 블록 - 02 (0) | 2023.02.10 |