NEW 기획 디자인 개발 프로덕트 아웃소싱 프리랜싱

개발

도커(Docker)란 무엇이고, 왜 사용하나요?

출처: 도커 로고

혹시 도커(Docker)라는 말을 들어보셨나요? 외국 발음으로는 다커, 한국에서는 도커라고 많이 부르는데요. 한 번쯤은 들어보셨을 수도 있습니다. 도커(Docker)는 2013년 오픈소스로 출시되었습니다. 이후 몇 가지의 불편한 점을 수정하고, 기능들이 추가되면서 엄청난 인기를 끌었습니다. 그리고 현재 백엔드 개발에 있어서 절대 빠뜨릴 수 없는 존재가 되었죠. 그렇다면 도커가 무엇이고, 왜 이렇게까지 인기를 끌게 되었는지 알아보겠습니다. 그런데 도커를 살펴보기 전에 사전 지식이 필요한데요. 먼저 “컨테이너”에 대해 알아야 합니다.

 

 

컨테이너(container)란?

OS는 생각보다 더 다양합니다. 여러분도 잘 알고 계신 Linux, Window, MacOS 등이 있고, Linux에서도 아래 이미지와 같이 너무나도 많은 배포판이 존재합니다. 각 배포판에 따라 Linux 계열도 다른 것이죠. 그래서 운영체제와 배포판 등에 따라 기술 및 정책도 다르며, 이에 따라 명령어도 조금씩 달라집니다.

 

출처: leafcats.com/186

이렇다 보니 새로 만든 애플리케이션을 실제 작업한 노트북에서 테스트 환경이나 실서비스 운영환경으로 옮길 때마다 온갖 이상한 오류를 직면하게 됩니다. 또한 하나의 서버에 여러 개의 애플리케이션을 설치하는 것도 문제였습니다. 서로 사용하는 라이브러리의 버전이 다르거나 한다면 충돌이 발생하는 문제가 생긴 것이죠. 그래서 소프트웨어를 다른 컴퓨팅 환경으로 이동하면서도 안정적으로 실행하는 방법이 없을까?라는 고민이 생겼고, 그렇게 탄생한 기술이 컨테이너입니다.

 

컨테이너는 애플리케이션을 실제 구동 환경으로부터 추상화할 수 있는 논리 패키징 메커니즘을 제공합니다. 즉, 애플리케이션과 애플리케이션이 동작하기 위해 필요한 라이브러리나 모듈 등을 묶어줍니다.

도커 컨테이너

이렇게 묶은 것은 컨테이너라고 부릅니다. 애플리케이션과 애플리케이션을 구동하는 환경을 컨테이너 박스에 넣고 하나로 만든 것이라고 생각하시면 됩니다. 컨테이너를 옮기면 안에 넣었던 소프트웨어들이 모두 함께 움직이기 때문에 하나하나 관리할 필요가 없게 되었습니다.

 

출처: https://www.msystechnologies.com/services/devops/docker-consulting-services

이러한 컨테이너 기술이 있기 전에는 가상 머신(VM) 기술이 있었습니다. VM은 기존 환경 위에 가상화 기술을 이용해 Guest OS를 새로 설치합니다. OS 위에 OS를 설치하는 셈이죠. 여러 OS를 동시에 구동해야 하기 때문에 VM을 이용하기 위해 만드는 시간도 오래 걸리며, 성능도 낮아지게 됩니다. 이에 비해 컨테이너는 OS가 아닌 묶었던 애플리케이션만 관리하며, 필요한 만큼의 OS 자원을 컨테이너에 할당할 수 있습니다. 따라서 성능 저하의 문제가 적어지고, 위에서 말한 문제점인 여러 개의 프로그램을 설치해도 컨테이너끼리 격리된 상황이기 때문에 서로 충돌로 인한 문제가 해결됩니다. 컨테이너를 다른 서버로 옮기면, 옮긴 서버에서 컨테이너 안에 있는 환경 그대로 사용하면 되기 때문에 일관성 있는 환경을 제공해줍니다.

 

예를 들어, 페이스북과 같이 거대한 서비스가 있다고 가정해봅니다. 이런 서비스는 사용자들이 매우 많기 때문에 서버 한 대로는 처리가 불가능합니다. 따라서 여러 서버를 사용해야 하는데요. 서버를 늘릴 때마다 매번 환경을 구축하는 것은 큰 일이지만, 컨테이너를 이용한다면 컨테이너만 복사하면 해당 환경이 구축되기 때문에 관리의 비용이 축소되고, OS 자원도 필요한 만큼만 할당할 수 있습니다. 덕분에 사용자가 많은 시간에는 늘리고, 적은 시간에는 줄일 수 있습니다. 탁월한 비용 절감 효과를 얻게 되는 것입니다.

 

 

그래서 도커란 무엇인가요?

이제 컨테이너에 대해 충분히 알아봤으니 도커를 살펴보겠습니다. 도커는 리눅스의 응용 프로그램들을 소프트웨어 컨테이너 안에 배치시키는 일을 자동화하기 위해 시작된 오픈 소스 프로젝트입니다. 즉, 애플리케이션을 신속하게 구축, 테스트 및 배포할 수 있는 소프트웨어 플랫폼입니다.  컨테이너를 이용해 소프트웨어를 컨테이너라는 표준화된 유닛으로 알아서 패키징 해주며, 환경에 구애받지 않고, 애플리케이션을 신속하게 배포 및 확장할 수 있습니다. 따라서 코드가 문제없이 실행될 것임을 확신할 수 있게 해 주죠. 한마디로 컨테이너들을 쉽게 관리하고, 신속하게 배포 및 확장을 할 수 있게 해주는 것입니다.

 

 

도커 이미지란?

도커에는 컨테이너뿐만 아니라 도커 이미지(Docker Image)라는 또 하나의 중요한 개념이 있습니다. 이미지는 컨테이너를 생성하기 위해 필요한 설계도를 말합니다. 도커는 이미지를 보고 컨테이너를 생성하게 됩니다. 쉽게 설명하면 도커가 찍어놓은(빌드한) 사진(Image)을 인화(실행)하면 컨테이너가 나오는 것입니다. 사진은 여러 번 인화할 수 있고, 똑같은 사진이 인화되는 것처럼 다른 서버에서도 도커가 이미지를 이용해 컨테이너를 만들면 같은 환경을 구축할 수 있는 것이죠.

 

도커 이미지는 도커 파일(Docker File)로 만들 수 있는데요. 도커 파일은 도커가 어떻게 이미지를 만들지 이해하도록 적은 파일입니다. 도커 파일에 사진(Image)을 어떻게 찍을지 적어놓으면 도커가 그것을 읽고, 이미지를 생성하게 됩니다. 이렇게 생성한 이미지를 저장해 놓을 수 있는 공간도 있는데요. 이것을 도커 허브(Docker Hub)라고 합니다. 도커 허브를 이용해 이미지를 공유할 수 있고, 인터넷만 연결되어 있으면 어디에서든 이미지를 다운로드할 수 있게 되었습니다.

텍스트, 시계이(가) 표시된 사진

자동 생성된 설명
출처: https://kbseo.tistory.com/7

위 그림과 같이 도커 파일을 통해 이미지를 생성하면 도커 허브라는 저장소에 업로드하게 됩니다.  그리하여 각 서버에서는 간단하게 이미지를 다운로드하고, 컨테이너를 생성해 서비스를 시작할 수 있습니다.

 

지금까지 도커에 대해 살펴봤습니다. 도커는 클라우드의 성장과 더불어 컨테이너의 시작을 열고, 대중화시킨 주역으로 많은 인기를 끌었습니다. 최근엔 도커와 비슷한 다양한 기술들이 나오고 있는 만큼 앞으로 클라우드의 미래를 더 기대해볼 수 있겠습니다.

댓글 0

최한성

위시켓에서 프로젝트 관련 기능들을 개발하고 있습니다. 더불어 파릇파릇한 대학 신입생입니다 >_<

같은 분야를 다룬 글들을 권해드려요.

요즘 인기있는 이야기들을 권해드려요.

일주일에 한 번!
전문가들의 IT 이야기를 전달해드려요.

[구독하기] 버튼을 누르면 개인정보 처리방침에 동의됩니다.

일주일에 한 번! 전문가들의 요즘IT 이야기를 전달해드려요.

[구독하기] 버튼을 누르면 개인정보 처리방침에 동의됩니다.