[Docker] 1. 도커란 무엇인가🤔?

sorzzzzy·2022년 4월 28일
1

Docker&Kubernetes

목록 보기
1/12
post-thumbnail

이번주부터 Docker & Kubernetes 스터디를 시작하게 됐다🥳!
최근에 클라우드 서비스에 관심을 가지게되면서 컨테이너 기술을 좀 더 깊이있게 공부해보고 싶다는 생각을 했었는데, 이렇게 좋은 기회가 생겨서 너무 좋다!

이번 포스팅에서는 도커가 무엇인지, 도커를 사용하는 이유 그리고 서버와 도커에 대해 다뤄볼 예정이다.

스터디는 그림과 실습으로 배우는 도커&쿠버네티스 라는 도서를 기반으로 진행된다.


🏷 도커란 무엇인가?

도커란 무엇인가?

✔️ 도커는 '데이터 또는 프로그램을 격리시키는' 기능을 제공한다.

도커를 한마디로 정의하자면 데이터 또는 프로그램을 격리시키는 기능을 제공하는 소프트웨어이다.

우리가 현재 사용하는 컴퓨터에는 여러 기능이 함께 동작하고 있는데, 도커는 이와 같은 다양한 프로그램과 데이터를 각각 독립된 환경에 격리하는 기능을 제공한다.
그것도 운영체제(비슷한 것) 통째로 격리하는 기능이다!


✔️ 컨테이너와 도커 엔진

소프트웨어는 OS와 라이브러리에 의존성을 띄고있어, 하나의 컴퓨터에서 성격이 다른(OS, 라이브러리 버전이 다른) 소프트웨어를 한번에 실행할 때 어려움을 가질 수 있고 관련된 구성을 관리하기가 어렵다.

컨테이너는 개별 Software의 실행에 필요한 실행환경을 독립적으로 운용할 수 있도록 기반환경 또는 다른 실행환경과의 간섭을 막고 실행의 독립성을 확보해주는 운영체계 수준의 격리 기술이다.

쉽게 설명하자면!
개인용 컴퓨터 또는 서버상의 환경을 마치 코스트코에서 판매하는 조립형 창고같은 작은 방으로 분할하고 이 작게 쪼갠 독립된 방에 데이터나 프로그램을 둔다고 가정했을 때,
조립형 창고가 컨테이너이고 컨테이너를 다루는 기능을 제공하는 소프트웨어가 도커인 셈이다.

도커를 사용하기 위해서는 도커 소프트웨어의 본체인 도커 엔진을 설치해야 한다.
이 도커 엔진을 사용해 컨테이너를 생성하고 구동시킬 수 있다.


✔️ 컨테이너를 만들려면 이미지가 필요하다

도커 엔진이 있어야 컨테이너를 만들 수 있다고 설명했다.
컨테이너를 만들기 위해서는 도커 엔진 외에도 컨테이너의 빵틀과 같은 역할을 하는 이미지가 필요하다.

이미지는 담고 있는 소프트웨어의 종류에 따라 다양하게 존재한다.
➡️ 아파치 컨테이너를 만들고싶다면 아파치 이미지, MySQL 컨테이너를 만들고싶다면 MySQL 이미지 사용

또한 컨테이너는 여러 개를 만들 수도 있다.


4. 도커는 리눅스 컴퓨터에서 사용한다.

다만 도커를 사용하는 데는 몇 가지 제약 사항이 존재한다.

우선, 종류와 상관없이 리눅스 운영체제가 필요하다.
윈도우나 macOS에서 도커를 구동할 수는 있지만 이 역시 내부적으로 리눅스가 사용된다.

또한 컨테이너에서 동작시킬 프로그램도 리눅스용 프로그램인데, 이는 도커가 리눅스 운영체제에서 사용되는 것을 전제로 만들어졌기 때문이다.

어떤 형태로든, 리눅스 운영체제가 개입된다는 것을 기억하자!


데이터나 프로그램을 "독립된 환경"에 격리해야 하는 이유

도커는 주로 서버 환경을 격리하기 위해 사용된다.
그렇다면 데이터나 프로그램을 독립된 환경에 격리해야 하는 이유가 무엇일까?

✔️ 프로그램을 실행하기 위해서는 그 프로그램의 실행 환경이나 라이브러리가 필요하다.

대부분의 프로그램은 프로그램 단독으로 동작하는 것이 아닌 어떤 실행환경이나 라이브러리, 다른 프로그램과 함께 동작한다.
➡️ 파이썬으로 작성된 프로그램은 다른 라이브러리들을 사용하고, PHP로 작성된 프로그램을 실행하려면 PHP 실행환경이 필요함


✔️ 소프트웨어는 여러 프로그램으로 구성되며, 다른 프로그램과 정보를 공유하기도 한다.

소프트웨어 또한 단일 프로그램이 아닌 여러 개의 프로그램으로 구성된 경우가 많다.
또한 다른 프로그램과 특정한 폴더/디렉토리를 공유하거나 같은 경로에 설정 정보를 저장하는 경우도 있다.

그렇게 때문에 만약 프로그램 하나를 업데이트하면 다른 프로그램에도 영향을 미치게 된다!

시스템 A와 B가 모두 SS라는 프로그램과 연동되어 있다고 가정해보자.
만약 A는 SS프로그램 5.0 버전에서 동작하는데, 시스템 B가 SS프로그램 버전을 8.0으로 업데이트 해버리면 A가 동작하지 않게 될 것이다!

여기서는 소프트웨어를 예시로 들었지만, 실행 환경이나 라이브러리, 디렉토리나 설정 파일에서도 같은 상황이 발생할 수도 있다.
공유하는 대상을 어느 한 쪽만을 위해 수정하면 다른 쪽에서는 오류가 발생하게 된다.


프로그램의 격리란?

도커 컨테이너를 사용해 프로그램을 격리하면 여러 프로그램이 한 서버에서 실행되면서 발생하게 되는 위와 같은 문제들을 대부분 해결할 수 있다!

시스템 A와 B의 버전이 각각 달라도, 한 세트로 묶어 따로 격리시켜 사용할 수 있다.

도커 컨테이너는 완전히 독립된 환경이므로 여러 컨테이너에서 같은 프로그램을 실행할 수 있다. 버전이 완전히 동일해도 상관없다.


🏷 서버와 도커

도커를 완벽히 이해하기 위해서는, 도커와 연관되는 부분을 중심으로 서버가 무엇인지도 알아야한다.

서버의 두 가지 의미

도커는 서버에서 사용되는 소프트웨어이다.
그리고 서버(server)란 이름 그대로 어떤 서비스(service)를 제공(serve)하는 것이다.

✔️ 기능적 의미의 서버 & 물리적 컴퓨터로서의 서버

기능적 의미의 서버는 우리가 흔히 표현하는 "웹 서버에 올려줘", "메일 서버가 죽었어" 와 같은 의미의 서버를 가리킨다.

물리적 컴퓨터로서의 서버는 컴퓨터 자체, 즉 실물을 의미한다.

이를 설명하는 이유는 하나의 "물리적 컴퓨터로서의 서버"에 여러 "기능적 의미의 서버"를 함께 둘 수 있기 때문이다.


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

서버의 기능은 소프트웨어가 제공하는 것으로, 소프트웨어를 설치하면 "서버"의 기능을 갖추게 된다.

예를 들어, 아파치와 같은 웹 서버의 소프트웨어를 설치하면 웹 서버 기능을 갖추게 되며
Sendmail 같은 메일 서버의 소프트웨어를 설치하면 메일 서버가 된다.
➡️ '무슨무슨' 용 소프트웨어를 설치하면 '무슨무슨' 서버가 된다!

서버의 기능이 소프트웨어로부터 나온다는 말은 여러 소프트웨어를 한 컴퓨터에 설치할 수 있다는 의미와 같고,
이는 곧 여러 기능적 의미의 서버가 하나의 물리적 컴퓨터에 함께 존재할 수 있다는 것을 뜻한다.


✔️ 서버의 운영체제로는 주로 리눅스가 사용된다

서버의 역할 특성 상 운영체제는 서버용 운영체제를 사용하는 경우가 많다.

서버용 운영체제로는 리눅스 또는 유닉스 계열을 주로 사용하며, 서버용 소프트웨어도 리눅스용 소프트웨어가 대다수를 차지한다.

윈도우도 서버용 버전이 있지만, 점유율 면에서 리눅스와 유닉스가 더 높다.


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

다시 도커 이야기로 돌아가자.

여러번 강조하는 부분! 도커 환경에서 컨테이너를 사용하면 프로그램을 완전히 격리시킬 수 있다.

이전에 만약 예산이 부족해 한 대의 서버에서 웹 서버와 메일 서버, 시스템과 DB 서버까지 모두 실행했다면,
도커를 사용해 이제는 각각 독립적인 환경에서 안전하게 운용할 수 있다!

또한 일반적으로 한 대의 서버 컴퓨터에는 웹 서버를 한 개 밖에 실행하지 못했는데, 컨테이너 기술을 사용하면 여러개의 웹 서버를 올릴 수 있다.
➡️ 용량이 그렇게 크지 않은 웹 서버라면 이와 같이 물리 서버를 하나만 두는 게 훨씬 효율이 좋다.


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

개발 측변에서 이점은 개발환경을 갖추거나 운영 환경으로 쉽게 넘어갈 수 있다는 점이다.
이 이점은 컨테이너가 그저 격리된 환경이 아니라 쉽게 옮길 수 있다는 특성에서 비롯된다.

컨테이너는 자유롭게 옮길 수 있다.
(사실 옮긴다기 보다는, 컨테이너의 정보를 내보내기한 다음, 다른 도커 엔진에서 복원하는 형태이다)

이러한 특성을 이용하면 똑같은 상태로 세팅해놓은 컨테이너를 팀원 전원에게 배포해 모두가 동일한 개발환경을 사용할 수 있다.

이처럼 도커를 이용하면 물리적 환경의 차이, 서버 구성의 차이를 무시할 수 있으므로,
운영 서버와 개발 서버의 환경 차이로 인한 문제를 원천적으로 방지할 수 있다.


도커와 가상화 기술의 차이

결론부터 말하면, 게스트OS의 유무라고 할 수 있다.
VM에는 Guest OS가 깔리지만 도커의 컨테이너는 그렇지 않다.
컨테이너에는 Guest OS를 설치하지 않는다.

이는 자원의 효율성 측면에서 차이가 난다.
VM는 하나씩 늘 때마다 OS를 위한 자원을 할당해주어야 하는 반면에,
도커는 어플리케이션을 구동하는데 필요한 모든 패키지만 있으면 컨테이너를 구동시킬 수 있다.


참고 자료1
참고 자료2

profile
Backend Developer

0개의 댓글