3. 도커 개념
1) 도커?

> ‘도커는 컨테이너(Container)가 아니다.'
- 도커는 컨테이너 기술을 지원하는 다양한 프로젝트 중 하나
- 컨테이너 기술은 도커가 탄생하기 한참 전부터 존재
- 오버레이 네트워크(Overlay Network)
- 유니온 파일 시스템(Union File System)
→ 이미 존재하고 있는 기술들을 정교하게 잘 조합하여 사용자 입장에서 사용하기 편리하게 제작됨
그리하여, 도커는 컨테이너 기술 분야의 업계 표준이 될 수 있었음
2) 도커 이미지

컨테이너라는 개념과 더불어 도커에서 가장 중요한 개념이 바로 ‘이미지(Image)’
이미지의 개념 사진이 아니라, 컨테이너 실행에 필요한 모든 파일과 설정 값 등을 포함한 것
→ 이미지는 상태값을 가지지 않고, 변하지 않는, 불변성의 법칙을 가짐
- 이미지의 특징
- 특정 프로세스(프로그램)을 실행하기 위한 모든 파일과 설정값 등을 지닌 것
- 더 이상의 의존성(dependent) 파일을 컴파일 하거나 설치할 필요가 없음
- ex) redis 이미지 = redis 실행에 필요한 모든 파일을 가지고 있음
- 이미지를 다운로드 받고(pull) 실행(run)하는 것 만으로 하나의 컨테이너를 실행할 수 있음
→ 즉 컨테이너는 ‘이미지를 실행한 상태’ 라고 볼 수 있다.
새로운 서버가 추가되면 준비를 하고 설치할 필요 없이 미리 만들어진 이미지를 다운로드 받고 컨테이너만 생성하면 되므로 서버 증설이 매우 용이하다.
“이러한 장점은 클라우드 환경에서 더욱 빛을 발함”
서버 사용량에 따라, 클라우드 환경에서 on-demand 로 서버를 증설하고, 컨테이너를 띄우면 → 새로운 사용자 받아들일 준비 완료
3) 레이어(Layer) 저장 방식
의문이 생길 수 있습니다. 실행에 관련 된 모든 파일을 포함하고 있다면 용량이 매우 클 것 같은데,
만약 기존 이미지에 파일 하나 더 추가했다고 다시 큰 용량을 다운로드 받아야 할까요?
그것은 비효율적이지 않을까요?
- 도커는 굉장히 영리한 저장방식을 사용함
- 레이어 저장 방식은 유니온 파일 시스템(Union File System)을 이용하여 여러개의 ‘Layer’ 를 하나의 파일 시스템으로 만드는 방식을 의미함

- 이미지 하나는 여러개의 immutable(불변성) layer 로 구
- 즉, 읽기 전용이므로 쓰기는 불가 → 이 레이어들은 절대로 변하지 않음
만약, 우분투(ubuntu)의 이미지가 A, B, C 레이어로 이뤄져 있고 이미 우분투 이미지를 저장해서 가지고 있다고 가정하는 상황입니다.
우분투 이미지가 이미 있는 상태에서 우분투 기반의 nginx 이미지를 도커 허브(Docker Hub)에서 가져온다면(pull) 어떻게 될까요?
A+B+C+nginx 레이어로 이루어진 이미지를 통째로 가져올까요? 그렇지 않습니다.
→ 이미 존재하는 A+B+C 레이어는 다운로드 받지않고 새로 필요한 nignx 레이어만 다운로드 받아 새로운 이미지를 구성함
- 예를 들어서, 웹 앱을 nginx 위에 올린 컨테이너를 실행하다가,
- 웹 앱 소스를 수정하게 된다면
- A+B+C+nginx 레이어를 제외하고 소스 레이어만 다운받으면 됨
- 효율적으로 이미지를 관리할 수 있음
- 추가적으로, 이미지를 공유할 때도 바뀐 레이어만 공유할 수 있는 장점을 가짐
- A 사용자가 nginx 이미지를 pull 받아 그 위에서 웹 앱 소스를 추가하여 새로운 이미지를 생성하여 도커허브에 공유했다고 가정
- B 사용자가 A 가 업로드한 이미지가 필요한 상태에서, 이미 nginx 이미지를 저장하고 있는 상황이라면 nginx 이미지는 다운로드 받지 않고 웹 앱 레이어만 다운로드 받으면 됨
- 이미지를 기반으로 컨테이너를 생성하게 되면 자동으로 R/W 레이어가 추가되어 생성됨 (Read/Write)
- 이미지 레이어(불변성을 가진)를 그대로 사용하면서, 컨테이너 실행 중 생성하는 파일이나 변경사항은 모두 R/W 레이어에 기록 됨
- 기존의 이미지 레이어는 절대로 변하거나 영향을 받지 않기 때문에 그래서 ‘상태값을 가지지 않고 변하지 않음’ 이라는 표현을 사용함 (Immutable)
→ 도커 이미지는 컨테이너 실행에 필요한 모든 파일과 설정 값 등을 포함한 것으로 상태값을 가지지 않고 변하지 않는다.
→ 도커는 굉장히 영리한 ‘Layer 저장 방식’ 을 사용한다. 이미지 하나는 여러 개의 불변성 레이어로 구성된다.