Q&A

책을 따라하다가 막히는 부분이 있나요?
질문을 남겨주세요.

도커 이미지 빌드 기준에 대한 질문입니다.

3 years, 1 month ago

alive alive

안녕하세요.

후반 도커가 등장한 이후부터 여러번 도커 이미지가 빌드 되는 걸 보고, 도커 이미지를 빌드하는 기준이 뭔지 궁금증이 생겼습니다. 관찰결과를 토대로 제가 생각한 기준이 맞는지 여쭤보고 싶습니다.


<관찰 결과>

1. 도커 컴포즈 파일(docker-compose.yml)이 변경된 경우

2. 도커파일(Dockerfile)이 변경된 경우 : 도커 파일이 도커 컴포즈 파일에 의해 빌드되므로 결국 1번과 같은 이유

3. 외부 라이브러리가 추가된 경우 : requirements.txt에 추가되는 라이브러리가 생기므로 결국 requirements.txt를 참조하는 도커파일이 간접적으로 변경된 것. 1번과 같은 이유

4.  프로젝트 파일에 새로운 파일 또는 폴더가 생성된 경우 : 도커 파일에서 새로 생성된 copy해와야 하므로 다시 빌드해야 함.


Q1. 관찰한 내용으로 추론해보면, 도커 컴포즈파일에 관련된 사항이 변경된 경우 도커 이미지를 새로 빌드하는 게 맞나요?

Q2. 그렇다면 프로젝트 안에서 특정 소스 코드를 고쳤을 때, 도커 컴포즈 파일과 관련이 없는 경우는 어떤 경우가 있는지 알 수 있을까요?



taegon
taegon   3 years, 1 month ago

도커 이미지를 다시 빌드해야 하는 경우는 이미지 내부의 파일이 변경되었을 때 필요합니다. 관찰하신 상황이 대부분 맞습니다. 도커 컴포즈 파일이나, 도커 파일은 도커 컨테이너에 들어가야 할 파일이나, 적층할 이미지 등을 변경하는 정보이므로, 이들 정보가 갱신되면, 이미지를 다시 빌드해야 합니다.

하지만, 도커 컴포즈 파일을 살펴보시면, 볼륨을 현재 폴더에 마운트 시키는 경우가 있습니다. 예를 들어, 우리가 작성한 장고 코드가 대표적인 예인데요. 이 경우에는 도커는 장고 구동에 필요한 모든 설정을 준비한 후, 실제 소스 코드는 도커 컨테이너 바깥에 있는 현재 우리가 작업하고 있는 소스코드를 참조하고 있습니다. 이렇게 되면, 도커 이미지를 다시 빌드하지 않더라도, 변경된 장고 소스코드를 이용할 수 있습니다. 컨테이너 안에 마치 포탈이 있어서, 컨테이너가 닫혀 있더라도, 자유롭게 드나들 수 있는 것과 유사합니다.

도커 컨테이너를 쓰는 이유는 한번 빌드된 이미지는 어느 곳에서나 동일하기 때문에, 복제, 확장이 용이하다는 장점이 있고, 유연성이 부족하다는 단점이 있겠지요. 질문 주신 상황처럼, 컨테이너 내부가 계속 바뀌게 되면, 그때마다 컨테이너를 열고, 내부를 수정해야 하니까요. 그래서 이럴 때는 마운트를 이용해서 내부로 접근가능한 포탈을 만들어두는 것입니다. 반대로 포탈이 너무 많으면, 컨테이너가 갖는 장점. 이미지가 있으면, 언제 어디서나 동일하게 동작한다는 장점이 훼손되기 때문에 이 둘 사이의 균형이 필요합니다.

도움이 되셨길 바랍니다.

고맙습니다.

Updated: Oct. 15, 2021, 1:56 a.m.

Leave a Comment:
목록보기
Search
  • 자유게시판
  • Q&A