오늘 낮에 친구가 “아니 도대체 도커는 왜 쓰는거임?” 라고 물었다. 나는 mysql, nginx 같은거 한번에 관리할 수 있고 설치도 따로 하지 않아도 된다고 대답했다. 평소에 도커를 너무나도 당연하게 사용해왔기 때문에 첨언할 내용이 생각나질 않았다. 따라서 Docker 가 Base 로 사용하는 Container 기술과 Docker 에 대한 이론적인 부분을 간단하게 적고자 한다.
Docker 를 이해하기 앞서
우선 Docker
를 이해하기 위해서는 Container 에 대한 이해가 필요하다.
Container
Container 란 우리의 Application
을 어떠한 환경이든 실행할 수 있도록
애플리케이션에서 사용되는 라이브러리 같이 필요한 모든 요소들을 하나의 패키지로 패키징하여 하나의 독립적인 프로세스로 격리시키는 기술
을 의미한다.
즉, 요약하면 Container 는 어떠한 환경에서든 우리의 애플리케이션이 실행될 수 있도록 라이브러리와 같은 구성요소들을 하나로 패키징하여 격리시키는 기술을 의미한다.
Container 의 이점
- 하드웨어 레벨에서 가상화되는
VM
과 다르게Containter
는 OS 레벨에서 가상화되어 OS Kernel 을 공유하기 때문에VM 보다 훨씬 적은 메모리를 사용
한다. - 애플리케이션을 실행하기 위한 모든 구성요소들을 하나로 패키지하여 제공되고, 실행환경에 구애받지 않기 때문에
이식성
및워크로드의 이동성
이 보장된다. - 개발자는 Application 과 Library 와 같은 구성요소들에만 집중할 수 있고, 운영 팀은 배포에만 집중할 수 있기 때문에
책임 분리
가 가능해진다. - Linux, Windows, Mac 등의 운영체제를 가리지 않고 가상 머신, 물리적 서버, 개발자 컴퓨터, 데이터 센터, 온프레미스 환경, 퍼블릭 클라우드 등 사실상 어느 환경에서나 구동되므로 개발 및 배포가 크게 쉬워져
워크로드의 이동성
이 보장된다.
워크로드의 이동성은 작업이나 데이터가 다른 시스템, 플랫폼 또는 환경으로 자유롭게 이동할 수 있는 능력(이식성)을 의미한다. 보통 워크로드의 이동성은 가상화 기술, 컨테이너화된 환경 등을 통해 구현될 수 있다.
Docker 란
Docker 는 앞서 설명한 Container 기술을 기반으로한 오픈소스 가상화 플랫폼이다. Docker 를 통해 Container
기술을 사용하고 이러한 Container 들을 관리할 수 있다.
위키백과에서는 도커(Docker) 는 리눅스의 응용 프로그램들을 프로세스 격리 기술들을 사용해 컨테이너로 실행하고 관리하는 오픈 소스 프로젝트라고 설명하고 있다.
Docker 의 특징
사실 Docker 가 Container 기술을 기반으로 하기 떄문에 앞서 설명한 Container 의 이점부분과 겹치는 부분이 많다.
- 확장성 및 이식성
- Docker 가 설치되어있으면 어떤환경에서든 Container 를 실행할 수 있다.
- 오픈소스이기 때문에 특정 서비스에 종속적이지 않다.
- 표준성
- java, ruby, node, go, php 로 이루어진 애플리케이션의 배포방식은 모두 다르다. 하지만 docker 를 통해 모든 서비스들의 배포과정이 동일해진다.
- 이미지
- Docker 에서 Container 를 실행하기위해서는
Image
라는 파일로 만드는 과정이 중요하다. 이러한Image
파일은Dockerfile
을 이용하여 이미지를 빌드할 수 있다. - Image 파일을 Image 저장소에 저장하여 운영서버에서 해당 Image 를 불러오면 Container 를 실행할 수 있다.
- 또한 이러한 Image 빌드 기록이 남기 때문에 버전관리 또한 가능해진다.
- Docker 에서 Container 를 실행하기위해서는
- 설정파일
- 설정을
환경변수
로 제어 및 관리한다. - Container 를 띄울 때
MYSQL_PASS=password
와 같은 환경변수를 지정할 수 있다.
- 설정을
- 자원관리
- Container 는 삭제 후 새로 만들면 모든 데이터가 초기화된다.
- 업로드 파일을 외부 저장소와 링크하여 사용하거나 S3 같은 별도의 저장소가 필요하다.