Docker ?
Docker는 애플리케이션 개발/배포/실행 하기위한 오픈소스 플랫폼
애플리케이션을 격리된 컨테이너 단위로 관리하여 환경 의존성에 대한 걱정없이 실행/제거하며
배포하고 실행할 수 있음.
" 격리되어서 실행 가능하며 성능 손실이 거의 없이 현재 주어진 컴퓨팅 자원 위에서 효율적인 운영 "
Docker에서는 핵심적으로 가상화, 리눅스 커널 기능이 있습니다.
가상화 ( Virtalization )
하나의 물리적인 하드웨어에서 여러 개의 가상 시스템을 실행 할 수 있게 하는 기술

물리적 서버에 가상머신을 통해 사용자가 원하는 때에 원하는 만큼의 서버를 할당받을 수 있음
- 사용자가 사용할 서버를 할당받으려고 할 때, 엔지니어가 직접 서버를 할당하는 것이 아니다.
- 서버 가상화 기술을 통해 물리 서버에서 가상머신을 실행하여 사용자에게 제공한다.
- 따라서 사용자는 물리 서버를 사용하는 것과 차이를 알 수 없다.
※ 하이퍼바이저 : 가상머신(VM)을 생성하고 실행하는 프로세스
리눅스 커널 기능 ( Linux Kernel Features )
Docker의 효율적인 가상화는 리눅스 커널의 여러 기능을 활용하여 이루어집니다.
대표적으로 가장 중요한 기능은 네임스페이스 ( Namespaces ), 컨트롤 그룹 ( Cgroups )
네임스페이스( Namespaces )
시스템 리소스를 격리하는 리눅스 커널 기능
프로세스에 대해 시스템 리소스의 독립된 뷰를 제공으로 Docker에서는 네임스페이스를 사용하여
컨테이너 간의 격리성을 보장해줌
PID 네임스페이스 : 프로세스 PID ( ID )를 격리하여, 각 컨테이너는 자신만의 프로세스 트리를 갖게됨
Network 네임스페이스 : 네트워크 인터페이스, IP주소 등을 격리하여, 독립된 네트워크 스택을 갖게됨
Mount 네임스페이스 : 파일 시스템 마운트를 격리하여, 독립된 파일 시스템을 사용할 수 있음.
컨트롤 그룹 ( Cgroups )
시스템 리소스( CPU, 메모리, 디스크 I/O )를 제한하고 모니터링하는 역할
Docker에서 cgroups를 사용하여 각 컨테이너의 리소스 사용량을 모니터링 할 수 있으며, 필요시 알림을 받을 수 있음.
리소스 제한 : 각 컨테이너에 대해 CPU 사용량, 메모리 사용량 등을 제한을 통해
하나의 컨테이너가 과도한 리소스를 사용하지 않도록 제어함
리소스 모니터링 : 각 컨테이너의 리소스 사용량을 모니터링 하며 필요시 알림
위에 말한 환경 의존성에 대한 걱정없이는
스프링부트를 실행하기위해 JAVA, Mysql 등 필요한 개발환경을 구성해주는것이 아니라
SpringBoot 프로젝트에서 build를 통해 생성되는 .jar파일을 docker이미지로 만들어서
"코드 수정이 필요없는 결과물 ( 유지보수, 업데이트 제외 )"를 실행시켜주는 것을 말한다.

도커 아키텍처

도커 엔진
도커의 핵심 구성 요소로, 컨테이너를 생성하고 관리하는 역할 → 우리가 부르는 Docker를 의미함
Docker를 설치후 실행하면 "dockerd" 라는 데몬 프로그램이 서버로서 실행되며
RESTful API등 도구들이 클라이언트가 되어서 도커 데몬에게 작업을 지시합니다.
도커 데몬 ( dockerd )
도커데몬 ( dockerd )은 도커 API 요청을 수신하고 이미지, 컨테이너, 네트워크, 볼륨 등의 도커 객체 관리
도커 클라이언트
도커 클라이언트(docker)는 사용자가 도커와 상호작용하는 주요 방법입니다.
클라이언트는 도커 명령어를 데몬( dockerd )에 전송합니다.
CLI ( Command Line Interface ) : 도커 클라이언트는 명령줄 인터페이스를 제공함
네트워크 프로토콜 : 클라이언트는 HTTP를 사용하여 도커 데몬( dockerd )과 통신함
docker run 을 통해 클라이언트가 명령을 전송하여 dorkerd를 수행시킴
도커 클라이언트는 둘 이상의 데몬과 통신 할 수 없음.
도커 레지스트리
도커 이미지를 저장하고 배포하는 저장소
Docker Hub는 공용 레지스트리이며 Docker에서는 default로 찾도록 구성되어있음.
레지스트리는 HTTP/HTTPS를 통해 이미지를 전송
도커 오브젝트
도커 이미지
컨테이너를 생성하기 위한 읽기 전용 템플릿
예를 들면 VMware에서 가상머신을 생성할 때 사용하는 ubuntu.iso 파일과 비슷한 개념
이미지는 여러 계층으로 구성되어있는 바이너리 파일로 존재하며, 컨테이너를 생성하고 실행 할 때 읽기전용으로 사용됨
도커 컨테이너
도커 이미지를 실행가능한 인스턴스
컨테이너 생성시 해당하는 이미지에서 정의된
파일 시스템과 파일, 격리된 시스템 자원 및 네트워크를 사용할 수 있는 독립된 공간이 생성됩니다.
'Server' 카테고리의 다른 글
| [Docker] 이미지 및 컨테이너 가이드 ( 2 ) (3) | 2024.09.01 |
|---|---|
| Redis(NoSql) 설치 및 세팅하기 (1) | 2024.07.26 |