DevOps BootCamp/도커

컨테이너 - 볼륨과 환경 변수

cloudmaster 2023. 4. 13. 15:23

익명 볼륨 제거하기

 > 컨테이너가 제거되면, 익명 볼륨이 자동으로 제거

 > '--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가 변경되면 서버를 재실행

server을 nodemon으로 실행
의존성에 nodemon 추가

 2. Dockerfile에 밑에 코드 수정한다

server.js를 npm start로 시작

읽기 전용 볼륨 살펴보기

 >

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

 > "무시할" 파일 및 폴더를 더 추가할 수 있음

  1. Dockerfile
  2. .git

 >. dockerignore 파일에 추가할 경우, 잠재적으로 존재하는. git폴더와 Dockerfile 자체를 무시할 수 있음

 

환경 변수 & ". env" 파일 작업

 

1. 환경 변수 지정하기

Dockerfile에 환경변수 ENV를 이용하여 PORT를 할당했다

  > 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