서버와 도커

728x90
반응형

출처 : 그림과 실습으로 배우는 도커 & 쿠버네티스, 시작하세요! 도커/쿠버네티스

 

서버

  • 어떤 서비스(Service)를 제공(serve)하는 컴퓨터를 의미한다.
  • 서버는 기능적 의미의 서버와 물리적 컴퓨터로서의 서버라는 2가지의 의미를 가진다.

 

기능적 의미의 서버

  • "웹 서버에 올려줘", "메일 서버가 죽었어" 등에서 말하는 서버가 기능적 의미의 서버를 가리킨다.
  • '무슨무슨 서버'라는 말은 '무슨무슨 기능을 제공한다'는 의미이므로 '웹 기능을 제공하는 서버'는 웹 서버이고, '메일 기능을 제공하는 서버'는 메일 서버가 된다.

 

물리적 컴퓨터로서의 서버

  • "신입 사원이 올 테니 저 책상 위의 서버 좀 치워라", "저번에 사장님이 서버에 꽂혀 있던 랜 케이블을 뽑아버렸지 뭐야"같은 상황에서 가리키는 의미이다.
  • 데스크톱 컴퓨터와 마찬기지로 어딘가에 물리적으로 존재하는 컴퓨터 즉, 실물을 말한다.

 

서버가 그냥 서버라고 생각할 수도 있지만 이렇게 의미를 구분하는 이유는 하나의 '물리적 컴퓨터로서의 서버'에 여러 개의 '기능적 의미의 서버'를 함께 둘 수 있기 때문이다.

 

우리는 이전에 Rocky Linux의 Server 가상 머신의 여러 개의 서버를 구현한 적이 있다.

 

일반적인 개인용 컴퓨터는 개인이 사용하지만, 서버는 여러 사람이 원격으로 접근해 사용한다.

 

 

서버의 기능은 소프트웨어가 제공한다

  • 서버의 기능은 소프트웨어가 제공하는 것으로, 소프트웨어를 설치하면 '서버'의 기능을 갖게 된다. 우리도 Server 가상 머신에 httpd(아파치 웹 서버 서비스), vsftpd 등의 소프트웨어 패키지를 설치해서 server 가상 머신을 서버로 만들었다.
  • 서버의 기능이 소프트웨어에서 나온다는 말은 '여러 가지 소프트웨어를 한 컴퓨터에 설치할 수도 있다'라는 의미이다.
  • 여러 기능적 의미의 서버가 하나의 물리적 컴퓨터에 함께 존재할 수 있다.
    • 웹 서버와 메일 서버, FTP 서버를 한 컴퓨터에서 제공할 수도 있고, 시스템 서버와 데이터베이스 서버가 함께 동작하기도 한다.

 

 

컨테이너를 이용해 여러 가지 서버 기능을 안전하게 함께 실행하기

  • 도커 환경에서 컨테이너를 사용하면 프로그램을 완전히 격리시킬 수 있다
  • 예산이 부족해 한 대의 서버에서 실행하던 웹 서버와 메일 서버, 시스템과 DB 서버를 각각 독립적인 환경에서 안전하게 운용할 수 있다. 어떤 프로그램을 업데이트하더라도 서로 영향을 미치지 않게 된다.
  • 일반적으로 한 대의 서버 컴퓨터에는 웹 서버를 한 벌 밖에 실행하지 못하지만, 컨테이너 기술을 활용하면 여러 개의 웹 서버를 올릴 수 있다.
  • 물리 서버 한 대에 여러 개의 웹 서버를 띄우면 그만큼 물리 서버 수를 줄일 수 있다.
  • 컨테이너는 그저 격리된 환경이 아니라 쉽게 옮길 수 있다는 특성이 있다.

 

자유로이 옮길 수 있는 컨테이너

  • 컨테이너는 자유롭게 옮길 수 있다. 정확히는 컨테이너 자체를 옮긴다기 보다는 컨테이너의 정보를 내보내기한 다음, 다른 도커 엔진에서 복원하는 형태가 되지만 어찌됬든 컨테이너를 어떤 도커 엔진에서 다른 도커 엔진으로 옮기기는 그리 어려운 일이 아니다.
  • 똑같은 상태로 튜닝한 컨테이너를 팀원 전원에게 배포해 모두가 동일한 개발환경을 사용할 수 있다.
  • 도커만 설치되어 있으면 되므로 운영체제가 달라도 이를 신경쓰지 않고 컨테이너를 옮길 수 있다. (우리가 Rocky Linux에서 Ubuntu의 Bash 셸을 사용한 것처럼)
  • 도커를 사용하면 물리적 환경의 차이, 서버 구성의 차이를 무시할 수 있으므로 운영 서버와 개발 서버의 환경 차이로 인한 문제를 원천적으로 방지할 수 있다.

 

도커와 가상화 기술의 차이

가상화 기술

  • VirtualBox나 VMware 같은 가상화 기술은 가상의 물리 서버를 만드는 것과 같다. 여기서 '가상'이라는 말은 물리적인 대상을 소프트웨어로 대체했다는 의미이다.
  • 실질적으로 물리 서버와 동등한 것이므로 당연히 운영체제도 아무 것이나 설치할 수 있고, 그 위에서 어떤 소프트웨어를 구동해도 무방하다.
  • 하이퍼바이저를 이용해 여러 개의 운영체제를 하나의 호스트에서 생성해 사용한다.
  • 여러 개의 운영체제는 가상 머신이라는 단위로 구별되고, 각 가상 머신에는 Ubuntu, Rocky Linux 등의 운영체제가 설치되어 사용된다.
  • 게스트 운영체제를 사용하기 위한 라이브버리, 커널 등을 전부 포함하기 때문에 가상 머신을 배포하기 위한 이미지로 만들었을 때의 이미지의 크기가 크다.

 

도커

  • 도커는 컨테이너에서 리눅스가 동작하는 것처럼 보이지만 실제 리눅스가 동작하는 것은 아니다.
  • 운영체제의 기능 중 일부를 호스트 역할을 하는 물리 서버에 맡겨 부담을 덜어 둔 형태이다.
  • 컨테이너는 일부 기능을 호스트 컴퓨터에 의존하기 때문에 물리 서버에도 리눅스 기능이 필요하며, 컨테이너의 내용도 리눅스 운영체제가 될 수밖에 없다.
  • 가상화된 공간을 생성하기 위해 리눅스의 자체 기능인 chroot, namespace, cgroup 등을 사용함으로써 프로세스 단위의 격리 환경을 만들기 때문에 성능의 손실이 없다.
  • 컨테이너에 필요한 커널은 호스트의 커널을 공유해서 사용하고, 컨테이너 안의 애플리케이션을 구동하는 데 필요한 라이브버리 및 실행 파일만 존재하기 때문에 컨테이너를 이미지로 만들었을 때 이미지의 용량 또한 가상 머신에 비해 대폭 줄어든다.

 

 

도커와 AWS ECS의 차이

AWS EC2에도 도커의 컨테이너와 비슷한 '인스턴스'라는 개념이 있다.

EC2 역시 가상화 기술이다. 다시 말해 각각의 인스턴스가 완전히 독립된 컴퓨터처럼 동작한다. 따라서 EC2와 도커의 관계는 VirtualBox, VMware와 도커의 관계와 같다.

하지만 인스턴스는 컨테이너와 마찬가지로 AMI라는 이미지로부터 생성하므로 인스턴스를 배포하는 방법은 도커와 비슷하다.

 

 

728x90
반응형