본문 바로가기
DevOps/Docker

[Docker] docker 이미지(image), 레이어(layer), 컨테이너(container)

by 스파이디웹 2021. 8. 23.
728x90

이번 포스트에는 docker의 이미지, 레이어, 컨테이너 개념을 알아보고  정리해보겠습니다.

 

1. 이미지(image)

-도커에서 서비스 운영에 필요한 서버 프로그램, 소스코드 및 라이브러리, 컴파일된 실행 파일을 묶는 형태

이미지 특징

  1. 특정 프로세스를 실행하기 위한(컨테이너 생성(실행)에 필요한) 모든 파일과 설정값(환경)을 지닌 것
  2. ex) Ubuntu 이미지- ubuntu를 실행하기 위한 모든 파일을 가지고 있다.
  3. ex) Oracle 이미지- oracle을 실행하는데 필요한 파일과 실행명령어, port정보 등을 모두 가지고 있다.
  4. 이외에도 많은 이미지들이 있고, git hub와 유사한 docker hub 에서 찾고 버전관리 및 배포(push&pull)이 가능하다.
  5. 도커 이미지의 용량은 보통 수백 MB~ 수 GB다.
  6. 이미지는 상태 값을 가지지 않고 변하지 않는다(immutable) (도커 컨테이너의 스냅샷의 개념과도 비슷하다)
  7. 하나의 이미지는 여러 컨테이너를 생성할 수 있고, 컨테이너가 삭제되더라도 이미지는 변하지 않고 그대로 남아 있다.
  8. 다양한 API가 제공되어 원하는 만큼 자동화가 가능하다.
  9. dockerfile이라는 파일로 이미지를 만든다. dockerfile에는 소스와 함께 의존성 패키지 등 사용했던 설정 파일을 버전 관리하기 쉽도록 명시되어진다.

2. 레이어(layer)

-기존 이미지에 추가적인 파일이 필요할 때 다시 다운로드 받는 방법이 아닌 해당 파일을 추가하기 위한 개념

 

  • 이미지는 여러 개의 읽기 전용(read only) layer로 구성되고, 파일이 추가되면 새로운 layer가 생성된다.
  • 도커는 여러 개의 layer를 묶어서 하나의 파일시스템으로 사용 할 수 있게 해준다. 그래서 이미지와 레이어는 같은 의미로도 사용
  • Dockerhub 및 개인 저장소에서 이미지를 공유할 때는 바뀐 부분(layer=image)만 주고받기 가능한데 이것이 version 관리하는 원리이다.

3. 컨테이너(container)

-이미지의 인스턴스, 이미지를 실행한 상태, 응용프로그램의 종속성과 함께 응용프로그램 자체를 패키징 or 캡슐화하여 격리된 공간에서 프로세스를 동작시키는 기술

 

  1. 컨테이너는 이미지 layer에 읽기/쓰기(read-write) Layer를 추가하는 것으로 생성/실행된다.
  2. 여러 개의 컨테이너를 생성해도 최소한의 용량만 사용, 바뀐 부분을 읽기/쓰기 layer에 적음
  3. 컨테이너는 종료되어도 메모리에서 삭제되지 않고 남아있다. 삭제하려면 명시적으로 삭제해주어야 삭제가된다.
  4. 컨테이너를 삭제 하게 되면 컨테이너에서 생성한 파일이 사라지게된다.
  5. 한 서버는 여러 개의 컨테이너를 가져도 상관없다.
  6. 컨테이너는 독립적으로 실행된다.
  7. 컨테이너는 커널 공간과 호스트 OS자원(시스템 콜)을 공유한다.

참조:

https://hoon93.tistory.com/48

 

 

728x90

댓글