TIL(Today I Learned)
9월 13일(수)
공부한 내용을 제 언어로 빠르게 정리한 내용이라서 잘못된 내용이 있을 수 있습니다.
Docker
COPY vs Volume
- 장고 서버를 구동시키는 도커 컨테이너를 만들고 싶은데, 장고 프로젝트 전체를 COPY 해야하는지 의문이 생겨서 찾아보았다.
- COPY는 이미지 빌드시 필요한 파일들을 복사할때 사용
- requirements.txt 처럼 파이썬 구동 환경에 필요한 의존성 목록
- 장고가 구동하기 전에 설치되어야하는 django-cors-headers, channels 등을 설치하기 위해서 requirements.txt는 COPY 되어야한다.
- Volume은 호스트와 컨테이너 간의 데이터 공유나, 데이터 저장을 위해서 사용
- 장고 프로젝트를 Volume 설정 해놓으면, 코드가 수정될때 이미지를 다시 빌드할 필요 없이 바로 반영 되므로 디버깅시 용이. (COPY로 장고 프로젝트를 복사하면 코드 수정을 반영하려면 매번 이미지를 재빌드해야함)
- 데이터베이스, 설정 파일 등을 런타임에 호스트에 저장하기 위해서 사용하기도 한다고 한다.
Context 설정
- 기본 build context는 현재 Dockerfile 위치를 기준으로 함
- build context 상위 경로는 접근할 수 없게 정해져 있다.
- build context를 -f 옵션을 통해 수동으로 설정해줌으로써 Dockerfile 상위 경로에 있는 파일을 COPY 등을 할 수 있다.
docker build -f /경로/ -t 이미지_이름 /빌드_컨텍스트_경로
참고 및 예시 출처
- Chat GPT
Q: 볼륨을 지정해도 COPY를 해주어야 하는거 아니야?
A:
예, 볼륨을 설정하더라도 Dockerfile 내에서 파일을 복사하는 경우 COPY 명령을 사용해야 합니다. 볼륨은 컨테이너와 호스트 간 데이터 공유 또는 데이터 영구 저장을 위한 것이고, 파일 복사(COPY)는 이미지를 빌드할 때 컨테이너 내부에 파일을 포함시키기 위한 것입니다. 이 두 가지는 서로 다른 목적을 가지고 있으며 독립적으로 작동합니다.
볼륨의 주요 용도:
데이터 공유: 볼륨을 사용하여 여러 컨테이너 간에 데이터를 공유할 수 있습니다. 예를 들어, 여러 웹 서버 컨테이너가 로그 파일을 하나의 볼륨에 기록하고 읽을 수 있습니다.
영구 데이터 저장: 볼륨을 사용하여 컨테이너가 종료되거나 삭제되더라도 데이터를 영구적으로 보존할 수 있습니다. 데이터베이스 파일이나 설정 파일과 같은 중요한 데이터를 보관하는 데 사용할 수 있습니다.
파일 복사(COPY)의 주요 용도:
이미지 빌드: Docker 이미지를 빌드할 때 파일을 이미지 내부로 복사하여 실행 중인 컨테이너에 포함시킵니다. 이를 통해 컨테이너가 필요한 모든 파일과 설정을 가지게 됩니다.
따라서 Dockerfile 내에서 파일을 복사하려면 COPY 명령을 사용해야 하고, 볼륨은 실행 중인 컨테이너와 호스트 간에 데이터를 공유하거나 영구적으로 저장하기 위해 사용됩니다. 이 두 가지 개념은 서로 다른 목적을 가지고 있으며 별개로 작동합니다.