카테고리 없음

Docker 컨테이너와 이미지: 개념과 차이점, 기본 명령어

jangkimo 2024. 10. 28. 14:31

Docker를 사용하다 보면 **컨테이너(Container)**와 **이미지(Image)**라는 두 가지 주요 개념을 자주 접하게 됩니다. 이 둘은 Docker에서 중요한 역할을 하며, 이를 이해하는 것은 Docker의 활용과 운영에 필수적입니다.


1. Docker 이미지(Image)

Docker 이미지는 어플리케이션과 그 실행 환경을 미리 정의해둔 불변의 템플릿 파일입니다. 소스 코드, 라이브러리, 의존성, 파일, 환경 설정 등이 포함되어 있으며, 이러한 이미지를 통해 동일한 실행 환경을 재현할 수 있습니다. 이미지는 단일 파일로 관리되며 여러 계층(layer)으로 구성됩니다.

  • 특징:
    • 불변성: 이미지는 수정되지 않으며, 변경하려면 새로운 이미지가 생성됩니다.
    • 계층 구조: 이미지의 각 계층은 파일 시스템에서 필요한 부분만 포함하며, 덕분에 효율적이고 빠르게 이미지를 배포하고 관리할 수 있습니다.

2. Docker 컨테이너(Container)

Docker 컨테이너는 이미지를 실행한 상태로, 실제 어플리케이션이 동작하는 격리된 환경입니다. 컨테이너는 이미지의 복사본으로 시작되며, 필요한 실행 파일, 환경 변수 등을 포함해 작동합니다. 여러 컨테이너가 동일한 이미지를 기반으로 생성될 수 있으며, 각 컨테이너는 독립적으로 작동하여 충돌을 피할 수 있습니다.

  • 특징:
    • 격리된 환경: 컨테이너는 독립된 네트워크, 파일 시스템, 프로세스를 갖고 다른 컨테이너와 영향을 주고받지 않습니다.
    • 변경 가능성: 컨테이너 내부에서 데이터를 생성하거나 변경할 수 있지만, 변경 사항은 컨테이너를 종료하거나 삭제하면 사라집니다.

Docker 이미지와 컨테이너의 차이점

개념 설명 비유
이미지 어플리케이션 실행에 필요한 모든 설정과 데이터를 포함한 템플릿 (정적) 설계도
컨테이너 이미지를 기반으로 실행되는 어플리케이션의 실행 환경 (동적) 건축물

 

차이점:

  • 이미지는 변하지 않는 파일 템플릿이며, 컨테이너는 이미지를 기반으로 생성된 실제 실행 환경입니다.
  • 이미지는 한 번 생성 후 여러 컨테이너에서 재사용될 수 있고, 컨테이너는 각기 다른 상태를 가질 수 있습니다.

둘 다 필요한 이유:

  • 이미지는 효율적 배포일관된 실행 환경 제공에 유리하고, 컨테이너는 격리된 환경에서 어플리케이션을 실행하여 운영 환경에서 안정성을 제공합니다. 이미지를 통해 컨테이너를 빠르게 생성할 수 있어 배포와 테스트도 쉽게 관리할 수 있습니다.

Docker 기본 명령어

 

  • 이미지 관련 명령어
    • docker images: 현재 로컬에 저장된 이미지 리스트를 표시합니다.
    • docker rmi <image_id>: 지정한 이미지를 삭제합니다.
  • 컨테이너 관련 명령어
    • docker ps: 실행 중인 컨테이너 목록을 표시합니다.
    • docker ps -a: 종료된 컨테이너를 포함한 전체 컨테이너 목록을 표시합니다.
    • docker run <image_name>: 지정한 이미지를 기반으로 컨테이너를 생성하고 실행합니다.
    • docker stop <container_id>: 실행 중인 컨테이너를 중지합니다.
    • docker rm <container_id>: 지정한 컨테이너를 삭제합니다.
    • docker run -it <image_name> /bin/bash: 컨테이너를 실행하고, 바로 내부로 접속하여 명령을 입력할 수 있습니다.

예시 명령어 사용법

# 로컬 이미지 목록 확인
docker images

# 실행 중인 컨테이너 목록 확인
docker ps

# 종료된 컨테이너를 포함한 전체 컨테이너 목록 확인
docker ps -a

# 컨테이너 중지
docker stop <container_id>

# 컨테이너 삭제
docker rm <container_id>

# 이미지 삭제
docker rmi <image_id>

# 이미지를 기반으로 새로운 컨테이너 실행
docker run <image_name>

# 컨테이너 내부에 접속
docker run -it <image_name> /bin/bash

 

이러한 명령어는 Docker에서 이미지를 다루고 컨테이너를 관리하는 데 필수적입니다. 컨테이너가 제공하는 격리된 환경에서 작업을 수행하고, 다양한 운영 환경에서 일관된 성능을 제공하는 Docker의 기능을 충분히 활용할 수 있습니다.


결론

Docker 이미지와 컨테이너는 각각 다른 역할을 하며, 이를 통해 효율적이고 안정적인 어플리케이션 개발 및 배포가 가능합니다. 다음 글에서는 Docker에서 이미지 생성 방법과 이미지 및 컨테이너 간의 관계를 더 자세히 탐구해 보겠습니다.