Docker

[Docker] 1-2. 서버와 도커

patrick-star 2023. 5. 16. 23:16
728x90

도커와 연관되는 부분을 중심으로 서버가 무엇인지 알아보자.

서버의 두 가지 의미

도커는 서버에서 사용하는 것이 주 목적인 SW이다. 때문에 서버에 대한 기본적인 지식은 알고 있어야 한다.

서버란 무엇인가? 단어 그대로 해석하면 어떤 서비스(service)를 제공(serve)하는 것을 말한다.

개발 현장에서는 서버라는 용어를

1) 기능적 의미의 서버
2) 물리적 컴퓨터로서의 서버

이 두 가지를 의미한다.

  • 기능적 의미의 서버
    흔히 얘기하는 '웹 서버에 올려줘', '메일 서버가 죽었어'에서 말하는 서버는 기능적 의미의 서버를 가리킨다.

웹 서버웹 기능을 제공하는 서버이고 메일 서버메일 기능을 제공하는 서버이다.

  • 물리적 컴퓨터로서의 서버 = 어딘가에 실제로 존재하는 컴퓨터

서버를 회사 내부에 둘 수도 있지만 별도의 공간에 서버를 두는 경우도 많이 있다.

이렇게 의미를 구분하는 이유는 하나의 물리적 컴퓨터로서의 서버여러 개의 기능적 의미의 서버를 둘 수 있기 때문이다.

ex) 하나의 서버 컴퓨터가 웹 서버이자 메일 서버일 수도 있다.

서버라는 것은 일반적인 컴퓨터와 다를 바는 없지만 여러 사람이 원격으로 접근해서 사용한다는 점에서 개인용 컴퓨터와 다르다.

하지만, 결국 평소에 사용하는 개인용 컴퓨터와 마찬가지로 OS가 동작하고 그 위에 SW가 동작하는 것도 똑같다.

서버의 기능은 SW가 제공한다

서버 컴퓨터 자체는 결국 일반 컴퓨터와 동일하다.

따라서, 서버의 기능은 SW가 제공하는 것으로 서버에 필요한 SW를 설치하면 서버의 기능을 갖게 된다.

ex) Apache 같은 웹 서버 SW를 설치 ⇒ 웹 서버 기능을 갖게 됨
Sendmail 같은 메일 서버 SW를 설치 ⇒ 메일 서버 기능을 갖게 됨

즉, 어떤 서버를 만든다는 건 원하는 기능을 위해 필요한 SW를 설치해서 기능을 갖춘다는 뜻이다.

그래서, 여러 기능적 의미의 서버가 하나의 물리적 컴퓨터에 존재할 수 있는 이유는
여러 가지 SW하나의 컴퓨터에 설치할 수 있기 때문이다.

여려 가지 SW를 설치해서 내가 원하는 여러 가지 서버 기능을 하나의 컴퓨터에 전부 다 갖춰놓는것이다.

서버의 OS로 주로 Linux를 사용한다.

반복해서 말하지만 개인용 컴퓨터서버는 크게 다르지 않다. 다만 서로가 수행하는 역할이 다를 뿐이다.

하지만, 서버의 역할 특성상 OS는 서버를 위한 OS를 사용하는 경우가 많다.
주로 Linux 또는 UNIX 계열을 주로 사용하며 서버용 SW 역시 Linux 용 SW가 대부분이다.

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

Docker 환경에서 컨테이너를 통해 프로그램을 완전히 격리시킬 수 있다고 했다.

그렇기 때문에 다음과 같은 이점들이 있다.

1) 1대의 물리적인 서버에서 웹 서버, 메일 서버, 시스템, DB 서버 등등을 각각 독립적인 환경에서 안전하게 운용할 수 있게 된다.
2) 물리 서버 1대에 여러 개의 서버를 띄울 수 있게 되면서 물리 서버의 개수를 줄일 수 있음
3) 물리 서버 1대에 여러 개의 서버를 띄우더라도 서로의 기능을 공유하거나 침범하지 않아도 된다

자유롭게 옮길 수 있는 컨테이너

컨테이너를 자유롭게 옮길 수 있다는 건

1) 컨테이너의 정보를 내보낸 다음에
2) 다른 Docker Engine에서 복원하는 형태로 진행된다.

어쨌든, 어떤 Docker 엔진에 있던 컨테이너를 다른 Docker 엔진으로 옮기는 건 그리 어렵지 않다.

이러한 특성을 이용하면 똑같은 상태로 튜닝한 컨테이너를 다른 사람들에게 동일하게 배포해서 똑같은 개발환경을 사용할 수 있도록 할 수 있다.

Docker가 설치되어 있다면 물리적 환경의 차이, 서버 구성의 차이를 무시할 수 있기 때문에
운영 서버와 개발 서버의 환경 차이로 인한 문제에 대해서는 생각하지 않아도 된다.

도커와 가상화 기술의 차이

  • 가상화 기술

VirtualBox, VMware와 같은 가상화 기술은 가상의 물리 서버를 만드는 것과 같다. 가상이란 물리적인 대상을 SW로 대체했다는 뜻이다. 즉, 메인보드, CPU, 메모리 등의 물리적인 부품들을 SW로 구현한 것이다.

실제로 물리 서버와 동등하기 때문에 OS를 자유롭게 선택할 수 있고 그 위에 어떤 SW를 동작시켜도 상관없다.

  • Docker

컨테이너에서 Linux가 동작하는 것 처럼 보이지만 실제 Linux가 동작하는 건 아니다.
OS의 기능 중 일부를 host 역할을 하는 물리 서버에 맡겨서 부담을 덜어둔 형태이다.

다시 말해 컨테이너는 OS의 일부 기능을 host 컴퓨터에 의존하기 때문에
물리 서버에도 Linux 기능이 필요하며 컨테이너의 내용도 Linux 운영체제가 될 수 밖에 없다.
(서버 OS는 주로 Linux를 사용한다고 했으니까 컨테이너의 내용도 Linux 운영체제가 될 수 밖에 없는 것)

출처 : 그림과 실습으로 배우는 도커 & 쿠버네티스