[ Udemy : Docker & Kubernetes 실전가이드 (3) ] 데이터 관리 및 볼륨으로 작업하기
PORT=3000
1. 볼륨
데이터를 영구적으로 저장하기 위해 호스트 컴퓨터에 폴더를 생성해 저장하는 것
2. 볼륨의 필요성
컨테이너에 데이터를 저장하면 Read-Write 레이어에 추가해 관리하는데, 이는 컨테이너가 삭제되면 사라진다는 큰 단점이 있다. 이를 보완하려면 영구적으로 데이터를 저장( 회원의 입력정보 등 ) 볼륨을 통해 저장하면 된다.
3. 볼륨 추가하는 방법
볼륨을 추가하는 방법은 "Dockerfile 에 추가", "docker volume create 명령어" 2가지가 있다.
먼저 "Dockerfile 에 추가"같은 경우는
Dockerfile에 작성
Volume ["저장할 경로"] -> 익명 볼륨
이런식으로 따로 폴더의 경로를 지정해 주면 된다.
다음 "docker volume create 명령어"의 경우
$docker volume create my_volume
이후
$docker run -d --name my_container -v my_volume:/app busybox
를 통해 볼륨을 만들고 docker run 명령어에서 -v 플래그를 사용해 연결해주면 된다
4. 볼륨 종류
1) 도커 볼륨 (Docker Volumes)
도커에서 기본적으로 제공하는 저장소 관리 방식이며, 컨테이너와 독립적으로 데이터를 유지할 수 있다.
✅ 익명 볼륨 (Anonymous Volumes)
- 컨테이너가 삭제되면 함께 사라짐
- 특정 컨테이너 내부 데이터를 저장하는 데 유용 (덮어쓰기 방지)
- 도커가 직접 관리하는 방식이 아니라 호스트 머신에 폴더를 생성함
- 자동 생성되며, 시간과 공간적으로 효율적
✅ 명명 볼륨 (Named Volumes)
- 특정 컨테이너에 종속되지 않음 (여러 컨테이너에서 공유 가능)
- 컨테이너가 종료되어도 데이터 유지됨
- 도커 파일에서 직접 생성할 수 없고, 명령어로 추가해야 함
docker volume create my_volume docker run -v my_volume:/app my_image
2) 바인드 마운트 (Bind Mounts)
호스트 머신의 특정 디렉토리를 컨테이너 내부로 직접 마운트하는 방식.
- 컨테이너 내부 파일을 직접 수정 가능
- 변경 사항이 즉시 적용되므로 리빌드할 필요 없음
- 주로 소스 코드나 설정 파일을 실시간으로 반영하는 데 사용
- 명령어로 절대경로를 지정해야 함
docker run -v /host/path:/container/path my_image
- 컨테이너 내부 파일이 덮어쓰기될 수 있어 주의가 필요
- 예외 처리를 위해 익명 볼륨 추가 가능
3) 읽기 전용 볼륨 (Read-Only Volumes)
컨테이너에서 볼륨의 데이터를 수정할 수 없도록 설정할 수 있다.
docker run -v my_volume:/app:ro my_image
- :ro 옵션을 추가하면 읽기 전용 모드로 설정됨
4) 기타 관련 기능
✅ 도커 Ignore로 COPY 제한
- .dockerignore 파일을 사용하여 특정 파일을 컨테이너에 복사하지 않도록 설정
- 예시:
node_modules/ .env
✅ 빌드 타임 인수 (Build Arguments)
- Dockerfile에서 ARG 키워드를 사용하여 빌드 시 값을 전달 가능
ARG PORT=8080
- 터미널에서 값 설정 가능
docker build --build-arg PORT=3000 -t my_image .
✅ 환경변수 (Environment Variables)
- Dockerfile 내부에서 ENV 키워드로 설정 가능
ENV PORT 80 EXPOSE $PORT
- 컨테이너 실행 시 -e 옵션을 사용해 설정 가능
docker run -e PORT=3000 my_image
- .env 파일을 활용해 환경변수를 관리 가능
- .env 파일 생성
PORT=3000
- 컨테이너 실행 시 적용
docker run --env-file ./.env my_image
- 컨테이너 실행 시 적용
- .env 파일 생성
🙄 느낀점
머리로는 이해하는데 손은 이해하지 못하는 것 같다. 좀더 사용해 봐야 감을 잡을듯??