티스토리 뷰
안녕하세요 오늘 포스팅에 앞서 도커 공식 서비스의 메인 로고를 보여드렸습니다.
마치 고래같은 범선(이미고래잖아..)이 컨테이너를 운반하는 모습처럼 생겼네요. ( 내 최애...귀염귀염 )
우선, 위키백과에 나온 도커의 기본적인 설명을 드리며 진행하도록 하겠습니다.
도커(Docker)란?
도커(Docker)는 리눅스의 응용 프로그램들을 소프트웨어 컨테이너 안에 배치시키는 일을 자동화하는 오픈 소스 프로젝트이다.
*위키백과 참조
무슨 말인지 전혀 이해가 안되실겁니다.
아주 간단히 설명을 해보도록 하겠습니다.
우리가 JSP를 이용하여 어떠한 웹 사이트를 만들었습니다. 웹 사이트를 완성 후 배포를 해야하는 일이 남았는데, 이 때 우리는 AWS 같은 웹 서비스를 이용하여 배포하게 됩니다. 하지만 이런 호스팅 서비스를 이용하면 특정한 서버 환경에 우리가 만든 웹을 맞춰서 배포를 해야하기 때문에 그에 따른 설정을 맞춰주어야 합니다.
그런데 이러한 작업은 매번 다른 웹 서비스를 이용할 때마다 그에 따른 설정을 해야하고, 서버마다 각각의 설정을 해야하기 때문에 많은 자원 낭비가 있을 수 있죠.
이런 다른 환경에서의 작업을 규격화해서 정의하는 것이 바로 도커라는 녀석이죠.
이번 포스팅에서는 도커를 설치하기에 앞서, 도커에 대한 전반적인 이해를 돕는 포스팅을 하도록 하겠습니다.
사실 도커를 초보자의 입장에서 이해할 필요는 없습니다. 아직 웹 개발 단계에 있다면(나도 그렇지만) 전반적인 웹 개발에 대해 이해를 하고 나서 진행하셔도 됩니다.
배포할 사이트가 있어야 배포를 배우는 것이 의미가 있겠죠?
도커(Docker) 의 역사
도커는 2013년 PyCon에서 창업자인 Solomon Hykes(이름도 솔로몬ㅎㄷㄷ..)이 The future of Linux Containers(리눅스 컨테이너의 미래) 라는 제목으로 시작을 알렸습니다.
영상에 대해 간략히 이야기 하자면, 도커의 발표는 'Hello World' 라는 문장을 띄우는 것을 시작으로 합니다.
고작 'Hello World' 를 띄웠을 뿐인데 박수라니 ?
이 영상은 단순히 'Hello World'를 띄운 것이 아닙니다. 몇 초 만에 별도의 운영체제 위에 'Hello World' 를 띄운 것이기 때문이죠
별도의 운영체제를 생성하려면 가상머신(VM)을 사용해야 했던 것과는 다르게, 몇 초만에 새로운 운영체제에 문장을 띄운 것이 주목할 점이였던 것입니다.
도커(Docker) 는 컨테이너 기반의 오픈소스 가상화 플랫폼
도커의 상징은 바로 컨테이너 입니다.
컨테이너 라고 하면 네모난 화물박스가 떠오르실 겁니다.
컨테이너의 탄생 이전 이야기를 해보자면, 규격화 되지 않은 물건들을 운송하기 위해 다양한 장비들이 필요하고 노동이 필요했습니다.
결국 물건 값보다 배송비가 더 나오는 사태가 벌어지는 것이죠 ( 배보다 배꼽이 더 큰 )
또한 효율도 좋지 않겠죠. 공간의 활용성은 떨어졌고, 운송중에 파손, 분실 또한 많았을 것입니다.
하지만 컨테이너의 등장 이후로 규격화된 상자안에 물건을 담아 배송하기 시작하면서 부터 대량의 물건을 안전하고 효율적으로 배송할 수 있게 되었습니다. ( 그림처럼 저만큼 높게 쌓을 수 있는 것 또한 규격화된 컨테이너를 사용했기 때문이죠 )
또한 컨테이너에 담겨져 있는 물건을 옮길 장비와 노동만 필요하게 됨으로 인해, 운송비의 절감으로 이어지게 됩니다. ( 그림처럼 단순히 컨테이너를 옮길 크레인만 있으면 되기 때문에 )
도커(Docker)에서 말하는 컨테이너 또한 이와 같은 맥락입니다.
다양한 프로그램, 다양한 운영체제 및 실행환경 등을 컨테이너로 추상화하여 동일한 인터페이스를 제공하여, 배포 및 관리를 단순화 시켜주는 것입니다.
많은 기업들에게 사랑받고 있는 도커!
특히 구글은 거의 모든 서비스가 컨테이너로 움직이고 있으며, 마이크로소프트 또한 도커를 엄청나게 사랑하고 있죠
VM(Virtual Machine)과 컨테이너(Container)의 차이
앞서 설명했던 컨테이너의 등장 이전에 사용하던 VM과는 어떤 차이가 있는 것이고, 왜 도커에 열광할까요 ?
우리가 다른 운영체제를 사용하기 위해서 VM(Virtual Machine)을 한번쯤은 사용해보신 경험이 있으실 겁니다.
(사용해보신 경험이 없으셔도 무관합니다.)
우리가 기존 사용하고 있는 운영체제( Window를 사용한다고 가정 ) 이외에 다른 운영체제( Linux 라고 가정 )를 사용하고 싶을 때 주로 VM을 사용해 OS 전체를 가상화 하는 방식으로 사용했습니다.
즉 기존 OS(Window) 와 다른 OS(Linux)는 완전히 독립적으로 존재하는 것이죠. 그런데 다른OS(Linux) 를 사용하기 위해서는 기존 OS(Window)를 이용해야 했기 때문에 속도가 엄청나게 느려지고, 독립적인 OS기 때문에 설치해야할 용량 또한 큽니다.
하지만, 컨테이너(Container)는 VM을 사용하지 않고 도커 엔진(Docker Engine)을 사용하여 동작합니다.
더이상 가상화 하지 않고 개선된 프로세스 격리 방법의 등장이죠.
별도의 OS 사용이 필요하지 않게 되어, 성능적인 개선과 동시에 메모리 용량 또한 작아집니다. ( 운영체제를 통째로 깔아야 하는 가상머신에 비하면 용량이 매우 작아지는 것이죠 )
도커에서 컨테이너와 동시에 중요한 개념이 하나 더 등장하는데 이미지라는 것입니다.
도커엔진 위의 컨테이너에 이미지라는 실행에 필요한 파일과 설정값들을 담아 주는 것이죠.
즉, 이미지는 컨테이너를 실행하기 위한 모든 정보를 가지고 있기 때문에 이것저것 설치할 필요가 없이 새로운 서버가 생기면 미리 만들어 놓은 이미지만을 다운받아 컨테이너를 생성하면 되는 것입니다.
도커(Docker)는 신기술이 아니다.
신기술도 아닌데 왜 열광할까? 라는 생각이 혹시...드시나요 ?
컨테이너라는 기술은 이미 존재했습니다.
대표적인 예가 리눅스 컨테이너(LXC)인데 여러개의 격리된 리눅스 시스템을 동작시키기 위해 사용했던 가상화 기술을 말합니다.
그 외에도 널리 알려지지 않았지만, 많은 컨테이너 기술이 존재 했습니다.
하지만 알려지지 않는데는 이유가 있죠? 복잡하고 어려워서 입니다.
하지만 도커는 기존에 있던 컨테이너라는 기술을 잘 포장하였기 때문에 진입 장벽을 무너뜨린 셈이죠. (포장의 기술)
기존 필요했던 기술을 더욱 사용하기 쉽게 포장했기 때문에 더욱 사랑 받는 이유가 아닐까요 ?
도커(Docker)의 배포
우리가 도커를 이해하려고 하지만, 가장 큰 장점을 알아야 하겠죠?
도커는 변경 불가능한 인프라(Immutable Infrastructure) 입니다.
기본적으로 소프트웨어가 자주 수정된다면 여러가지 오류가 발생할 수 있습니다.
특히 변경에 따른 이력관리도 중요하겠죠 근데 도커는 특이하게도 변경을 못하게 하도록 하는 인프라 의 개념이 있는데, 서버를 구축한 이후 변경이나 업데이트를 할 수 없도록 합니다.
그렇다면 업데이트는 어떻게 ?
도커는 서버를 통째로 바꾸는 개념이라고 생각하시면 이해하기 쉽습니다.
서버를 업데이트 하기 위해서 새로운 도커 이미지 자체를 업테이트해서 컨테이너에 담는 것입니다.
기존 버전은 컨테이너에서 삭제해버리는 것이죠.
우리는 변경하기 위한 이미지만 올려주는 것으로 배포가 끝나버리는 것입니다.
도커(Docker) 는 GO 언어로 만들어졌다.
여담으로, 도커는 Google의 Go 언어로 개발 되었습니다.
Go 언어의 특징은 서버 모듈에서 빠르게 동작한다는 점이 있는데, Go 언어의 대표주자가 도커(Docker) 이기도 합니다.
Go 언어 중 또한가지 유명한 것이 Git 서버죠.
글을 정리하며, 도커(Docker) 를 사용해야 하는 이유는 우리가 다양한 작업환경에서의 배포가 자유로워 질 수 있고, 빠른 배포가 가능해진다는 점입니다.
또한 도커는 오픈소스로 개선이 상당히 빠르기 때문에, 앞으로의 도커 기반의 프로젝트는 더욱 활발해 질 것입니다.
참조 사이트
'도커(Docker)' 카테고리의 다른 글
윈도우10pro(Windows10pro)이하버전에서의 도커 툴 박스 (Docker Toolbox) 설치하기 /윈도우10pro(Windows10pro) 운영체제에서 도커(Docker) 설치하기 (3) | 2020.08.05 |
---|