Docker는 파이썬같은 프로그래밍 언어나 웹 같은 프로토콜이 아닌, 카톡과 같은 도구이다.
오락기에서 할 수 있는 고전 게임이나 스마트폰 게임을 PC에서 구동하는 것처럼 다른 환경/장치에서 돌아가는 프로그램을 PC에서 동작시키게 하는 경우가 있다.(에뮬레이터를 사용하거나 웹에서 제공하는 프로그램을 통해서 서비스를 하는 경우도 있다.) 도커는 이처럼 프로그램 실행을 위해 Linux 환경을 쉽게 구성하기 위한 도구라고 할 수 있다.
도커(Docker)란 어플리케이션 실행 환경을 코드로 작성할 수 있고 OS를 격리화하여 관리하는 기술이다. 리눅스 컨테이너(Linux Container)기술 기반의 오픈 소스 서비스이다.
관련 개념: 환경 표준화, 환경 변수, 리소스 격리성
환경이 일정하지 않아서 생기는 문제를 해결할 수 있다.
개발하려고 하는 여러 어플리케이션을 구동할 때 운영체제가 서로 다르면 환경에 따라 조금씩 변경할 부분이 생긴다. 같은 Linux라고 하더라도 Ubuntu, CentOS, Debian은 서로 다른 환경이므로 여러 버전이 존재할 수도 있다.
개발된 어플리케이션을 내 컴퓨터에 설치해 사용하고자 할 때 '내 컴퓨터' 혹은 '내 사용 목적'에만 맞는 설정이 따로 필요할 수 있다. 예를 들어 환경 변수처럼 같은 OS라 하더라도 사용자에 따라 달라지는 구성이 있다.
만약 어플리케이션을 설치하거나 실행할 때 홈 디렉토리에 저장해야한다면 모든 사용자가 같은 홈 디렉토리를 사용하진 않을 것이다. 또한 설치하다보면 누군가는 실수를 하기 마련이다. 이 외에도 방화벽 설정, 사용자 권한 설정, Port 설정 등 어플리케이션을 설치할 때 컴퓨터에 맞게 변경해줘야하는 부분들이 있다.
컴퓨터에 다양한 설정 작업을 수작업으로 하게 된다면 많은 시간이 걸릴뿐만 아니라 설정들이 뒤엉켜서 스파게티 환경이 만들어질 수 있다. 고전적인 해결방법으로는 포맷 후 재설치가 있지만 개발 혹은 실행에 대한 환경 설정이 코드화 되어 있다면 보다 편하게 작업할 수 있을 것이다.
리소스 격리성이란 하나의 컴퓨터에서 여러 개의 컴퓨터를 이용하는 것이다.
리소스 격리성을 제공하는 기술로는 가상머신, 도커 등이 있다.(가상화 방법은 이외에도 다양하다.)
위 이미지의 왼쪽은 도커가 작동하는 방식이고 오른쪽은 가상머신이 작동하는 방식이다.
VirtualBox, VMware와 같은 해당하는 가상머신은 내가 개발 혹은 사용하는 환경을 이미지로 저장하고 Host OS 위에 게스트 OS를 띄우는 방식이다.
가상화 방법과 도커는 격리성을 제공하기 때문에 각 어플리케이션마다 다른 컴퓨터에서 실행되는 것처럼 IP, port 등을 다르게 설정할 수 있다.
도커와 가상머신을 비교하면 아래처럼 설명할 수 있다.
각 사용자들의 컴퓨터의 환경에 따라 발생하는 문제 혹은 기술인 환경 표준화(환경이 일정하지 않아서 생기는 문제), 수작업으로 일치시키는 환경 구성, 리소스 격리성을 해결하는 방법 중에 리눅스 컨테이너가 있다.
리눅스 컨테이너란 리눅스 기반의 기술 중 하나로, 필요한 라이브러리와 어플리케이션을 모아서 마치 별도의 서버처럼 구성한 것을 의미한다. 컨테이너를 이루는 네트워크 설정, 환경 변수 등의 시스템 자원은 각 컨테이너가 독립적으로 소유하고 있다.
(가상머신과 비슷한 특성을 가지고 있지만 다른 기술이다.)
가장 두드러지는 특징은 어플리케이션에 대한 환경을 Docker에서는 Container의 관점에서 빠르고 개발자와 사용자 커뮤니티를 중심으로 혜택을 제공하는데 있다. 따라서 어플리케이션에 대한 환경의 격리성을 중심으로 한 VM의 관점보다 빠르다고 할 수 있다.
도커 컨테이너의 독립적인 특징을 기반으로 컨테이너의 생성, 실행, 종료의 과정을 Lifecycle이라고 할 수 있다.
Docker docs에서 도커를 사용할 때 필요한 명령어, 옵션 등의 사용법을 확인할 수 있다.
Docker CLI뿐만 아니라 사용법과 환경을 구성하는 방법에 대해서 공식 문서를 적극적으로 사용하자.
<검색 키워드>