이 글은 [2024 NEW] 개발자를 위한 쉬운 도커 강의를 듣고 작성한 글입니다! 모든 강의자료 이미지 출처는 해당 강사님께 있습니다.
빌드 컨텍스트
빌드 컨텍스트는 이미지를 빌드할 때 사용되는 폴더이다. 도커 데몬이 임시 컨테이너를 실행시키며 레이어들을 하나씩 추가한다. 도커 데몬에게 Dockerfile과 빌드에 사용되는 파일을 전달해 주어야 한다. 도커 데몬에게 전달해주는 폴더가 빌드 컨텍스트이다. COPY 지시어를 사용하면 빌드 컨텍스트에 있는 파일이 빌드에 사용되는 컨테이너로 복사된다. 도커 데몬은 빌드 컨텍스트에 있는 파일만 COPY 명령으로 복사할 수 있다. .이 빌드 컨텍스트를 지정한 것이다. .은 명령어를 실행하는 현재 디렉토리 경로를 의미한다. 빌드 컨텍스트는 도커 데몬이 이미지를 빌드할 때 전달되는 폴더이고 폴더 안에 도커 파일과 카피에 사용할 파일들이 모두 들어 있어야 한다. 빌드 컨텍스트의 .dockerignore 를 이용하여 빌드 컨텍스트로 전달하지 않을 파일들을 지정할 수 있다.
Dockerfile을 별도의 폴더에서 관리하는 것은 중요하다. 도커 파일이 C 드라이브의 최상단에 있다면, Dockerfile이 포함된 C 드라이브 전체가 빌드 컨텍스트가 되어버린다. 빌드 컨텍스트는 도커 데몬에게 전달되어야 하기 때문에 크기가 커질수록 전송 시간이 길어지고 폴더의 크기가 커지면 빌드에 문제가 발생할 수 있다. Dockerfile과 빌드에 사용되는 파일을 별도의 폴더 관리해야 한다.
.dockerignore 실습
프로젝트 경로로 이동한다.
cd easy-docker/build/02.buildcontext
해당 폴더에는 총 3개의 파일이 있다.
1. largeJunk.txt 에는 This is a large file 라고 적혀있는데, 이 파일의 용량이 엄청 크고 빌드에 사용되지 않는 파일이라고 생각해보자. 그렇다면 .dockerignore에 이 파일이 포함되어야 한다.
2. .dockerignore 에 largeJunk.txt 를 작성한다.
3. Dockerfile에는 다음과 같이 작성되어 있다.
FROM nginx:1.23
COPY largeJunk.txt /usr/share/nginx/html/index.html
CMD ["nginx", "-g", "daemon off;"]
COPY 지시어를 보면, 빌드 컨텍스트 안에 있는 largeJunk.txt를 nginx 내부의 index.html 파일로 복사한다는 뜻이다.
하지만 largeJunk.txt는 빌드 컨텍스트에 포함되지 않는다. 그래서 빌드를 하게 되면 오류가 발생하는 것이 정상이다.
빌드 컨텍스트 테스트 이미지를 빌드한다. buildcontext가 이미지명이고, ignorejunk는 태그명이다.
docker build -t buildcontext:ignorejunk .
에러 문구를 보면, largeJunk.txt 파일을 찾을 수 없어서 에러가 발생함을 알 수 있다.
.dockerignore 에서 largeJunk.txt 를 없애고 다시 빌드를 진행하면, 정상적으로 이미지가 빌드되는 것을 볼 수 있다. buildcontext:ignorejunk 라는 태그가 지정된 이미지가 생성된다.
'Docker' 카테고리의 다른 글
멀티 스테이지 빌드 (0) | 2024.02.27 |
---|---|
Dockerfile 지시어 (1) | 2024.02.27 |
이미지 커밋과 빌드 (0) | 2024.02.20 |
이미지와 레이어 (0) | 2024.02.19 |
이미지 레지스트리 (0) | 2024.02.19 |