Application 및 구동에 필요한 모든 것을 Packaging 할 수 있는 Tool
Application, System tools, Dependencies, 환경설정 등을 하나로 묶어서
다른 서버 및 PC에 쉽게 배포하고 구동할 수 있도록 도와주는 Tool.

Image 를 구성하기 위한 파일들
Application 구동에 필요한 모든 것들
Image를 올려서 실행하는 환경
객체지향 프로그래밍으로 생각하면, Image 가 class이고 (template) 이에 대한 인스턴스가 container라고 생각할 수 있다.
container에서 동작하는 application은 개별적으로 수정이 가능하지만, image에는 영향을 미치지 않는다.
1) local에서 dockerfile을 빌드해서 image를 만든다.
2) github에 push하듯이 Container Registry란 곳에 image를 push 한다
dockerhub GitHub Packages Google Cloud aws Microsoft AzureDocker reference : https://docs.docker.com/engine/reference/builder/
VSCODE를 활용할 시에는 docker extension을 설치 시 dockerfile을 만들 때 문법 오류 등을 잡아주니 설치하도록 하자.
이미지 배포 시에는 dockerHub 이용
Dockerfile Best practice 예제 : https://docs.docker.com/develop/develop-images/dockerfile_best-practices/
FROM [baseImage] 로 base image 갖고 오기
dockerfile 실행 시 layer 시스템으로 구성되기 때문에, 빈번히 변경되는 파일일 수록 제일 마지막에 작성해주는게 좋음.
=> 이미지가 변경될 때 기존 이미지를 layer별로 캐싱하고 있고 아랫쪽에 작성될 수록 상위 layer에 위치하게 됨.