도커(Docker) 를 사용하는 이유?
회사에 입사하면 매번 고역인 것이 소프트웨어의 설치이다. 또한 OS에 따라서 각기 환경설정 또한 다르다.
이러한 불편들은 도커를 사용하면 해결된다. 도커의 이미지와 컨테이너를 통해 사용자는 공통된 환경을 제공 받을 수 있다. 또한 효율적이며 안정적인 배포가 가능하게 된다.
도커의 구조
1. 도커 클라이언트
도커 클라이언트란 도커 컨테이너와 상호작용을 하기 위한 커맨드 라인 도구이다.
각종 명령어를 통해 도커 컨테이너의 생성, 실행, 관리 등을 할 수 있다.
2. 도커 서버
도커 서버란 도커 컨테이너를 실행하는 데 사용되는 시스템이다. 도커 엔진이 설치되어 있는 머신 또는 가상 머신을 의미한다.
클라이언트(Client)로부터 명령어를 전달받아 컨테이너의 생성, 실행, 관리를 담당하며, 도커 이미지를 저장하고 컨테이너 간 통신을 관리한다.
2.1. 도커 데몬
도커 데몬은 클라이언트에서 요청한 ‘도커 명령어를 처리’하고 도커 컨테이너를 관리하는 백그라운드 프로세스이다.
주로 서버에서 실행되며, 도커 API 요청을 받아들이고 이미지, 컨테이너, 네트워크 등의 관리를 담당한다. 또한, 도커 데몬은 컨테이너의 생명주기를 관리하고 리소스 할당, 네트워크 연결 등의 작업을 처리한다.
2.2. 도커 이미지
도커 컨테이너를 실행하기 위한 파일과 설정 정보를 포함하는 컨테이너의 템플릿을 의미한다.
자신만의 이미지를 가질 수 있고 다른 사람이 만든 이미지를 가져와 사용할 수도 있다. 그리고 이 이미지는 레지스트리에 게시된다.
이미지는 도커 파일(Dockerfile)이라는 텍스트 파일에 정의되며, 도커 이미지를 생성하는 데 사용된다.
조금 더 쉬운 이해를 위해 풀어 설명하자면, 도커 이미지는 애플리케이션 실행에 필요한 모든 파일, 라이브러리, 설정 등을 포함하는 불변의(immutable) 파일 시스템 스냅샷으로 볼 수 있고, 컨테이너는 그 이미지를 기반으로 실행되는 격리된 프로세스라고 이해할 수 있다.
2.3. 도커 컨테이너
컨테이너는 컨테이너 간의 격리된 환경에서 실행되며, 호스트와는 독립적으로 실행될 수 있다. 이를 통해 애플리케이션의 이식성과 확장성이 향상되고, 리소스 사용이 최적화된다.
3. 도커 레지스트리
도커 레지스트리란 도커 이미지를 저장하고 관리하기 위한 중앙 저장소이다. 도커 이미지는 컨테이너화된 애플리케이션을 실행하기 위한 파일 시스템과 실행 환경을 포함하고 있다.
* 도커 허브는 도커가 제공하는 공개 레지스트리로, 다른 사람들과 도커 이미지를 공유하고 검색할 수 있는 장소이다.
도커 데스크탑
도커 데스크탑은 Docker Desktop은 Docker Engine, Docker CLI, 그리고 Docker Compose와 같은 도구들을 하나로 통합한 개발 환경 애플리케이션이다. 특히 Windows와 macOS에서는 컨테이너를 실행하기 위해 필수적인 역할을 하는데, 그 이유는 이 운영체제들이 리눅스 커널 기능을 기본적으로 제공하지 않기 때문이다.
도커 파일
도커 이미지를 만들고 빌드하기 위한 텍스트 파일을 의미한다. 이는 컨테이너 이미지를 구성하는데 필요한 모든 단계와 명령을 정의한다.
예시를 들어보면, 도커 파일은 우리가 작성하는 코드 명세, 이미지는 그렇게 작성된 클래스, 컨테이너는 객체로 볼 수 있다.
도커 허브
도커 컨테이너 이미지를 공유하고 관리하기 위한 클라우드 기반 레지스트리이다.
도커 허브를 사용하면 컨테이너 이미지를 업로드, 다운로드 및 공유할 수 있다. 또한 도커 허브는 공식적인 이미지 저장소로서 다양한 언어, 프레임워크, 데이터베이스 등의 컨테이너 이미지를 제공한다.
참고로 최신 docker desktop에선 Docker Hub를 제공한다.
도커와 VM(Virtual-Machine)의 차이
가장 큰 차이점은 VM은 OS가 각각 돌아가기 때문에 무겁다는 점이다.
도커는 도커엔진 위에 각 컨테이너(프로세스)가 실행된다.
'NestJS' 카테고리의 다른 글
Docker Compose 사용 및 Postgres 설치 (0) | 2025.02.24 |
---|---|
Docker 설치 (0) | 2025.02.24 |
NestJS - 제어의 역전과 의존성 주입 (0) | 2025.02.20 |
NestJS - 서비스 및 컨트롤러 (0) | 2025.02.20 |
NestJS - Postman 사용하기 (0) | 2025.02.19 |