이미지 빌드 · 빌드 컨텍스트와 재현성 · 퀴즈
퀴즈: 빌드 컨텍스트와 재현성
문항 6개. 정답과 해설은 풀어 본 뒤에 보여 드립니다.
`docker build .` 의 마지막 `.` 은 무엇을 가리키는가?
- 빌더에게 전송할 빌드 컨텍스트 디렉터리
- Dockerfile 이 있는 파일 경로
- 결과 이미지를 저장할 위치
- 캐시 디렉터리
Dockerfile 을 고치지 않았는데 `COPY . .` 캐시가 자주 깨지는 흔한 원인은?
- `.git` 등 자주 변하는 파일이 컨텍스트에 포함돼 있어서
- 도커 데몬 재시작
- 베이스 이미지가 매번 바뀌어서
- 레이어 수가 너무 많아서
`.dockerignore` 와 `.gitignore` 의 관계로 옳은 것은?
- 같은 파일이며 하나만 있으면 된다
- `.dockerignore` 가 `.gitignore` 를 자동으로 상속한다
- 목적이 달라 내용이 다를 수 있다 — 예로 `.git` 은 `.dockerignore` 에만 넣는다
- `.dockerignore` 는 빌드 결과 이미지에서 파일을 지운다
`FROM python:3.12` 대신 `FROM python:3.12.7-slim` 을 권하는 이유는?
- 이미지 이름이 짧아 읽기 쉬워서
- slim 이미지가 언제나 더 빠르게 돌아서
- 떠다니는 태그는 시점에 따라 다른 이미지를 가리켜 빌드가 재현되지 않아서
- 레이어 캐시를 더 많이 재사용할 수 있어서
빌드 시점의 토큰을 `ARG` 로 넘기면 안 되는 이유는?
- `docker history` 등에 값이 남아 이미지를 가진 사람이 볼 수 있어서
- ARG 가 문자열만 받아 토큰 형식이 제한되기 때문에
- 인자가 늘어 빌드 속도가 느려져서
- ARG 마다 레이어가 하나씩 늘어나서
이미지에 `.env` 가 들어간 것을 발견했다. 뒤에 `RUN rm .env` 를 추가하면?
- 안전해진다 — 파일이 사라진다
- 앞 레이어에 원본이 남아 있어 여전히 추출할 수 있다
- 빌드가 실패한다
- 이미지 크기가 줄어든다