이미지 빌드를 시작하면 도커는 가장 먼저 빌드 컨텍스트를 읽는다. 빌드 컨텍스트는 이미지를 생성하는데 필요한 각종 파일, 소스코드, 메타데이터 등을 담고 있는 데릭터리를 의미한다. Dockerfile가 위치한 디렉터리가 빌드 컨텍스트가 되는 것이다.
빌드 컨텍스트는 Dockerfile에서 빌드 될 이미지에 파일을 추가할 때 사용이 된다. Dockerfile에서 이미지 파일을 추가하는 방법은 ADD, COPY가 있다. 이 명령어들은 빌드 컨텍스트의 파일을 이미지에 추가하게 된다.
컨텍스트에 대한 정보는 이미지를 빌드할 때 맨 위에 출력이 된다. 컨텍스트는 build 명령어의 맨 마지막에 지정된 위치에 있는 파일을 전부 포함한다. Git과 같은 외부 URL에서 Dockerfile을 읽어 들인다면 해당 Repository에 있는 파일과 서브 모듈을 포함하기 때문에 Dockerfile이 위치한 곳에는 이미지 빌드에 필요한 파일만 있는 게 좋다.
컨텍스트는 파일 외에도 하위 디렉터리도 전부 포함하기 때문에 불필요한 파일이 포함되면 빌드 속도가 느려지고 호스트의 메모리를 지나치게 점유할 수도 있다.
이것을 방지하기 위해 .dockerignore라는 파일을 작성하면 이 파일에 명시된 이름의 파일을 컨텍스트에서 제외한다. 이것은 마치 git의 .gitignore와 같은 기능을 수행한다.
.dockerignore 파일은 컨텍스트의 최상위 경로인 Dockerfile이 위치한 경로와 같은 곳에 있어야 한다.
vi .dockerignore
test2.html
*.html
*/*.html
test.htm?
.dockerignore 예시 파일이다.
컨텍스트에서 제외할 파일의 경로는 Dockerfile이 존재하는 경로를 기준으로 한다. 마지막에 test.htm?은 test.htm을 접두어로 ?자리에 임의의 1자리 문자가 들어가는 파일을 제외하는 것으로 html 뿐만아니라 htma, htmb 등이 컨텍스트에서 제외된다.
*.html
!test*.html
만약, 제외 목록 중 특수 파일만 포함하고 싶을 때 ! 를 사용하면 된다. !는 특정 파일을 제외하지 않음을 뜻한다. 위 코드는 html파일은 모두 제외하지만 test.html 파일은 컨텍스트에서 제외하지 않게 된다.
📖 ← [ 시작하세요! 도커/쿠버네티스 ] 책을 참고하여 공부하였습니다.
'DevOps > Docker' 카테고리의 다른 글
[Docker] : 캐시를 이용한 이미지 빌드 (0) | 2022.02.24 |
---|---|
[Docker] : Dockerfile을 이용한 컨테이너 생성과 커밋 (0) | 2022.02.24 |
[Docker] : 도커 이미지 생성 (0) | 2022.02.24 |
[Docker] : Dockerfile 작성하기 (0) | 2022.02.24 |
[Docker] : 도커 이미지 생성하기 (0) | 2022.02.24 |
댓글