이 장에서는 Docker 의 전제적인 부분을 할 수 없으므로 간단하게 Docker 의 정의가 무엇인지 왜 Spring MicroService 와 같이 사용되는지 그리고 간단한 어플리케이션을 만들어서 Docker 허브로 보내는거 까지 해보도록 하겠습니다
Docker
도커는 2013년 3월 dotCloud 설립자이자 CEO 인 솔로몬 하익스가 만든 리눅스 기반의 인기 있는 오픈 소스 컨테이너 엔진입니다 도커는 애플리케이션 내에서 컨테이너를 시작하고 관리하는 일을 담당하는 좋은 기술로 시작했다가 대기업의 지원 (구글 , IBM , MS) 덕에 이제 개발자의 기본 도구로 전환될 수 있었다
컨테이너
어플리케이션이 실행하는데 필요한 모든 것을 제공하는 논리적 패키징 매커니즘을 의미합니다
도커의 동작 방식
도커 엔진은 클라이언트 - 서버 패턴 아키텍처를 따르는 어플리케이션 호스트 머신에 설치되며 서버 , REST API , 명령줄 인터페이스 라는 세가지 중요한 구성요소를 포함합니다
도커의 아키텍처는 이런 모양입니다
도커 클라이언트
도커 클라이언트 안에는 도커 리모트 API 가 있고 도커 CLI 가 있습니다 도커 명령이 실행되면 도커 데몬에게 명령을 보내는 역활을 합니다
도커 호스트/서버
도커 데몬은 도커 이미지를 생성하고 관리합니다 도커 이미지가 생성되고 실행되면 컨테이너가 생성이 되는데 그것을 보관하는 장소입니다
도커 레지스트리
도커 허브나 사설 레지스트리에서 도커 이미지를 내려받는 역활을 합니다
Docker VS VM
주로 Docker 와 비교되는것은 VM 입니다 거의 비슷하면서도 다른 두가지를 먼저 비교를 해보겠습니다 Docker와 가상 머신(VM)은 모두 애플리케이션의 격리된 실행 환경을 제공하는 기술입니다. 하지만 그 방식과 목적, 성능, 활용도 등에서 큰 차이가 있습니다
공통점
격리된 환경 제공: Docker와 VM 모두 애플리케이션을 호스트 시스템과 분리된 격리된 환경에서 실행할 수 있게 해줍니다.
배포 및 관리 용이성: 두 기술 모두 애플리케이션의 배포, 관리를 용이하게 하고 일관된 환경을 제공합니다.
확장성: 애플리케이션을 쉽게 확장하고 여러 인스턴스를 실행할 수 있습니다.
차이점
아키텍처 관점 :
1
2
3
VM: 하이퍼바이저를 통해 호스트 OS 위에 별도의 게스트 OS를 실행합니다. 각 VM은 자체 운영 체제를 가지고 있으며, 호스트 자원을 가상화하여 사용합니다.
Docker: 호스트 OS의 커널을 공유하고 애플리케이션과 필요한 라이브러리만 컨테이너에 포함시킵니다. 컨테이너는 가벼운 격리된 환경을 제공합니다.
성능 관점 :
1
2
3
4
VM: 하드웨어 가상화로 인해 오버헤드가 큽니다. 각 VM이 별도의 OS를 실행하기 때문에 더 많은 자원을 소비합니다.
(오버헤드는 원래 사용 할려고 했던 자원 이상을 소모하는것을 말합니다)
Docker: 운영 체제 수준에서 가상화되기 때문에 오버헤드가 적고 더 가볍습니다. 더 빠르게 시작하고 종료할 수 있습니다.
이미지 크기 관점 :
1
2
3
VM: 각 VM 이미지에 OS와 애플리케이션이 포함되어 있어 크기가 큽니다.
Docker: Docker 이미지에는 애플리케이션과 필요한 라이브러리만 포함되므로 상대적으로 작습니다.
시작 시간:
1
2
3
VM: OS 부팅 시간이 필요하기 때문에 시작 시간이 느립니다.
Docker: 컨테이너는 프로세스처럼 작동하므로 매우 빠르게 시작할 수 있습니다.
Docker 장단점
장점:
1
2
3
4
5
6
7
8
9
경량화: 컨테이너는 VM보다 훨씬 가볍고 자원 효율적입니다.
빠른 시작: 거의 즉시 시작하고 종료할 수 있습니다.
이식성: 동일한 이미지를 어디서나 실행할 수 있어 배포가 용이합니다.
개발 환경 통일: 개발, 테스트, 운영 환경의 일관성을 유지할 수 있습니다.
배포 속도: 애플리케이션을 빠르게 빌드하고 배포할 수 있습니다.
단점:
1
2
3
4
5
보안 격리: 커널을 공유하기 때문에 VM만큼 강력한 보안 격리를 제공하지 못할 수 있습니다.
호환성 문제: 특정 OS나 커널 버전에 종속될 수 있습니다.
복잡성: 네트워크, 스토리지 관리가 VM보다 더 복잡할 수 있습니다.
VM 장단점
가상 머신 (VM)
장점:
1
2
3
4
5
완전한 격리: 각 VM이 자체 OS를 가지므로 완전한 격리와 보안을 제공합니다.
다양한 OS 지원: 하나의 호스트에서 여러 다른 운영 체제를 실행할 수 있습니다.
안정성: 하이퍼바이저 기술이 오래되어 성숙하고 안정적입니다.
단점:
1
2
3
4
5
6
7
자원 소모: VM은 Docker보다 더 많은 자원을 소비합니다.
느린 시작: OS 부팅 시간이 필요하여 시작이 느립니다.
크기: VM 이미지가 크고 관리가 번거로울 수 있습니다.
복잡한 관리: VM의 생성, 유지보수, 업데이트가 복잡할 수 있습니다.
정리
Docker와 VM은 각각의 용도와 목적에 따라 선택해야 합니다. 경량화된 빠른 배포와 확장이 필요한 경우 Docker가 적합하며, 높은 수준의 격리와 다양한 운영 체제가 필요한 경우 VM이 적합합니다.
그럼 왜 Spring MicroService 와 Docker 인가?
컨테이너: 바로 Docker 의 컨테이너 입니다 Spring 으로 만든 개별 모듈들은 Docker 컨테이너를 통해서 해당 모듈이 실행이 가능한 상태로 논리적 패키징을 제공합니다 즉 마이크서비스의 핵심은 여러 모듈을 동일한 환경에 동일한 방식으로 배포를 할 수 있어야 하는데 컨테이너가 이런 환경을 쉽고 간편하게 제공을 할 수 있습니다 컨테이너를 사용함으로서 독립적인 모듈들은 다음과 같은 특징을 가집니다
1
2
3
4
5
1. 독립된 배포 환경
2. 일관된 실행 환경
3. 배포와 빠른 롤백
4. 효율적인 리소스 사용
5. 개발 및 운영의 일관성
이러한 이유로 마이크로서비스를 만드는 곳에서는 Docker 를 채택하고 같이 이용합니다
이번시간에는 Docker 의 전반적인 내용을 다루어보았습니다 다음장에서는 간단한 웹 어플리케이션을 만든뒤 이를 도커 이미지로 만들고 실행하는 방법에 대해서 알아보도록 하겠습니다