[도커&쿠버네티스] 2.서버와 도커
서버란 어떤 서비스를 제공하는 것을 가리킨다.
개발 현장에서 서버 두 가지의 의미를 갖는데 하나는 기능적 의미의 서버이고 나머지는 물리적 컴퓨터로서의 서버이다.
기능적 서버
무슨무슨 서버라는 말은 무슨무슨 기능을 제공한다는 의미이다.
EX) 웹 서버 = 웹 기능을 제공함
메일 서버 = 메일 기능을 제공함
물리적 서버
실물, 데스크톱 컴퓨터와 마찬가지로 어딘가에 물리적으로 존재하는 컴퓨터이다.
EX) 랜 케이블
일반적으로 개인용 컴퓨터는 개인이 사용하지만 서버는 여러 사람이 원격으로 접근해 사용한다는 점이 다를 뿐이다.
서버의 기능은 소프트웨어가 제공하는 것으로 소프트웨어를 설치하면 서버의 기능을 갖게 된다.
EX) 웹 서버용 소프트웨어를 설치 => 웹 서버가 된다.
메일 서버용 소프트웨어를 설치 => 메일 서버가 된다.
즉 무슨무슨 서버를 만든다는 말은 무슨무슨 소프트웨어를 설치해 이 기능을 갖춘다는 말과 같다.
또한 여러 가지 소프트웨어를 한 컴퓨터에 설치 할 수 있다.
도커 환경에서 컨테이너를 사용하면 프로그램을 완전히 격리 시킬 수 있다고 설명했다.
한 대의 서버에서 실행하던 웹 서버, 메일 서버, 시스템과 DB 서버를 각각 독립적인 환경에서 안전하게 운용할 수 있다.
무엇을 업데이트하더라도 서로 영향을 미치지 않을 것이며, 여러 개의 웹 서버를 올릴 수도 있다.
물리 서버 한 대에 여러개의 웹 서버를 띄우면 그만큼 물리 서버 수를 줄일 수 있다.
EX) 프로젝트 X와 프로젝트 Y의 웹 서버가 있다고 가정하자.
- 두 프로젝트의 용량이 크지 않아서 물리 서버를 따로 두면 그만큼 자원 낭비가 발생하므로 하나의 물리 서버에 함께 둔다면 프로젝트 비용이 절반으로 감소할 것이다.
- 일반적으로 물리 서버 한 대에 두 웹 서버를 함께 올린다면 개발자가 다른 프로젝트의 환경을 건드릴 수 있다.
- 아파치는 서버 한 대에 하나밖에 올리지 못하므로 웹 서버의 기능을 공유해야 하는 한계도 발생한다.
컨테이너 기술을 활용하면 이러한 리스크를 감수하지 않고 두 웹 서버를 하나의 물리 서버에 함께 올릴 수 있다.
개발 측면에서 개발환경을 갖추거나 운영 환경으로 쉽게 넘어갈 수 있다는 점이다.
이러한 이점은 컨테이너가 그저 격리된 환경이 아니라 쉽게 옮길 수 있다는 특성에서 비롯된다.
컨테이너는 자유로이 옮길 수 있다.
컨테이너의 정보를 내보내기한 다음, 다른 도커 엔진에서 복원하는 형태가 되어 똑같은 상태로 튜닝한 컨테이너를 배포해 동일한 개발환경을 사용할 수 있다. 즉 도커 엔진만 설치돼 있으면 다른 물리서버에서도 컨테이너는 동일하게 작동된다.
도커를 이용하면 물리적 환경적의 차이, 서버 구성의 차이를 무시할 수 있으므로 운영 서버와 개발 서버의 환경 차이로 인한 문제를 원천적으로 방지할 수 있다.
도커와 가상화 기술의 차이
VirtualBox나 VMware 같은 가상화 기술은 가상의 물리 서버를 만드는 것과 같다.
즉 물리적인 부품을 소프트웨어로 구현하는 것이다.
운영체제도 아무 것이나 설치 가능하고, 그 위에서 어떤 소프트웨어를 구동해도 상관없다.
도커는 컨테이너에서 리눅스가 동작하는 것처럼 보이지만 실제 리눅스가 동작하는 것은 아니다.
운영체제의 기능 중 일부를 호스트 역활을 하는 물리 서버에 맡겨 부담을 덜어 둔 형태이다.
즉 컨테이너는 운영체제의 일부 기능을 호스트 컴퓨터에 의존하기 때문에 물리 서버에도 리눅스 기능이 필요하며, 컨테이너의 내용도 리눅스 운영체제가 될 수 밖에 없다.