임대일

4.4 도커(Docker) 이미지 빌드: 빌드 컨텍스트(Build Context) 본문

도커/개발자를 위한 쉬운 도커

4.4 도커(Docker) 이미지 빌드: 빌드 컨텍스트(Build Context)

limdae94 2024. 6. 29. 18:32
 

개발자를 위한 쉬운 도커 강의 | 데브위키 - 인프런

데브위키 | 현업 개발자가 도커를 사용한 경험을 녹여낸 새로운 커리큘럼으로 기존 교재 및 강의와 차별된 강의를 제공합니다. 단순한 명령어 사용법이 아닌 도커를 왜 사용해야하는지 대한 근

www.inflearn.com

 

1. 컨텍스트

빌드 컨텍스트는 이미지를 빌드할 때 사용되는 폴더이다. 이미지 빌드 방식은 도커 데몬이 임시 컨테이너를 실행시키면서 레이어드를 한 개씩 추가한다. 그래서 도커 데몬에게 도커 파일과 빌드에 사용되는 파일을 전달해야 한다. 도커 데몬에게 전달해 주는 폴더가 바로 빌드 컨텍스트이다.

빌드 컨텍스트 수행 과

 

이전 빌드 실습에서 인덱스와 도커 파일을 작성했었던 buildnginx 폴더가 바로 빌드 컨텍스트이다. docker build 명령을 사용하면 빌드 컨텍스트가 도커 데몬에게 모두 전달된다. 그래서 해당 컨텍스트 안에 있는 도커 파일로 도커 데몬이 이미지를 빌드하는 것이다. 그리고 도커 파일에서 카피 지시어를 사용하면 빌드 컨텍스트에 있는 파일이 빌드에 사용되는 컨테이너로 복사되는 것이다. 그리고 도커 데몬은 빌드 컨텍스트에 존재하는 파일만 카피 명령으로 복사할 수 있다.

 

docker build -t my-image-name .

.dockerignore 라는 파일로 빌드 컨텍스트에 전달하지 않을 파일을 지정할 수 있다. 예를 들어 빌드 컨텍스트 파일인 buildnginx 파일 안에 용량이 매우 큰 largeJunk(3GB) 파일을 도커 데몬에게 전달하지 않으려면 .dockerignore 파일 안에 largeJunk 파일명을 작성하면 해당 파일을 제외하고 도커 데몬에게 전달 빌드 컨텍스트 파일이 전달된다. 도커 파일과 빌드에 사용되는 파일만 별도의 파일로 관리해야 한다.

 

FROM nginx:1.23

COPY largeJunk.txt /usr/share/nginx/html/index.html

CMD [ "nginx", "-g", "deamon off;" ]

02.buildcontext 파일 안에 Dockerfile을 생성하고 위와 같이 작성한다. 이전에 학습한 01.buildnginx 폴더 안에 Dockerfile 의 COPY 지시어를 largeJunk.txt로 변경하면 된다. largeJunk.txt 파일을 매우 큰 파일이라고 가정하고 실습을 진행하는 것이다.

 

.dockerignore 파일 작성하기
docker build -t buildcontext:ignorejunk 명령 에러는 예상한 에러이다.

docker build -t buildcontext:ignorejunk . # 빌드컨텍스트 테스트 이미지 빌드

위에서 발생한 에러는 정상적이다. 빌드 컨텍스트에 존재하지 않기 때문에 COPY 지시어에서 에러가 발생하는 것이다. 왜냐하면 dockerignore 안에 largeJun.txt 파일이 작성되어 있기 때문이다. 이제 dockerignore 파일 안에 내용을 지우고 다시 빌드를 수행해보자.

 

.dockerignore 내용 지우기
빌드 컨텍스트 성공적인 수행

docker build -t buildcontext:ignorejunk . # 빌드컨텍스트 테스트 이미지 빌드

더이상 에러가 발생하지 않고 정상적으로 테스트 이미지 빌드가 수행되는 것을 확인할 수 있다. 불필요한 파일 혹은 크기가 큰 파일은 도커 데몬에게 전달하지 않도록 .dockerignore 안에 작성하여 필요한 파일들만 전달할 수 있도록 관리하자.