1. 등장 배경
- 전가상이든 반가상이든 추가적인 OS를 설치하여 가상화하는 방법은 어쨋든 성능문제가 있었고 이를 개선하기 위해 프로세스를 격리하는 방식이 등장함
- 즉, 서버를 관리한다는 건 굉장히 까다로운 문제임
- 하나의 서버에 여러개의 프로그램을 설치하는것 → 까다로움
- 사용하는 라이브러리의 버전이 다르거나 동일한 포트를 사용하는 경우, 설치가 굉장히 까다로움 → 차라리 다른 서버에 설치하는게 나았고, 조립 PC가 늘어나고 자원은 낭비됨
- DevOps의 등장으로 개발주기가 짧아지면서 배포는 자주 이루어지고 마이크로서비스 아키텍쳐가 유행하면서 프로그램은 더 잘 쪼개어져 관리는 더 복잡해짐
→ 따라서, 새로운 툴은 계속 나오고 클라우드 발전으로 설치해야 할 서버가 수백, 수천대에 이르는 상황에서 도커가 등장하고 서버관리 방식은 완전히 바뀌게 됨
2. 도커란?
-
서버의 컨테이너도 흔히 아는 컨테이너와 비슷하게 다양한 프로그램, 실행환경을 컨테이너로 추상화하고 동일한 인터페이스를 제공하여 프로그램의 배포 및 관리를 단순하게 해줌
-
백엔드 프로그램, 데이터베이스 서버, 메시지 큐 등 어떤 프로그램도 추상화할 수 있음
-
서버에서 다양한 프로그램, 실행 환경을 컨테이너로 추상화하고 동일한 인터페이스를 제공하여 프로그램 배포 및 관리를 단순하게 해줌
-
백엔드 프로그램 데이터베이스 서버, 메시지 큐등 어떤 프로그램도 콘테이너로 추상화될도 있고 조립PC, AWS, Azure, Google cloud등 어디서든 실행할 수 있음
3. 컨테이너란?
- 격리된 공간에서 프로세스가 동작하는 기술임
- 기존 방식
- 가상화 방식(주로 OS 가상화)
- VMware나 Virtual Box 같은 가상머신은 호스트 OS위에 게스트 OS 전체를 가상화하여 사용하는 방식
- 이 방식은 여러가지 OS를 가상화 할 수 있고 비교적 사용법이 간단하지만, 무겁고 느려서 운영환경에선 사용할 수 없음
- 개선 방식
- CPU 가상화 기술(HVM)을 이용한 KVM(Kernel-based Virtual Machine)과 반가상화(Paravirtualization) 방식의 Xen이 등장
- 이런 방식은 게스트 OS가 필요하긴하지만 전체 OS를 가상화하는 방식이 아니였기 때문에 호스트형 가상화 방식에 비해 성능이 향상됨
- 이러한 기술들은 OpenStack이나 AWS, Rackspace같은 클라우드 서비스에서 가상 컴퓨팅 기술의 기반이 되었음
4. 이미지란?
- 컨테이너를 실행하기 위한 모든 정보를 가지고 있음
- 의존성 파일을 컴파일하고 이것저것 설치할 필요가 없음
- 새로운 서버가 추가되면 미리 만들어 놓은 이미지를 다운받고 컨테이너를 생성하기만 하면 됨
- 한 서버에 여러개의 컨테이너를 실행할 수 있고 수십, 수백, 수천대의 서버도 문제없음
- 도커 이미지는 Docker Hub나 Docker Registry 저장소를 직접 만들어 관리할 수 있음
5. 도커가 핫한 이유?
이미지 레이어 구조로 저장방식으로 도커가 관리하는 파일 시스템 영역에 이미지를 복사함
- 도커는 완전히 새로운 기술이 아니며 이미 존재하는 기술을 잘 포장함
- 도커의 이미지를 이용하여
docker run
을 하면 도커는 도커가 관리하는 파일 시스템 영역에 이미지를 복사함
- 복사후, 도커는 이미지의 최상단에 컨테이너 레이어라고 불리는 얇은 레이어를 추가하여 컨테이너를 생성함
- 그리고 사용자에게 유니온 파일 시스템을 이용하여 마치 이러한 여러개의 파일 시스템(Image Lager)로 구성되어 있는 이미지 스택 구조가 하나의 파일 시스템 처럼 보이도록 하게 함
- 사용자가 컨테이너 안에서 읽고 쓰는 모든 작업들은 이 컨테이너 레이어에 기록되고 이미지 레이어에는 도지 않음
- Image layer는 변경 불가(Read only layer)
- Container layer는 변경 가능(Readable/Writable layer)
- 이미지 레이어는 삭제되지 않지만 컨테이너 레이어는 해당 컨테이너가 종료될 경우 같이 소멸됨
- 사용자가 컨테이너 레이어에서 작업하던 내용을 이미지 레이어로 적용하고 싶을 경우,
docker commit
을 통해 기존 Image layer들과 직접 작성한 컨테이너 레이어를 이용해 새로운 이미지를 생성할 수 있음
6. 특징
네트워크 성능이 중요한 프로그램의 경우 —net=host 옵션을 고려해야 함
참고로, 도커의 기본 네트워크 모드는 Bridge 모드로 약간의 성능 손실이 있음
-
하나의 서버에 여러개 컨테이너를 실행하면 서로 영향을 미치지 않고 독립적으로 실행되어 마치 가벼운 VM(Virtual Machine)을 사용하는 느낌을 줌
-
실행중인 컨테이너에 접속하여 명령어를 입력할 수 있고 apt-get
이나 yum
으로 패키지를 설치할 수 있음
-
사용자 추가하고 여러개의 프로세스를 백그라운드로 실행할 수 있음
-
CPU나 메모리 사용량을 제한할 수 있고 호스트의 특정 포트와 연결하거나 호스트의 특정 내부 디렉토리인 것처럼 사용할 수 있음
-
새로운 컨테이너를 만드는데 걸리는 시간은 겨우 1-2초로 가상머신과 비교할 수 없이 빠름
참고 자료
- 초보를 위한 도커 안내서 - 도커란 무엇인가?
- 인프런 강의 - 초보를 위한 도커 안내서