Docker는 '내 프로그램을 어디서든 똑같이 실행시키기 위한 기술'이라고 이해할 수 있다.
개발을 하다 보면 환경 차이로 인해 프로그램이 동작하지 않는 경우가 잦다. Docker는 프로그램과 실행 환경을 하나로 묶어서 패키징하여 어떤 서버로 가져가든 동일한 환경에서 실행할 수 있도록 한다. 비유하자면 '실행 가능한 프로그램 박스'를 만들어서 어디든 배송하는 것이라고 할 수 있다.
Docker를 이해하려면 Image 와 Container 를 알아야 한다.
Image란 애플리케이션 실행에 필요한 모든 것을 담고 있는 템플릿이다. 예를 들어 Node.js 서버를 Docker 이미지로 만들었다고 가정해본다면 이미지 안에는 다음과 같은 것들이 들어있다.
Ubuntu
Node.js 20
프로젝트 소스코드
npm 패키지
환경설정
실행명령
즉, Image = 실행 설명서 + 파일 묶음 이라고 할 수 있으며 설치 파일 자체는 실행중이 아닌 상태인 것이다. Image를 토대로 Container는 Image를 실제로 실행한 결과물이다.
| 구분 | Image | Container |
|---|---|---|
| 상태 | 정적(파일) | 동적(실행 중) |
| 역할 | 실행 템플릿 | 실행된 프로그램 |
| 수정 가능 여부 | 불가능(읽기전용) | 가능 |
| 생성 | 기준이 됨 | 여러 개 생성 가능 |
| 예시 | 설치 파일 | 실행 중인 앱 |
정리하면 Docker는 애플리케이션과 실행 환경을 함께 패키징하여 어디서나 동일하게 실행할 수 있게 해주는 플랫폼이고, Image는 실행 템플릿이며 Container는 그 이미지를 실제로 실행한 인스턴스이다.