도커(Docker)로 자신만의 공구함을 만들어보자
상태바
도커(Docker)로 자신만의 공구함을 만들어보자
  • 허성욱 컨설턴트
  • 승인 2018.09.11 01:51
  • 조회수 4427
  • 댓글 0
이 콘텐츠를 공유합니다

당신이 에어컨 설치 기사이고, 어느 숲 속에 있는 외딴집에 설치 의뢰를 받아 에어컨 설치를 하러 가는 상황을 상상해보자. 그렇다면 당신은 설치하는 데에 필요한 도구들이 들어있는 공구함을 ‘당연히’ 들고 갈 것이다. 그 상자는 내가 오랫동안 써 왔고, 사용하는 도구 종류부터 시작해서 배치 등이 모두 내가 쓰기 편하게 맞춰져 있기 때문이다. 숲 속이라, 도구를 새로 구매하기에도 참 난감하다. 이처럼 도구들을 미리 준비해서 목적에 지장이 없는 환경을 만드는 것은 기본적으로 중요하다.

분석 및 개발을 위한 다재다능 공구함 ‘도커’

데이터 분석이나 애플리케이션 개발을 할 때도 마찬가지이다. 환경 조성이 잘 이루어지지 않으면 중간중간에 걸림돌이 생긴다. 데이터 분석을 예로 들면, 코드를 실행하려고 해도 설치된 프로그램이 맞지 않는다면 실행조차 되지 않고 같은 프로그램이더라도 안에 있는 패키지 버전이 맞지 않으면 오류가 날 수 있다.


또한 내게 맞는 환경을 조성하려고 프로그램들을 다운로드 받으려고 해도 인터넷이 되지 않는 환경이면 불가능하다. 따라서 우리는 분석이나 개발에 필요한 도구들이 들어있는 ‘공구함’을 미리 준비할 필요가 있다. 이런 공구함을 만드는 방법인 ‘도커(Docker)’를 소개한다.
 

투이컨설팅_도커_1.jpg
[그림 1] 도커 로고 (출처: https://www.teepublic.com/tapestry/2490921-docker-logo)

먼저 도커 로고에 함축된 의미를 살펴보자. 고래 위에 컨테이너(Container)들이 다수 실려있다. 컨테이너는 그 안에 옷이나 전자제품 등 다양한 물건을 넣을 수 있고, 그 자체로 규격화되어 다양한 운송수단으로 옮길 수 있다.

윈도우나 리눅스 같은 운영체제, MySQL이나 PostgreSQL 같은 DB, R이나 Python 같은 분석 프로그램, Tensorflow나 H2O 같은 분석 프레임워크 등 분석을 하는 데는 많은 요소들이 필요하다. 이런 요소들 각각을 ‘컨테이너’라 볼 수도 있고, 요소들을 한 데 묶은 하나의 ‘컨테이너’로 볼 수도 있다. 공구함 안에 드라이버 하나만 있을 수도 있고, 여러 도구들이 같이 있을 수 있는 것과 같은 이치이다.


이런 컨테이너를 실행하는 데에 필요한 파일과 설정 값 등을 포함하고 있는 것을 도커에서는 ‘이미지(Image)’라고 부른다. 이 이미지는 다른 곳으로 얼마든지 운반할 수 있다. 개인 PC나 내부 서버는 물론이고, AWS, Azure, IBM 클라우드, Google 클라우드 등으로 옮길 수 있고 간편하게 실행할 수 있다. 심지어 인터넷 환경이 되지 않는 곳에서도 이미지를 실행해 다양한 분석을 시도할 수 있으니 얼마나 매력적인 도구인가?

도커의 3가지 장점: 가벼운 가상화, 애자일한 구조, 이미지 파일 관리

 

1. 가벼운 가상화

 

투이컨설팅_도커_2.jpg
[그림 2] VirtualBox(왼쪽)와 도커 비교 (출처: https://www.jpkeisala.com)

기존에는 주로 운영체제 자체를 가상화해서 사용했다. 많은 사람들에게 익숙한 VirtualBox 같은 가상머신은 우리 컴퓨터 운영체제 위에 다른 운영체제 전체를 가상화한다. 쉽게 말해서, 우리 노트북 위에 다른 사람의 노트북을 추가로 돌린다고 생각하면 된다.


이 방식은 사용 방법은 간단하지만, 무겁고 느리다. 노트북 하나도 자원을 잡아먹는데, 하나의 자원으로 2대의 노트북을 돌린다고 생각해보면 효율이 떨어진다는 것을 쉽게 알 수 있을 것이다. 반면 도커는 애플리케이션을 실행시키기 위한 파일만 돌리기 때문에 훨씬 효율적이다. CPU나 메모리를 프로세스 실행에 필요한 만큼만 사용하기 때문이다.


실행 속도의 차이도 크게 난다. VirtualBox로 가상머신을 돌려본 사람은 알겠지만 실행하는 데에 수십 초, 많게는 몇 분이 걸릴 수도 있다. 하지만 도커는 5초 안에 실행된다.

2. 애자일(Agile)한 구조

우리는 공구함에 도구를 넣을 때 각 도구 목적에 맞게 칸 별로 나누어 놓는다. 그렇게 하면 도구를 꺼내기도 쉽고 기존의 도구를 찾아서 버리고 바꾸기도 쉽기 때문이다. 난잡하게 쌓아 놓은 상태에서 한 도구를 찾아 다른 도구로 바꾸는 일은 다소 힘들 것이다.


애플리케이션도 마찬가지라고 보면 된다. 애플리케이션을 배포한 상태에서 일부분을 수정하고 재배포하는 일은 생각보다 복잡하다. 애플리케이션 안에 수행되는 여러 일을 복합적으로 볼 수 있어야 하고 의존성 등을 고려해야 한다.

하지만 도커를 이용하면 쉽고 빠르게 애플리케이션을 재배포할 수 있다. 애플리케이션은 수십, 수백 조각의 작은 애플리케이션으로 나눌 수 있다. 이런 작은 애플리케이션들을 각각 독립된 컨테이너라고 생각해보자. 그렇다면 우리는 단지 수정하고자 하는 작은 애플리케이션만 수정하고 다시 배포하는 것으로 전체 애플리케이션을 재배포할 수 있다.

3. 도커 허브(Docker hub)로 이미지 파일 관리
 

투이컨설팅_도커_3.jpg
[그림 3] 도커 허브 (출처: Medium – ‘Creating the first Docker Image and Pushing it to Docker Hub’)

여러 컨테이너를 묶은 이미지의 용량은 수 GB가 넘는 경우가 흔하다. 드라이버, 나사, 전동 드릴 등 도구 하나하나는 가볍지만 그것들을 한 데 모아놓은 공구함은 꽤 묵직한 경우가 많은 것과 동일한 이치이다.


그런 무거운 공구함은 들고 다니는 것보다 자동차나 비행기 같은 운송수단에 실어 옮기면 매우 간편하다. 마찬가지로, 수 GB가 넘는 이미지를 USB나 CD 등에 담아서 다니는 것 보다 도커 허브에 올린다면 더 이상 들고 다닐 필요가 없어진다.

올린 이미지는 어디에서든 받을 수 있다. 또한 다른 사람들이 만든 이미지를 받을 수도 있다. 이미 많은 사람들이 여러 유용한 기능을 수행할 수 있는 이미지를 많이 올려 놓았고, 우리는 그것들을 쉽게 받을 수 있다. 유명한 이미지는 무려 9억 7400만 번이나 받아진 것도 있다. 받은 이미지는 내 입맛에 맞게 커스터마이징도 가능하다. 가장 중요한 건 이 모든 것들이 무료다.


이런 장점들 덕분에 많은 기업들이 도커를 실제 업무에서 활용하고 있다.

도커 활용사례: 페이팔, 비자

페이팔(PayPal)은 전 세계 온라인 지불시스템을 운영하는 회사이다. 이 회사는 700개가 넘는 애플리케이션을 컨테이너로 옮겨서 현재 20만개 이상의 컨테이너를 운영 중이다. 도커를 사용하면서 개발하고 테스트하고 배포하는 데 드는 비용을 50% 이상 절감 했다고 한다.


페이팔 클라우드 엔지니어인 Meghdoot Bhattacharya는 “페이팔은 지난 15년 동안 이용했던 가치 있는 도구를 버리고 도커를 이용해 클라우드 전반에 걸쳐 일관된 모델을 운영하고 있다.”고 말했다.


하루에 수백만 건의 거래를 처리하는 비자(VISA)는 도커를 사용하면서 기존의 서비스를 컨테이너에 잘게 나누어서 관리한다. 이런 관리 시스템으로 확장성이 10배 이상 증가했다고 한다. 도커는 비자 개발자들에게 언제, 어디서나 개발 서버에 접근할 수 있고 서버에서 개발된 애플리케이션을 사용자들에게 몇 초 만에 배포할 수 있게 해준다.
 

투이컨설팅_도커_4.jpg
[그림 4] 도커 프로세스 (출처: Pinterest – ‘Docker on Ubuntu on Cloud Server to Manage Containers’)

마지막으로 도커의 전반적인 프로세스가 그려진 위 그림을 이해해보자. 그림에 적혀있는 용어들을 파란색으로 표기해 이해를 돕겠다. 우리가 원하는 프로세스가 적혀있는 도커파일(Dockerfile)로 이미지(Images)를 빌드(build)한다. 이 빌드된 이미지를 실행(start)해 컨테이너를 띄운다. 이 컨테이너는 얼마든지 잠시 멈췄다가(stop) 다시 재실행(restart)할 수 있다.


띄운 컨테이너에서 변경사항을 저장하려면 커밋(commit)을 해서 다시 이미지를 만든다. 이 이미지에는 별명(tag)도 붙일 수 있다. 또한 이미지를 옮기거나 백업하고 싶을 때는 저장(save)할 수 있고, 저장된 파일만 있으면 어디서든지 불러올(load) 수 있다.


하지만 파일을 USB 등에 들고 다니기가 번거로울 때는 Docker Hub(Registry)에 밀어(push) 넣고, 다른 공간(서버, 클라우드, …)에서 당겨올(pull) 수 있다.


누구나 도커를 이용해 자신만의 공구함을 만들 수 있지 않겠는가?

- 끝 -

댓글삭제
삭제한 댓글은 다시 복구할 수 없습니다.
그래도 삭제하시겠습니까?
댓글 0
댓글쓰기
계정을 선택하시면 로그인·계정인증을 통해
댓글을 남기실 수 있습니다.