본문 바로가기
코딩 공부/web & Java

[Docker] Docker Container와 Docker Image

by 현장 2024. 1. 13.

Docker Container

출처:   https://phoenixnap.com/kb/docker-image-vs-container

사용자가 기본 시스템에서 애플리케이션을 분리할 수 있는 가상화된 런타임 환경입니다. 이러한 컨테이너는 응용프로그램을 빠르고 쉽게 시작할 수 있는 portable units 이다.

 

중요 기능은 컨테이너 내부에서 실행되는 컴퓨팅 환경의 표준화로 응용 프로그램이 동일한 환경에서 작동하도록 할 뿐 아니라 다른 사람과의 공유도 단순화합니다. 또한 컨테이너는 자율적이기 때문에 강력한 독립성을 제공하며 서로 방해하지 않기 때문에 격리되어 있는 효과를 얻을 수 있습니다.
 
또한 하드웨어 수준에서 가상화가 이루어지는 VM과 달리 컨테이너는 애플리케이션 계층에서 가상화됩니다. 하나의 머신을 활용하고 커널을 공유하며 분리된 프로세스를 실행하기 위한 운영 체제를 가상화할 수 있기 때문에 컨테이너가 매우 가벼워져 리소스를 많이 사용하지 않을 수 있습니다.

Docker Image

출처: https://phoenixnap.com/kb/docker-image-vs-container

 

Application을 포장 및 전송하기 위해 도커는 "docker image"를 사용합니다. Docker image는 파일로 어플리케이션 실행에 필요한 독립적인 환경을 포함하며, 런타임 환경을 위한 일종의 템플릿입니다.
 
도커 이미지는 소스 코드, 라이브러리, 종속성, 도구 및 응용 프로그램을 실행하는데 필요한 기타 파일을 포함하는 변경 불가한 파일입니다. 이미지는 읽기 전용이므로 스냅샷이라고도 하며, 특정 시점의 애플리케이션과 가상 환경을 나타내게 됩니다. 이러한 일관성은 도커의 큰 특징 중 하나로 개발자가 안정적이고 균일한 조건에서 소프트웨어를 테스트하고 실험할 수 있도록 합니다.
 
이미지는 템플릿일 뿐이므로 시작하거나 실행할 수 없습니다. 컨테이너는 실행 중인 이미지일 뿐이기 때문입니다. 컨테이너를 생성하면 쓰기 가능한 레이어가 immutable image(불변 이미지) 위에 추가되어서 컨테이너는 수정이 가능합니다.
 
컨테이너를 생성하는 이미지 베이스는 별도로 존재하며 변경할 수 없습니다. 컨테이너 환경을 실행할 때는 기본적으로 컨테이너 내부에 해당 파일 시스템(도커 이미지)의 읽기-쓰기 복사본을 만듭니다. 이렇게 하면 이미지 전체 복사본을 수정할 수 있는 컨테이너 레이어가 추가됩니다.

출처:  https://ragin.medium.com/docker-what-it-is-how-images-are-structured-docker-vs-vm-and-some-tips-part-1-d9686303590f

하나의 베이스 이미지에서 도커 이미지를 무제한으로 생성할 수 있습니다. 이미지의 초기 상태를 변경하고 기존 상태를 저장할 때마다 추가 레이어가 있는 새 템플릿을 만들게 됩니다. 따라서 도커 이미지는 여러 개의 레이어로 구성될 수 있으며, 각각은 다르지만 이전 레이어에서 비롯됩니다. 이미지 계층은 컨테이너 계층을 사용하여 가상 환경을 시작할 때 추가된 읽기 전용 파일을 나타냅니다.

📖 Reference

내가 보기 위한 기록

'코딩 공부 > web & Java' 카테고리의 다른 글

[Java] 함수형 인터페이스(Functional Interface)  (1) 2024.01.21
[Java] Stream  (0) 2024.01.20
[Spring] Gradle  (0) 2024.01.07
[Spring] AOP  (1) 2024.01.05
[Java] 테스트 더블(Test Double) (feat. Mock, Stub)  (1) 2023.12.16