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에서 이미지 생성 방법과 이미지 및 컨테이너 간의 관계를 더 자세히 탐구해 보겠습니다.