[Docker] 도커(Docker)의 이해

hanjuli94·2022년 4월 18일
2

Docker

목록 보기
2/2
post-thumbnail

📢 클라우드 하면 여러가지 키워드들이 떠오를 것이다. 도커, 쿠버네티스, 컨테이너, 가상화, DevOps, CI/CD 등.. 그 중 한번쯤은 들어 봤을 만한 컨테이너 가상화 기술 중 도커에 대해서 알아보자. 상세한 내용은 직접 책이나 인터넷을 통해 여러가지 자료를 찾아가보면서 이해하는 방법을 추천한다.

Q1. 도대체 도커는 무엇인가?

도커는 컨테이너 기반의 오픈소스 가상화 플랫폼이다. 가상머신을 만들때 .iso 파일로 최초 생성을 하듯, 컨테이너를 만들때 도커 이미지를 가지고 도커 컨테이너라는 것을 생성을 한다. 컨테이너는 웹서버가 될수도, 데이터베이스가 될수도, 로깅 시스템이 될수도, 와스 서버가 될수도 있다. 그만큼 다양한 도커 이미지를 가지고 여러개의 Scale-Out하게 다수의 애플리케이션 및 서비스를 제공 할 수 있는 소프트웨어 플랫폼이다. 기본적으로 인프라를 접해본 분들의 경우 아래의 그림을 통해 한번에 이해 할 수 있을 것이다. 아래 그림은 Docker 공식 홈페이지에서 가져왔다.

  • <왼쪽> 은 컨테이너로 생성한 App A~F를 Docker Engine 위에서 직접 실행하여 서비스 제공
  • 오른쪽은 VM으로 생성한 공간에 App A~F를 실행하여 가상화 하이퍼바이저 위에 띄워 서비스 제공

결론적으로, 도커란 데몬 형태의 엔진이 어플리케이션이나 서비스를 도커 이미지 형태로 템플릿화 하여 도커 컨테이너로 실행한 실체를 만들어 서비스를 제공하는 기술을 통틀어 도커라고 부른다.

Q2. 도커는 어떻게 등장했나?

Docker는 2013년 3월 산타클라라에서 열린 Pycon에서 dotCloud 라는 PaaS 기업의 창업자인 Solomon Hykes 가 The future of Linux Ciontainers(리눅스 컨테이너의 미래) 세션을 통해 발표했다.

아래 표를 보면 Docker 이전에도 LXC라는 리눅스 운영 시스템 레벨 가상화 방법이 있었다. 당연히 초기 도커도 LXC 근간으로 만들어졌지만 현재는 LXC를 포함한 여러 인터페이스를 통해 리눅스 커널의 가상화 기능에 접근한다.

  • 컨테이너의 역사

  • 도커 엔진의 리눅스 커널 접근 방법

Q3. 도커는 왜 필요한 것인가?

  • 가상머신(VM)과 가장 큰 차이는 확장 방식이다. 가상머신보다 가벼운 용량으로 별도의 인프라 자원 추가 없이 Scale-Out 방식으로 빠르게 확장 및 구동이 가능하다. 따라서 사본 형태로 컨테이너를 실행하여 서비스를 제공하니 클라우드 비용이 절감되는 효과도 가지고 온다.

  • 가벼운 용량은 DevOps 측면에서도 도움을 준다. 지속적 통합 및 지속적 딜리버리(CI/CD) 파이프라인을 적용하기 쉽다.

  • 컨테이너는 다수개의 이미지 Layer로 구성되어있으며, 예를들어 OS 레이어에 대한 환경 설정이나 WAS 설정 값에 대한 환경 변수들을 Dockfile에 작성하면 컨테이너 실행 시 동일한 환경 설정값을 가지고 컨테이너를 실행 할 수 있으므로 개발 환경 및 실행 환경의 표준화를 이룰 수 있다.

  • 다만, 컨테이너가 늘어나는 경우 네트워크, 보안, 서비스 관리, 컨테이너 오케스트레이션에 대한 필요성이 높아져 쿠버네티스 같은 관리 시스템을 추가하거나 PaaS 플랫폼을 도입하여 사용하기도 한다.

  • 이외에도 도커 뿐만 아니라 컨테이너의 장점이 있으니, 신규 서비스 구축의 경우 도커 기반 프로젝트로 진행하는 것도 나쁘지 않을 것 같다.

Q4. 앞으로의 도커는?

  • 여러 컨테이너 기반의 솔루션이 생겨나고 관심이 많아지면서, 주요 IT 벤더들과 클라우드 공급자들은 컨테이너 기반의 솔루션을 발표했다. 도커가 컨테이너 표준 역할을 했지만 코어OS(CoreOS)는 도커와는 다른 규격으로 표준화를 추진하려 했습니다.

  • 이러한 문제를 해결하기 위해 2015년 6월 도커, 코어OS, AWS, 구글, 마이크로소프트, IBM 등 주요 플랫폼 벤더들은 애플리케이션의 이식성(Portability) 관점에서 컨테이너 포맷과 런타임에 대한 개방형 업계 표준을 만들기 위해 OCI(Open Container Initiative)를 구성했다.

OCI(Open Container Initiative)

📌 특정한 client나 orchestration stack과 같은 상위 계층의 구조에 대해 구속되지 않으며
📌 특정한 상업적 벤더나 프로젝트에 대해서 강하게 묶여있지(associated) 않으며
📌 다양하고 폭넓은 OS, 하드웨어, CPU 아키텍쳐, 공공 클라우드 등등에 대해 호환성이 있다.


개인적인 느낌 💭

도커는 특정 기술 스택이 아닌 전반적인 컨테이너 기술을 아우르는 말이라고 이해하면 될 것 같다. 쿠버네티스에서 도커 지원이 중단되는 내용도 사실 자세히 들여다보면 큰 문제가 아니다. 도커 런타임이 표준을 준수하지 않았으므로 CRI 표준을 준수하는 다른 런타임으로 대체하여 사용하면 되고 기존 도커 이미지는 계속 지원한다는 내용이 쿠버네티스 공식 블로그에 기재되어 있다. 우리가 새로운 언어가 나온다고 해서 기존에 배우던 언어를 버리고 새로운 언어를 배울 필요가 없듯이 도커도 마찬가지인 것 같다.


Related Post/References
🔗 docker.com
🔗 Docker (software) - Wikipedia
🔗 docker-container-lifecycle-management
🔗 https://ooeunz.tistory.com/61
🔗 https://itstarter.tistory.com/653
🔗 https://wooody92.github.io/docker/Docker-%EB%8F%84%EC%BB%A4%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80/
🔗 https://www.samsungsds.com/kr/insights/docker.html
📕 용찬호. (2020). 시작하세요! 도커/쿠버네티스 친절한 설명으로 쉽게 이해하는 컨테이너 관리. 위키북스. wikibook.co.kr

0개의 댓글