본문 바로가기

컴퓨터/도커

1. 도커의 개념

운영체제의 개념

컴퓨터는 하드웨어와 소프트웨어로 구성되어있다.

하드웨어: 손으로 만질 수 있는 모니터나 키보드와 같은 기계 장치를 의미한다.

소프트웨어: 하드웨어에서 작동하는 프로그램을 의미한다

소프트웨어에는 운영체제라고 불리는 특별한 소프트웨어가 존재하는데 운영체제는 시스템 소프트웨어를 의미한다.

이는 하드웨어, 소프트웨어 자원을 관리하고 스케줄링 기능을 제공하고 프로그램 실행 환경을 제공한다.

 

셸: 운영체제와 사용자 사이를 연결해주는 것이다.

사용자는 셸을 통해서 운영체제와 상호작용하여 다양한 작업을 수행할 수 있다.

 

프로그램: 실행 가능한 명령어의 집합으로 하드 디스크와 같은 저장 장치에 저장되어 있다.

 

프로세스: 실행중인 프로그램을 뜻하는 것으로 이는 램에 존재한다.

이때 디스크에 있는 프로그램을 동시에 여러개를 실행시킬 수 있는데 이러한 것을 멀티 프로세스라고 한다.

 

스레드: 프로세스가 할당받은 자원을 이용하는 실행단위로 프로세스 내에서 실행되는 흐름의 단위를 뜻한다.

프로세스는 여러개의 스레드를 담고 있고 하나의 프로세스에서 여러개의 스레드가 유기적으로 동작한다.

 

네임스페이스

프로세스를 실행할 때 시스템 리소스를 분리해서 실행할 수 있는 기능을 의미한다.

즉, 컴퓨터 시스템에서 서로 다른 리소스를 구분하기 위한 식별 방법이다.

이러한 구분을 하는 이유는 프로세스를 격리시켜 충돌을 방지하기 위함이다.

도커

도커는 컨테이너라고 부르는 운영체제 수준의 가상화 방식으로 소프트웨어를 배포하는 방식을 사용하는 PaaS 제품을 의미한다.

이는 platform as a service의 줄인말로 데이터 단계만 사용자가 관리하는 서비스를 의미한다.

즉, 도커를 사용하면 다양한 개발 환경에서 컨테이너를 이용해 소프트웨어를 편리하게 배포할 수 있다.

 

On-Premises

조직 내부에 모든 하드웨어와 소프트웨어를 설치하고 관리하는 전통적인 IT 인프라 모델이다.

데이터와 서버가 내부에 있어 보안 통제가 용이하고, 모든 IT 자산에 대한 완전한 제어와 커스터마이징이 가능하다는 장점이 있다.

다만 초기 설치 비용이 높고, 유지보수와 업그레이드 비용이 많이 드는 문제가 있고, 자원 확장이 어려워 필요에 따라 신속한 대응이 어려운 단점이 있다.

 

 

IaaS (Infrastructure as a Service)

 

서버, 스토리지, 네트워크와 같은 컴퓨팅 리소스를 가상화하여 인터넷을 통해 제공하는 서비스이다.

사용자는 필요한 인프라 자원을 서비스 제공자로부터 빌려서 사용한다.

이는 초기 투자 비용 없이 필요에 따라 자원을 사용하고 비용을 지불하고, 사용량에 따라 쉽게 자원을 확장하거나 축소할 수 있다.

 

 

PaaS (Platform as a Service)

 

개발, 테스트, 배포, 관리에 필요한 플랫폼을 제공하는 서비스로 사용자는 애플리케이션 개발에 집중할 수 있으며, 인프라 관리나 운영체제 관리 등은 서비스 제공자가 담당한다.

이러한 점 때문에 개발 환경이 이미 구성되어 있어 개발과 배포가 빠르고 효율적이고, 인프라와 플랫폼 관리를 서비스 제공자가 담당하므로, 개발자는 애플리케이션 개발에만 집중할 수 있다.

다만 플랫폼과 서비스에 대한 제어가 제한적일 수 있고, 특정 PaaS 제공자에 종속될 수 있는 위험이 있다.

 

 

SaaS (Software as a Service)

 

소프트웨어 애플리케이션을 인터넷을 통해 제공하는 서비스로 사용자는 소프트웨어를 설치하거나 유지보수할 필요 없이 웹 브라우저를 통해 서비스를 이용한다.

이는 인터넷이 연결된 어디서나 서비스에 접근할 수 있고, 서비스 제공자가 소프트웨어 업데이트와 유지보수를 관리한다.

데이터가 클라우드에 저장되므로, 보안과 개인정보 보호에 대한 위험이 있을 수 있고, 소프트웨어 커스터마이징이 제한적일 수 있다.

 

 

 

배포를 하다보면 사용자의 환경에 따라 생기는 문제점이 달라지기도 한데 도커를 사용하면 이러한 문제를 해결할 수 있다.

도커는 위와같이 운영체제 위에 설치가 되고 컨테이너 단위로 실행이 되는데 컨테이너들은 서로 격리되어 있어 독립성을 보장한다.

 

컨테이너

컨테이너는 소프트웨어를 배포할 때 필요한 코드, 라이브러리, 환경 설정 파일들을 모아서 격리시킨 후 실행가능한 패키지로 만든것을 의미한다.

이렇게 컨테이너를 만들면 서로 다른 컨테이너끼리는 격리된 환경에서 작동하여 서로 충돌하지 않는 장점이 있다.

이는 소프트웨어 시스템을 구축할 때 최소 구성 요소로 분할 하여 구축하는 방식인 마이크로 서비스 아키택처의 기반이 된다.

 

가상화

컴퓨터에서 활용하는 리소스를 추상화하는 개념으로 여러개의 가상머신을 생성하여 단일 컴퓨팅 자원을 여러개의 논리적인 자원으로 나눠서 동작할 수 있다.

호스트 가상화는 운영체제를 설치한 후 하이퍼바이저를 통해 가상머신을 만들고 가상머신 내부에는 게스트 운영체제가 설치되는 방식이다. 일반적으로 개인용 컴퓨터나 서버에서 사용된다.

여기서 하이퍼바이저는 단일 물리 머신에서 다수의 가상머신을 실행할 때 활용하는 소프트웨어를 의미한다

 

하이퍼바이저 가상화는 호스트 운영체제를 필요로 하지 않는 방식으로 부팅 시 가상머신을 선택하게 된다.

성능이 우수하지만 초기 설정이 복잡하고 관리가 어려운 단점이 있다.

 

컨테이너 가상화는 운영체제 위에 컨테이너를 운영하기 위해 도커를 설치한 후 컨테이너를 통해 애플리케이션을 실행하는 방식이다. 컨테이너 가상화는 컨테이너간 격리가 되기 때문에 다른 애플리케이션에 영향을 미치지 않아 다른 환경에서 실행하는데 좋다.

 

도커의 구성요소

 

Docker Client는 docker-cli로 불리며, Ubuntu의 터미널과 같이 명령어를 입력하는 인터페이스이다.

명령어를 통해 Docker Daemon(dockerd) API를 사용하여 build, pull, run과 같은 작업을 수행한다.

사용자가 명령어를 입력하면 Docker Client는 해당 명령어를 Docker Daemon에 전달하여 실행한다.

 

Docker Daemon은 dockerd라고 불리며, 백그라운드에서 실행되는 데몬 프로세스이다.

이는 API 요청을 수신하고 Docker 이미지, 컨테이너 등의 객체를 관리한다.

 

containerd는 오픈소스 컨테이너 런타임으로, 컨테이너 실행과 관리에 필요한 기능을 제공한다.

이는 컨테이너의 생명주기를 관리하며, 이미지 전송, 컨테이너 실행, 스토리지, 네트워크 등을 담당한다.

containerd는 Docker Daemon과 함께 동작하여 컨테이너 관리의 핵심 기능을 수행한다.

 

runc는 컨테이너 실행과 관련된 작업을 수행하는 저수준 컨테이너 런타임이다.

이는 실제로 컨테이너를 실행하는 역할을 담당하는데 containerd가 컨테이너 실행을 요청하면, runc는 이를 받아들여 실제 컨테이너를 시작한다.

 

containerd-shim은 containerd와 runc 사이에서 작동하는 프로세스이다.

이는 컨테이너 실행을 조정하는데 runc가 컨테이너를 실행한 후에도 containerd와의 연결을 유지하며, 컨테이너 실행 상태를 관리한다.

 

 

 

 

 

 

 

 

 

 

 

'컴퓨터 > 도커' 카테고리의 다른 글

6. 쿠버네티스를 활용한 웹 서비스 배포  (0) 2024.08.23
5. 쿠버네티스 기초  (2) 2024.08.17
4. 쿠버네티스설치 및 기본 개념  (0) 2024.08.08
3. 도커 실습  (1) 2024.08.03
2. 도커 기초  (0) 2024.07.28