Docker를 효과적으로 사용하려면 Docker 이미지와 컨테이너의 차이를 이해하는 것이 중요합니다. Docker Image와 Container의 차이점은 다음과 같습니다.

Docker Image

  1. Immutable Artifact(아티팩트 불변성): Docker images는 기본적으로 애플리케이션을 실행하는 데 필요한 실행 가능한 코드, 라이브러리, 구성 및 런타임 환경 변수를 포함하는 정적이고 변하지 않는 파일입니다. 이미지가 생성되면 변경할 수 없습니다.
  2. Blueprint(설계도): Docker images는 컨테이너 내부 환경을 생성하는 데 대한 설계도라고 생각하면 됩니다. 컨테이너 내부 환경에 포함될 내용을 정의합니다.
  3. Version Control(버전 관리): Docker images는 버전 관리가 가능하므로 기능을 쉽게 롤백하거나 업데이트할 수 있습니다. 동일한 이미지의 여러 버전을 가질 수 있습니다.
  4. Reusable(재사용성): Docker images는 여러 컨테이너와 시스템에서 재사용할 수 있습니다. Docker Hub와 같은 레지스트리에 공개적으로 공유하거나 비공개로 유지할 수도 있습니다.이미지는 여러 컨테이너와 시스템에서 재사용할 수 있습니다. Docker Hub와 같은 레지스트리에 공개적으로 공유하거나 비공개로 유지할 수도 있습니다.
  5. Layered Architecture(계층 구조): Docker images는 계층 구조로 구축됩니다. 각 계층은 Dockerfile의 파일 변경 사항 또는 명령어 집합에 해당합니다. 계층은 캐싱되므로 이미지를 다시 작성하는 것은 처음 작성하는 것보다 훨씬 빠른 경우가 많습니다.
  6. Portability(이식성): Docker images는 컨테이너화된 애플리케이션을 실행하는 데 필요한 모든 세부 사항을 캡슐화하므로 다양한 컴퓨터와 환경에서 쉽게 공유하고 배포할 수 있습니다.

Docker Container

  1. Running Instance(실행 인스턴스): A container는 Docker 이미지의 실행 인스턴스입니다. 동일한 이미지에서 실행되는 여러 컨테이너를 가질 수 있습니다.
  2. Isolation(격리성): 각 container는 호스트 시스템 및 다른 컨테이너와 격리됩니다. 자체 파일 시스템, 자체 네트워킹 및 자체 격리된 프로세스 공간이 있습니다.
  3. Mutable(가변성): Container는 중지, 시작 및 삭제할 수 있습니다. 컨테이너가 제거되면 실행 중인 컨테이너의 파일 시스템 또는 데이터에 대한 모든 변경 사항이 손실됩니다. 이러한 변경 사항이 이미지에 다시 커밋되지 않는 한 말입니다.
  4. Resource Allocation(리소스 할당): Containers는 호스트 시스템의 OS 커널을 공유하지만 특정량의 CPU, 메모리, 디스크 및 네트워크 I/O를 사용하도록 제한할 수 있습니다.
  5. Ephemeral(일시성): Containers는 일반적으로 일시적인 것으로 간주됩니다. 즉, 컨테이너는 중지하고 제거할 수 있고, 새로운 컨테이너를 빠르게 빌드하여 배치할 수 있습니다. 이상적으로는 최소한의 설정 및 구성으로 이 작업을 수행합니다.
  6. Configuration & Storage(구성 및 스토리지): Containers는 동적으로 구성할 수 있으므로 환경 변수를 설정하고, 스토리지 볼륨을 마운트하고, 다양한 네트워킹 구성으로 컨테이너를 연결할 수 있습니다.

Summary