1. 도커 이야기
Docker는 2013년 3월에 Docker, Inc가 출시한 오픈 소스 컨테이너 프로젝트인데 그 기간에 비해 매우 성장하였다.
근래에 서버 시장이 클라우드로 옮겨가면서 손쉽게 가상 서버를 사용할 수 있게 되었다. 그런데 손쉽게 사용할 수 있으면서 순수하게 서버 대수로 보자면 기존보다 많이 늘어나게 되었다. (1대의 유닉스 서버 = 여러대의 가상 리눅스 서버) 이렇게 되면서 많아진 가상 서버 내 설치, 설정 등 관리의 어려움이 대두되었다.
이에 대한 해결책으로 나온 것이 Immutable Infrastructure다. OS 영역과 S/W 영역을 분리하고, S/W 영역을 패키징, 이미지화하여 배포한다는 개념이다. S/W 영역은 서비스 운영환경이라고도 불리운다.
Docker는 이 Immutable Infrastructure를 구현했다.
리눅스 컨테이너 기술은 cgroups, namespaces가 제공하는 기술이다.
2. 가상 서버와의 차이점
하이퍼바이저 상의 가상 서버는 가상화되어 있을 뿐 사실 독립된 머신이라고 볼 수 있다. OS를 가지고 있다. (Guest OS)
장점도 있지만 매번 독립된 머신을 계속 만들어내다보니 성능적인 단점이 존재한다. 또한 이미지 내에 풀 OS가 존재하다보니 이미지 용량이 커진다.
반면 Docker는 호스트 OS와 바로 통신한다. 호스트의 OS의 System Call을 직접 호출한다.
연구 결과에 따르면 Docker 사용 시 호스트 OS의 99% 수준의 성능을 낼 수 있다고 한다. 가상화에 비해 메모리 접근, 파일 시스템, 네트워크 등이 훨씬 빠르다.
이미지를 중앙저장소로부터 올리고(push) 받고(pull) 할 수 있다. Docker Hub는 이미지 생성, 배포를 담당하는 기능이다. 이는 GitHub와 유사한 면이 있다.
계속 이미지와 컨테이너라는 말이 나오는데 좀 더 정확히 정의해보자.
2.1. 베이스 이미지
깔끔한 OS 배포 이미지 중 커널 영역을 제외한 이미지이다. 부팅에 필요한 실행파일, 라이브러리, 패키징 시스템 등이 포함되어 있다.
2.2. Docker 이미지
베이스 이미지를 상속받아 몇몇 라이브러리, 애플리케이션, 소스 등을 추가, 설치, 저장한 이미지다. 이 이미지는 다시 수정되어 또 다른 Docker 이미지가 될 수 있는데 이 때는 수정된 부분만 저장된다.
바뀐 부분은 유니온 파일시스템 형식(aufs, btrfs, devicemapper)로 관리한다.
2.3. 컨테이너
베이스 이미지 + Docker 이미지 + 수정된 Docker 이미지 형태로 실행된 상태이다.
개념적으로 이미지 1개로 여러 컨테이너를 실행할 수 있다. 즉, 이미지는 실행파일, 컨테이너는 각 프로세스라고 볼 수 있다.
2.4. Docker의 장점과 사용법
이미지 공유가 쉽기 때문에 개발, 테스트, 서비스 환경을 하나로 통일하여 관리할 수 있다. 만약 서비스 환경이 바뀌면 이미지를 새로 생성하여 배포한다.
2.5. 퍼블릭 클라우드에서의 지원
AWS, Google, Azure 등에서 공식 지원한다.
2.6. 기타 참고 자료
https://github.com/hinunbi/container-workshop
레드햇 컨테이너 워크샵 관련 자료이다.