Ops/Docker

도커란? 도커가 뭔데 ! (1)

장그래 2021. 7. 27. 14:39
반응형

 

도커를 공부하면서,

서버 개발자를 꿈꾸면서 도커와 쿠버네티스를 배워야 된다는 막연한 생각뿐이었고, 학부 시절에는 단순 내가 만든 nodejs 파일을 이미지로 변환해보는 게 전부였다. 하지만 구글링을 통해 코드를 따라 해서 이미지를 만들어봤을 뿐 도커에 대한 이해는 전혀 없었다.    

도커를 왜 쓰는지. 도커의 동작 원리가 무엇인지 이해하지 못한다면 도커를 제대로 활용할 수 없다고 생각해. 도커에 대해 정리해보고자 한다.

도커란?

먼저, 도커를 공부하기 전에 도커의 정의를 살펴보자. 

Docker(도커)는 애플리케이션을 신속하게 구축, 테스트 및 배포할 수 있는 소프트웨어 플랫폼입니다. 소프트웨어를 컨테이너라는 표준화된 유닛으로 패키징하며, 이 컨테이너에는 라이브러리, 시스템 도구, 코드, 런타임 등 소프트웨어를 실행하는 데 필요한 모든 것이 포함되어 있습니다. - AWS

도커(Docker)는 리눅스의 응용 프로그램들을 프로세스 격리 기술들을 사용해 컨테이너로 실행하고 관리하는 오픈 소스 프로젝트이다. - 위키백과

Docker컨테이너 이미지는 코드, 런타임, 시스템 도구, 시스템 라이브러리 및 설정과 같이 애플리케이션을 실행하는 데 필요한 모든 것을 포함하는 가벼운 독립 실행형 실행 소프트웨어 패키지입니다. - Docker.com

Docker는 IT 소프트웨어인 "Docker”는 Linux® 컨테이너를 만들고 사용할 수 있도록 하는 컨테이너화 기술입니다. - Red Hat

다른 사이트에서 모두 조금씩 다르게 도커를 정의하고 있지만, 공통적으로 컨테이너라는 말이 공통적으로 포함되어 있다. 뭔가 컨테이너를 이해하게 된다면...! 도커를 알 수 있을 것 같다.. 그렇다면 컨테이너란 무엇일까? 

컨테이너란?

컨테이너라고 하면 화물을 옮기는 실제 컨테이너가 떠올랐다면 50% 컨테이너를 이해했다고 볼 수 있다. 컨테이너의 정의를 한 번 살펴보자.

컨테이너라고 하는 표준 소프트웨어 패키지는 애플리케이션의 코드를 관련 구성 파일, 라이브러리 및 앱 실행에 필요한 종속성과 함께 번들로 제공합니다. - Microsoft Azure

컨테이너는 애플리케이션을 실제 구동 환경으로부터 추상화할 수 있는 논리 패키징 메커니즘을 제공합니다.
- Google GCP

컨테이너는 애플리케이션의 코드, 구성 및 종속성을 하나의 객체로 패키징하는 표준화된 방식을 제공합니다.
- AWS

감이 좀 잡히는가 ? 말 그대로 애플리케이션 코드와 관련 라이브러리, 구성 파일 등 다양한 것들을 모두 컨테이너로 패키징 해서 관리하고 배포하는 것이다. 예를 들어 내가 nodejs로 개발한 애플리케이션을 친구한테 선물해주고 싶다고 하자. 선물을 해주기 위해서는 선물 상자에 nodejs로 작성한 코드도 넣어야 하고, 개발에 사용한 각종 라이브러리 등 다양한 것들을 넣어야 한다. 이러한 과정을 컨테이너화라고 한다.

그렇다면 컨테이너는 왜 사용하는 것일까? "한 환경에서 다른 환경으로 이동될 때 애플리케이션이 올바르게 실행되지 못하는 문제" 를 해결할 수 있기 때문이다내가 로컬 window에서 개발한 애플리케이션을 macOs를 사용하는 친구에게 그대로 주게 된다면 작동하지 않을 확률이 정말 높다. 하지만 코드 및 구성을 컨테이너 화해서 친구에게 주게 된다면 그 애플리케이션은 동작할 것이다. 이것이 컨테이너의 장점이다. 

 [+ 심화 버전 (가상화 vs 컨테이너)를 알고 싶으시면 링크를 참조해주세요.]
GCP에서는 클라우드의 장점을 아래와 같이 정리했다. 한 번 읽어보자

일관성 있는 환경
개발자는 컨테이너를 이용해, 다른 애플리케이션과 분리된 예측 가능한 환경을 생성할 수 있습니다. 컨테이너는 애플리케이션에 필요한 소프트웨어 종속 항목(프로그래밍 언어 런타임 및 기타 소프트웨어 라이브러리의 특정 버전 등)도 포함할 수 있습니다. 개발자의 관점에서 이 모든 요소는 애플리케이션이 배포되는 최종 위치에 관계없이 항상 일관성이 있습니다. 그 결과 자연히 생산성이 향상될 수밖에 없습니다. 개발자와 IT 운영팀이 버그를 잡고 환경 차이를 진단하던 시간을 줄이고 사용자에게 신규 기능을 제공하는 데 집중할 수 있기 때문입니다. 또한 개발자가 개발 및 테스트 환경에서 세운 가정이 프로덕션 환경에서 그대로 실현될 것이기 때문에 버그 수 자체도 감소합니다.

폭넓은 구동 환경
컨테이너는 Linux, Windows, Mac 운영체제, 가상 머신, 베어메탈, 개발자의 컴퓨터, 데이터 센터, 온프레미스 환경, 퍼블릭 클라우드 등 사실상 어느 환경에서나 구동되므로 개발 및 배포가 크게 쉬워집니다. 컨테이너용 Docker 이미지 형식은 워낙 널리 사용되기 때문에 이동성도 매우 뛰어납니다. 소프트웨어 구동 환경이 무엇이든 컨테이너를 사용할 수 있습니다.

격리
컨테이너는 CPU, 메모리, 스토리지, 네트워크 리소스를 OS 수준에서 가상화하여 개발자에게 기타 애플리케이션으로부터 논리적으로 격리된 OS 샌드박스 환경을 제공합니다

 

다시 한 번 도커란?

우리는 컨테이너를 공부하고 왔다. 도커는 이러한 컨테이너 기술을 이용한 플랫폼이다. 그래서 도커는 한 줄로 "컨테이너 기반의 오픈소스 가상화 플랫폼"라고 정의할 수 있다. 즉 위에서 말한 컨테이너 기술을 사용한 오픈소스 플랫폼인 것이다. 

마무리

오늘 우리는 도커가 컨테이너 기술을 사용한다는 것을 알 수 있었고, 누가 도커가 뭐야 ? 라고 물어보면 "컨테이너 기반의 오픈소스 가상화 플랫폼"이라고 대답할 수준까지 올라왔다. 다음에는 컨테이너 기술에 대해 더욱 자세히 알아보자.

■ 참고 자료

  • aws 
  • google gcp
  • azure
  • red hat

잘못된 정보가 있다면 댓글로 남겨주세요 ! 

반응형