[도커 교과서] 1장 도커 컨테이너와 이미지 이해하기
도커는 컨테이너라는 경량 단위로 애플리케이션을 실행하는 기능을 제공하는 플랫폼이다.
1.1 컨테이너가 IT세상을 점령한 이유
도커를 통해 운영 환경과 테스트 환경을 막론하고 애플리케이션을 빌드하고, 배포하고, 관리하는 모든 업무가 이루어진다.
프로젝트에 새로 참여한 개발자도 소스 코드를 내려받고 나면 명령 한 줄로 로컬 머신에서 빌드와 실행을 끝낼 수 있다.
도커 도입을 통해 모든 툴체인이 중앙집중화돼, 특정 버전으로 매번 설치하지않아도 되었다.
1.1.1 클라우드 환경으로 이주하기
기존의 클라우드 환경 이주는 크게 두 가지 선택지가 존재했다.
서비스로서의 인프라 (IaaS)
서비스로서의 플랫폼 (PaaS)
PaaS는 애플리케이션의 각 컴포넌트를 하나씩 클라우드 매니지드 서비스로 옮겨야하는 까다로운 프로젝트를 수행해야한다. 게다가 애플리케이션이 클라우드에 종속되어버린다.
IaaS는 애플리케이션의 각 컴포넌트를 가상 머신에서 동작시키게 된다. 따라서 특정 클라우드에 종속되지는 않지만 운영비용이 크게 증가한다.
하지만 도커를 도입하면 애플리케이션의 각 컴포넌트를 컨테이너로 이주한 다음 애저 쿠버네티스 서비스나 아마존 일래스틱 서비스 혹은 직접 구축한 도커 클러스터에서 전체 애플리케이션을 실행할 수 있다.
도커를 도입한다면 특정 클라우드에 종속되지 않고, 심지어 로컬 환경에서도 운영가능하다. 따라서 낮은 운영비와 이식성을 확보할 수 있다.
컨테이너로 애플리케이션을 이주하려면 기존 설치 절차를 Dockerfile 스크립트로 작성하고, 배포 관련 사항 역시 도커 컴포즈나 쿠버네티스에서 사용되는 애플리케이션 매니페스트로 작성해야한다.
1.1.2 레거시 애플리케이션 현대화하기
컨테이너를 활용하면 거의 모든 애플리케이션을 클라우드에서 실행할 수 있다.
그러나 기존 애플리케이션의 구조를 낡은 모놀리식 설계로 방치한다면 도커, 클라우드 플랫폼의 진가를 발휘하기 어렵다.
컨테이너는 가상 네트워크를 통해 외부로 노출되지 않고 서로 통신할 수 있다. 이는 기능별로 별도의 컨테이너를 배치할 수 있는 것이다.
결과적으로 통짜 애플리케이션이 여러 개의 컨테이너로 분할된 분산 애플리케이션으로 거듭나게 된다.
이는 결국 MSA의 다양한 장점을 누릴 수 있게된다.
핵심 기능이 작아진다.
핵심 기능이 독립적으로 변한다.
변경 내용을 빠르게 테스트할 수 있다.
확장성을 조절할 수 있다.
필요에 맞는 적절한 기술을 각기 다르게 선택할 수 있다.
도커를 도입하면 레거시 애플리케이션의 설계를 쉽게 현대화할 수 있다.
1.1.3 클라우드 환경에 적합한 새로운 애플리케이션 개발하기
도커는 기존 애플리케이션을 클라우드로 이주하는데 유용하다.
분산 애플리케이션을 빌드하고 실행하는 데 별도의 개발 도구가 필요하지 않는다.
도커를 설치하고, 소스 코드 저장소를 복제한 뒤, 한 번의 명령으로 전체 애플리케이션을 실행할 수 있게된다.
도커는 서드파티 소프트웨어를 도입하는데도 유용하다.
도커 허브는 다양한 사람이 자신이 작성한 컨테이너를 공유하는 서비스이다.
1.1.4 기술혁신: 서버리스와 그 너머
현대 IT 기술을 주도하는 요소 중 하나는 일관성이다. 개발 팀은 모든 프로젝트에서 같은 도구, 같은 프로세스, 동일한 런타임을 사용하기를 원한다.
도커는 이 요구사항을 만족시킬 수 있다.
도커 클러스터를 구축하면 모든 제품의 빌그, 배포, 운영을 같은 도구와 같은 방법으로 수행할 수 있다.