본문 바로가기

Programming/Server

[Server] Docker란?

Docker는 Host와의 격리를 통해 독립된 개발 환경을 제공한다.

도커는 컨테이너를 기반으로 한 가상화 도구입니다. 그렇다면 가상화는 무엇이고 왜 필요한 것일까요?

1.  가상화

성능이 좋은 서버에 쇼핑몰 사이트 서비스를 구축해 놓은 상태라고 가정해봅시다.

이 서버에 반려동물 관리 플랫폼 서비스를 구축하려고 하니,

기존의 쇼핑몰 사이트를 위해 구축한 환경과 맞지 않는 상황을 맞닥뜨렸는데요.

 

이럴 경우 반려동물 관리 플랫폼을 위한 서버를 추가 비용을 들여 새로 사는 방법이 최선일까요? 

이미 성능이 좋은 서버가 있는데도 불구하고 활용하지 못하는 것은 자원 낭비가 되겠죠!

 

이 때, 서버의 성능을 나눠서 사용하면

기존의 문제가 해결되지 않을까해서 등장한게 바로 가상화 입니다.

출처 : 굿어스

 

이렇게 하나의 서버를 가상화를 통해 여러대의 서버가 있는 것과 같은 이점을 누릴 수 있는 것이죠

2.  서버 가상화

즉, 서버 가상화란 하나의 물리적 Host OS 에서
여러개의 서버 운영체제를 게스트로 실행할 수 있게 해주는 소프트웨어 아키텍처입니다.
게스트 OS로 실행된 하나의 단위를 가상머신(virtual machine) 이라고 합니다.
또한 이러한 서버 가상화를 가능하게 해주는 것은 Hypervisor(하이퍼바이저)입니다.
서버 가상화 작업은 반드시 하이퍼바이저를 반드시 거쳐야하고, Host OS와는 완전히 독립된 컴퓨터의 무엇을 만드는 것이기 때문에 무겁습니다.
이를 해결하기 위해서 컨테이너라는 개념이 등장하게 됩니다.

3. 컨테이너 기반 가상화

컨테이너 기반 가상화는 이미지의 목적에 따라 생성되는 프로세스 단위의 격리 환경을 제공합니다.

 

서버 가상화와 달리 실행 환경은 컨테이너 내부에 격리 되지만 OS는 호스트와 공유하게 됩니다.

컨테이너 내부에는 컨테이너를 실행시키기 위한 파일들만 있으면 되므로 용량도 적고 가볍습니다.

 

또한, 컨테이너를 통해 Host OS와의 독립된 개발환경을 제공하여 프로세스를 컨테이너 단위로 관리할 수 있게 되고

프로세스의 관리 확장이 쉬워지게 됩니다.

그렇다면 Host OS는 컨테이너를 어떻게 바라볼까요?
SpringBoot 어플리케이션을 실행하는 컨테이너가 있다고 가정합시다.
Host OS 입장에서는  SpringBoot 어플리케이션을 직접 실행하나, 
도커를 통해 컨테이너로 SpringBoot 어플리케이션을 실행하나
 똑같은 프로세스로 취급합니다.

 

4. Docker Engine 

 

사용자는 도커엔진을 통해 컨테이너를 관리할 수 있습니다.

 

도커 엔진은 

  • 컨테이너의 라이프 사이클 관리
  • 컨테이너를 생성하기 위한 이미지 관리
  • 컨테이너의 데이터 저장소 역할인 볼륨의 관리 
  • 컨테이너의 접속 관리 

의 기능을 맡고 있습니다.

5. Docker Engine 구조

사용자가 docker 명령어로 docker engine에 명령어를 보내면
docker client는 이를 전달 받아 /var/run/docker.sock에 위치한 유닉스 소켓을 통해
docker demon의 API를 호출합니다.
docker demon은 명렁어에 해당하는 작업을 수행하고 
수행 결과를 docker client에게 전달한 후 사용자에게 결과를 출력합니다.

 

'Programming > Server' 카테고리의 다른 글

[Server] ~/.bashrc  (0) 2025.01.09
[Server]Jboss  (0) 2024.12.10
[Server] 빌드와 배포  (0) 2024.09.29
[Server] CORS  (1) 2024.09.15
[Server] WebServer와 Web Application Server (WAS)  (1) 2024.09.14