익명 볼륨 제거하기
> 컨테이너가 제거되면, 익명 볼륨이 자동으로 제거
> '--rm' 옵션으로 컨테이너를 시작/실행할 때 발생
> 옵션 없이 컨테이너를 시작하면, 컨테이너를 (docker rm...으로) 제거하더라도 익명 볼륨은 제거되지 않음
> 그래도 컨테이너를 다시 만들어, 다시 실행하면(즉, docker run... 다시 실행), 새 익명 볼륨이 생성
> 즉, 익명 볼륨이 자동으로 제거되지 않았지만, 다음에 컨테이너가 시작될 때, 다른 익명 볼륨이 연결되기 때문에, 이전 컨테이너를 제거하고 새 컨테이너를 실행하는데 도움이 되지 않음
> 사용하지 않는 익명 볼륨이 쌓이기 시작
> 'docker volume rm VOL_NAME' 또는 'docker volume prune'을 통해 그러한 볼륨을 삭제할 수 있음
바인드 마운트 시작하기
> docker run -d -p 4000:80 --rm --name feedback-app -v feedback:/app/feedback - v "/Users/gangseyun/docker/data-volumes-01-starting-setup:/app" feedback-node:volume
"호스트 경로 : 컨테이너 경로 " 이미지 이름
> 호스트 경로에 있는 폴더 전체를 /app에 복사 > 프로그램의 실행에 필요한 node_modules 폴더까지 덮어씀
> 프로그램 실행 오류
✓ 해결 방법
: docker run -d -p 4000:80 --rm --name feedback-app -v feedback:/app/feedback -v "/Users/gangseyun/docker/data-volumes-01-starting-setup:/app" -v /app/node_modules feedback-node:volumes
> -v /app/node_modules를 추가하여 프로그램 실행에 필요한 node_modules 폴더를 유지시킨다.
> but 위의 방식은 server의 수정에는 적용할 수 없음
macOS / Linux: -v $(pwd):/app
Windows: -v "% cd%":/app
> OS에 따라, 타이핑을 절약하기 위해 이 바로 가기를 사용할 수 있음
server.js의 수정을 도커 컨테이너에 적용시키는 방법
1. package.json에 밑에 코드를 추가한다
> nodemon: javascript의 변화에 대해 적용 시켜주는 프로젝트 폴더를 감시하는 확장 도구
> javascript가 변경되면 서버를 재실행
2. Dockerfile에 밑에 코드 수정한다
읽기 전용 볼륨 살펴보기
>
docker run -d -p 4000:80 --rm --name feedback-app -v feedback:/app/feedback -v "/Users/gangseyun/docker/data-volumes-01-starting-setup:/app:ro" -v /app/temp -v /app/node_modules feedback-node:volumes
> 경로 뒤에 ' :ro '를 추가하면 컨테이너 내부의 폴더를 읽기 전용으로 바꿀 수 있음
모든 것을 복사하진 마세요: "dockerignore" 파일 사용하기
. dockerignore
> "무시할" 파일 및 폴더를 더 추가할 수 있음
- Dockerfile
- .git
>. dockerignore 파일에 추가할 경우, 잠재적으로 존재하는. git폴더와 Dockerfile 자체를 무시할 수 있음
환경 변수 & ". env" 파일 작업
1. 환경 변수 지정하기
> docker을 실행할 때 --env or --e를 사용하면 환경 변수 값을 지정할 수 있음
2. 환경 변수 지정하기
> .env 파일을 만들 후, 터미널 창에 --env PORT=9000을 지우고 "--env-file(환경 변수가 저장된 파일)./. env (현재 경로에 있는. env 파일)"을 써서. env 파일을 불러와서 포트에 매칭시킨다.
환경 변수 & 보안
> 환경 변수에 저장하는 데이터의 종류에 따라, 보안 데이터를 Dockerfile에 직접 포함하고 싶지 않을 수도 있음
> 그 대신 런타임에만 사용되는 별도의 환경 변수 파일로 이동
> 그렇지 않으면, 값이 '이미지에 포함'되며, 모든 이가 'docker history <이미지>'로 값을 읽을 수 있음
> 별도의 파일을 사용하는 경우, 'docker run'을 실행할 때 그 파일을 가리키므로, 그 값은 이미지의 일부분이 아님
> 하지만 소스 컨트롤을 사용하는 경우, 별도의 파일을 소스 컨트롤 저장소의 일부분으로 커밋하지 않도록 조심해야 함
빌드 인수(ARG) 사용하기
> Dockerfile에 ARG를 입력하여 환경 변수를 설정할 수 있음
> ENV에 ARG 값을 넣을 수도 있음
> 터미널에 --build-arg "환경 변수"="포트 번호"를 넣어 build 할 때 포트 번호를 지정할 수 있음
'DevOps BootCamp > 도커' 카테고리의 다른 글
로컬 호스트와 컨테이너 통신 (0) | 2023.04.15 |
---|---|
도커 푸시하기 (0) | 2023.04.13 |
두 개의 도커 이미지 다루기 (0) | 2023.04.12 |
왜 도커인가? (0) | 2023.04.11 |
도커 컨테이너 차트 시트 (0) | 2023.04.10 |