Dockerfile 은 도커 이미지 생성용 배치파일이다.
이미지를 구성하기 위해 필요한 명령어들이 도메인 명세DSL (Domain Specific Languag) 형식으로 작성된 파일을 말함.
즉, Dockerfile 은 특정한 이미지를 출발점으로 새로운 이미지 구성에 필요한 필수적인 요소 및 명령어, 환경변수등을 저장해 두고 이를 기반으로 언제 어디서든지 실행할 수 있는 파일 이다.
Dockerfile 통해 배치화 해두면, Dockerfile 이라는 작은 파일 하나로 자주 쓰이는 애플리케이션 배포 환경을 구축 할 수 있다는 장점이 있다.
Dockerfile 은 단순히 애플리케이션 설치를 스크립트로 만들어 배치화 하는게 아니라,
배포 환경 구축까지 한꺼번에 해주는 역할을 한다.
dockerfile이라는 이미지 빌드용 DSL domain specific language 파일을 사용한다.
단순 텍스트 파일로 일반적으로 소스와 함께 관리된다.
결론적으로 도커 빌드는
임시 컨테이너 생성
>명령어 수행
>이미지로 저장
>임시 컨테이너 삭제
>새로 만든 이미지 기반 임시 컨테이너 생성
>명령어 수행
>이미지로 저장
>임시 컨테이너 삭제
>- …
의 과정을 계속해서 반복한다고 볼 수 있다
명령어를 실행할 때마다 이미지 레이어를 저장하고 다시 빌드할 때 Dockerfile이 변경되지 않았다면 기존에 저장된 이미지를 그대로 캐시처럼 사용한다.
이러한 레이어 개념을 잘 이해하고 있어야 최적화된 이미지를 생성할 수 있다.
도커는 빌드할 때 Dockerfile의 명령어가 수정되었거나 추가하는 파일이 변경 되었을 때
캐시가 깨지고 그 이후 작업은 새로 이미지를 만들게 된다.
이미지가 만들어지는 과정
새로운 이미지를 작성하는 가장 효율적인 방법은 도커파일과 docker build 명령을 이용하는것.
docker build 명령을 실행하려면 도커파일과 빌드 컨텍스트(build context)가 존재 해야 함.
빌드 컨텍스트는 도커 파일 안의 명시된 dockerfile 설정을 참조, 일련의 로컬 파일들과 디렉토리 들 그리고 옵션들을 말한다.
빌드 컨텍스트를 만들고 build 과정의 일부로 도커 데몬에게 전달됨.(캐시)