본문 바로가기
{시리즈}/Docker

2. Docker란

by jay2022 2023. 11. 28.

1. 질문으로 알아보는 도커

💡 도커가 컨테이너 자체인가?

A) 도커는 컨테이너 기술에 여러 기능을 추가한 오픈소스 프로젝트이다.

컨테이너 - 사전적 의미

  • 어떤 물체를 격리하는 공간
  • 각각의 컨테이너를 격리된 상태로 다른 컨테이너들과 분리

컨테이너 - 기술적 의미

  • 컨테이너의 담긴 것들의 라이프 사이클을 관리한다.
  • 즉, 컨테이너의 담긴 무언가의 생성 → 운영 → 제거까지 라이프 사이클 관리
    ex) 스프링의 Servlet Container, Ioc Container, Bean Container

💡 가상화 관점에서 컨테이너란?

A) 이미지에 따라 생성된 프로세스 단위의 격리환경이다.
즉, 컨테이너는 프로세스를 실행하기 위한 환경을 제공하고, 프로세스의 생명주기를 관리한다.

💡 spring boot와 Nginx를 각각의 컨테이너로 분리하여 실행한다면?

A) 각 컨테이너는 '파일시스템'과 '격리된 하드웨어 자원' 및 '네트워크'를 사용할 수 있는 독립된 공간을 가진다.

컨테이너가 실행되면, 프로세스가 실행에 필요한 자원을 할당받고 프로세스를 실행한다.
이때 커널을 통해 필요한 자원들을 가져온다.

컨테이너_실행_참고

💡 Host OS 입장에서 컨테이너로 실행된 프로세스를 어떻게 바라볼까?

A) 컨테이너는 결국 Docker 같은 프로세스에 의해 실행된 자식 프로세스이다.
즉, Nginx를 컨테이너 없이 실행하는 것이나, Docker 엔진을 사용하여 실행하는 것이나
Host OS 입장에서는 똑같은 프로세스이다.

💡 컨테이너는 왜 써야 할까?

A-1) 컨테이너는 프로세스를 격리된 환경에서 관리한다.
격리된 환경이란 Host OS와의 격리를 의미하며 컨테이너에서 Host OS에 영향을 끼치지 못한다.
즉, Host OS와 격리를 통해 독립적인 개발 환경을 보장한다.

A-2) 프로세스를 컨테이너 단위로 사용하기 때문에 프로세스 관리와 확장에 용이하다.

💡 컨테이너는 어떻게 관리될까?

A) 컨테이너를 실행 관리는 Docker 엔진에 의해 실행된다.

2. 도커엔진

2.1. 도커엔진이란?

도커엔진

도커 엔진은 컨테이너를 쉽게 사용할 수 있게 해주는 주체(실행환경)이다.

  • 도커 엔진은 표준을 지킨 이미지를 생성한다.
  • 표준을 지킨 이미지를 사용하여 컨테이너를 생성하여 실행한다.
  • Docker 엔진은 API와 CLI를 통해 명령을 받아들여 작업을 수행한다.

도커 엔진에 의해 관리되는 범위

  • 컨테이너의 생명주기 관리
  • 컨테이너를 생성하기 위한 이미지 관리
  • 컨테이너의 데이터를 저장하기 위한 볼륨관리
  • 컨테이너 접속을 관리하기 위해 네트워크 관리

2.2. 도커엔진에 명령을 요청하면 발생하는 일

도커엔진_실행
  • docker run -it : 도커 컨테이너를 실행하는 도커 클라이언트 CLI 명령이다.
  • /var/run/docker.sock : 경로에 위치한 유닉스 소켓이다.

CLI 명령 실행 플로우

  1. 사용자가 CLI명령을 입력하면 유닉스 소켓을 사용하여 도커 데몬 API를 호출한다.
  2. API 호출로 명령이 전달된 도커 데몬은 명령어에 해당하는 작업을 수행한다.
  3. 그리고 수행결과를 도커 클라이언트에게 반환한다.
  4. 마지막으로 사용자에게 결과가 출력된다.

cli 명령뿐만 아니라 url을 통해 명령을 도커 데몬(API)에게 전달하여 실행도 가능하다.

도커엔진_API실행

참고

'{시리즈} > Docker' 카테고리의 다른 글

4. Docker 명령어 알아보기  (2) 2023.12.04
3. Docker 사용을 위한 환경 이해하기  (0) 2023.12.01
1. Docker의 등장 배경  (1) 2023.11.28