Docker

도커(Docker)란 무엇인가

Debin 2022. 8. 12.
반응형

천천히 도커에 대해 학습해보려고 합니다. 바로 시작하겠습니다.

도커(Docker)란?

도커를 정의한 다양한 자료들은 아래와 같이 얘기한다.

 

  • 데이터 또는 프로그램을 격리시키는 기능을 제공하는 소프트웨어다.
  • 도커는 컨테이너 기반의 오픈소스 가상화 플랫폼입니다.
  • 어플리케이션을 패키징할 수 있는 도구.
  • 도커는 다양한 프로그램과 데이터를 각각 독립된 환경에 격리하는 기능을 제공한다. 운영체제(비슷한 것)를 통째로 격리하는 기능이다.
  • 도커는 주로 서버에 사용된다.

필자가 정리한 도커는 컨테이너를 활용해 애플리케이션을 독립된 환경에 격리해서 운영할 수 있는 기술이라고 정의했다.

컨테이너

먼저 위에서 언급한 컨테이너에 대해 알아보자. 컨테이너란 무엇일까?

 

  • 컨테이너란 컨테이너 엔진위에서 동작하며 우리의 애플리케이션을 고립킨 환경에서 동작할 수 있게 해주는 기술이다.
  • 컨테이너란, 우리가 구동하려는 애플리케이션을 실행할 수 있는 환경까지 감싸서, 어디서든 쉽게 실행할 수 있도록 해 주는 기술이다.
  • 컨테이너는 격리된 공간에서 프로세스가 동작하는 기술이다.

도커는 바로 컨테이너를 다루는 기능을 제공하는 소프트웨어다.

도커를 사용하려면 도커 소프트웨어의 본체인 도커 엔진을 설치해야 한다.

도커 엔진을 사용해 컨테이너를 생성하고 구동시킬 수 있다.

컨테이너를 위한 이미지

도커 엔진이 있어야 컨테이너를 만들 수 있다. 하지만 더 필요한 것이 있다. 그것은 바로 이미지다.

이미지는 컨테이너 실행에 필요한 파일과 설정값등을 포함하고 있는 것으로 상태값을 가지지 않고 변하지 않는다.

컨테이너는 이미지를 실행한 상태라고 볼 수 있고 추가되거나 변하는 값은 컨테이너에 저장된다.

같은 이미지에서 여러개의 컨테이너를 생성할 수 있고 컨테이너의 상태가 바뀌거나 컨테이너가 삭제되더라도 이미지는 변하지 않고 그대로 남는다. 이미지는 컨테이너의 빵틀과 같은 역할이다.

이미지는 동류가 아주 많으며 MySQL 컨테이너를 만드려면 MySQL 이미지가 필요하고,

아파치 컨테이너를 만드려면 아파치 이미지가 필요하다.

그럼 당연히 컨테이너는 여러 개를 만들 수 있고 용량이 허락하는 한 하나의 도커에서 여러 개를 만들 수 있다.

도커와 리눅스

윈도우나 맥에서도 도커를 구동할 수는 있지만 이 경우 내부적으로 리눅스가 사용된다. 즉 도커는 리눅스 OS가 필요하다.

또, 컨테이너에서 동작시킬 프로그램도 리눅스용 프로그램이다. 도커는 리눅스 OS에서 사용하는 것을 전제로 만들어졌기 때문이다.

그럼 여기서 질문을 하나 던져보겠다. 프로그램을 독립된 환경에 격리해야 하는 이유는 무엇일까??

대부분의 프로그램은 어떤 실행 환경과 다양한 라이브러리를 이용해 동작한다.

즉 소프트웨어는 단일 프로그램이 아니라 다양한 프로그램으로 구성되는 것이다.

또한 다른 프로그램과 특정한 디렉터리를 공유하거나 같은 경로에 설정 정보를 저장하는 경우도 있다.

 

그러므로 프로그램 하나를 업데이트하면 다른 프로그램에도 영향을 미치게 된다.

예를 들어 필자가 만든 웹 애플리케이션 A와 B가 MySQL 5.xx 버전하고만 호환이 된다고 생각해보자.

그런데 시스템 B를 발전시키면서 우리 MySQL 소프트웨어를 8.xx 버전으로 올린 것이다.

이러면 웹 애플리케이션 A는 동작하지 않게 된다. 공유하는 소프트웨어로 인해 문제가 발생한 것이다.

 

이런 문제가 꼭 업데이트에서만 생기는 것은 아니라고 한다.

보통 설계할 때는 문제가 없던 프로그램끼리도 실제로 설치해보면 오류를 일으키는 경우가 있다 하는데, 

이러한 문제의 원인은 보통 프로그램의 공유간에 있다고 한다. 디렉터리와 설정 파일을 공유하면서도 충분히 문제가 발생할 수 있다.

 

프로그램도 한 서버에서 함께 지내면 고려할 것이 많아지는 것이다. 

이렇게 신경 쓸 일을 줄이기 위해 도커(컨테이너 기술)을 사용하는 것이다.

도커를 사용해 웹 애플리케이션 A의 컨테이너에서는 MySQL 5.XX 버전을 사용하고,

웹 애플리케이션 B의 컨테이너에서는 MySQL 8.XX 버전을 사용하면 된다.

 

도커를 사용해 한 서버에서 여러 격리된 컨테이너를 만들어 위에서 언급한 문제를 해결했다.

이제 컨테이너를 따로 따로 관리하면 된다. 문제 해결!

 도커와 서버

일반적으로 한 대의 서버 컴퓨터에는 웹 서버를 한 벌 밖에 실행하지 못한다.

그러나 컨테이너 기술을 활용하면 하나의 컴퓨터에서도 여러 개의 웹 서버를 올릴 수 있다.

또한 물리 서버 한 대에 여러 개의 웹 서버를 띄우면서 물리 서버 수를 줄일 수 있다는 장점도 있다. (비용 절감 굿)

 

도커의 개발 측면에서의 이점은 개발환경을 갖추거나 운영 환경으로 쉽게 넘어갈 수 있다는 점 등을 들 수 있다.

이러한 이점은 컨테이너가 그저 격리된 환경이 아니라 쉽게 옮길 수 있다는 특성에서 비롯된다.

 

컨테이너는 굉장히 자유롭게 옮길 수 있다.

엄밀히 말하면 컨테이너의 정보를 밖으로 보내고, 다른 도커 엔진에서 그 정보를 복원하는 것이다.

즉 A 도커 엔진에서 B 도커 엔진으로 컨테이너가 이동하는 것이다. 이로 인해 다수의 사람들과 개발 환경 공유가 편해진다.

도커를 사용해 물리적 환경의 차이와 서버 구성의 차이를 무시할 수 있으므로

운영 서버와 개발 서버의 환경 차이로 인한 문제를 원천적으로 방지할 수 있다.

도커 VS 가상화 기술(VMware)

도커 엔진 계층을 안그렸지만 이런 느낌..

하이퍼바이저는 가상 머신(Virtual Machine, VM)을 생성하고 구동하는 소프트웨어다. 

가상화 기술은 가상의 물리 서버를 만드는 것이다. 따라서 메모리, CPU 같은 부품을 소프트웨어로 구현하는 것이다.

또한 운영체제도 당연히 설치해야 하고 다양한 운영체제를 설치할 수 있다. (운영체제를 설치해야하므로 무겁다)

이 말은 환경별로 다른 운영체제가 동작할 수 있으므로 가상 환경을 위한 오버헤드가 발생할 수 있다.

 

컨테이너는 가상화 기술과 달리 운영체제를 설치하지 않아도 된다. 더 가볍다는 뜻이다.

도커는 리눅스 가 동작하는 것처럼 보이지만 실제 리눅스가 동작하는 것은 아니다.

운영체제의 기능 중 일부를 호스트 역할을 하는 물리 서버에 맡겨 부담을 덜었다.

 

이상으로 포스팅을 마칩니다. 감사합니다.

 

참고 자료

https://www.samsungsds.com/kr/insights/220222_kubernetes1.html?referrer=https://www.google.com 

https://subicura.com/2017/01/19/docker-guide-for-beginners-1.html

https://www.youtube.com/watch?v=LXJhA3VWXFA&t=431s

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

반응형

댓글