[Docker] 도커는 무엇인가?
도커란?
도커는 애플리케이션을 개발, 제공 및 실행하기 위한 개방형 플랫폼이다. 애플리케이션을 인프라에서 분리하여 소프트웨어를 신속하게 제공할 수 있으며, 애플리케이션을 관리하는 것과 동일한 방식으로 인프라를 관리할 수 있다.
또한, 컨테이너는 호스트 서버에 설치된 것에 의존할 필요가 없으며, 호스트 서버에서 동시에 많은 컨테이너를 실행할 수 있다. Docker는 이 컨테이너의 수명주기를 관리하기 위한 도구와 플랫폼을 제공하고 있다.
도커를 사용하게 되면, 컨테이너를 사용하여 애플리케이션과 지원 구성 요소를 개발한다. 앞으로 컨테이너는 애플리케이션을 배포하고 테스트하기 위한 단위가 된다.
도커 아키텍처
도커는 클라이언트-서버 아키텍처를 사용한다. 도커 클라이언트는 도커 데몬과 통신한다. 도커 데몬은 도커 컨테이너를 구축, 실행 및 배포하는 무거운 작업을 수행한다. 도커 클라이언트와 도커 데몬은 동일한 시스템에서 실행될 수도 있고, 도커 클라이언트를 원격 Docker 데몬에 연결할 수도 있다. 도커 클라이언트와 도커 데몬은 UNIX 소켓 또는 네트워크 인터페이스를 통해 REST API를 사용하여 통신한다. 도커 컴포즈라는 또다른 도커 클라이언트가 있는데, 이 클라이언트를 사용하면 컨테이너 세트로 구성된 애플리케이션으로 작업할 수 있다.
여기서 주의할 점은 도커 컴포즈는 하나의 컨테이너에서 작업하는 것을 지원하기 때문에, 특정 컨테이너의 확장만 가능하다. 여러 호스트에서 여러개의 컨테이너를 동시에 다루기 위해서는 쿠버네티스를 사용하면 된다.
도커 레지스트리
도커 레지스트리는 도커 이미지를 저장하는 공간이다. 누구나 이용할 수 있도록 도커 허브라는 공개된 레지스트리도 있으며, 자신만의 개인 레지스트리를 실행할 수도 있다.
이전에 모각코를 진행하는 경우에, 파이썬 개발자분이 도커 허브에 본인의 개발 환경을 등록해두고 잘 사용했던 모습이 기억난다. 아마도 잘 활용해서 여러 개발환경의 템플릿을 만들어 나가는 재미도 있어보인다!
정리하기
컨테이너라는 포장용기에 개발환경을 담고, 컨테이너를 빌드하고 실행하는 컨테이너 런타임 소프트웨어로 도커를 사용한다. 그리고 여러대의 호스트 서버에서 컨테이너를 관리하고 배포할 수 있는 컨테이너 오케스트레이션 도구가 바로 쿠버네티스이다.
그리고 컨테이너 오케스트레이션 도구가 하는 일은 다음과 같다.
- 자동 배포: 컨테이너 오케스트레이션 시스템은 새로운 컨테이너 또는 애플리케이션 버전을 자동으로 배포할 수 있다. 이는 무중단 배포를 지원하고 서비스 중단을 최소화하는 데 도움이된다.
- 자동 스케일링: 컨테이너 오케스트레이션 시스템은 서비스의 부하에 따라 자동으로 컨테이너 인스턴스의 수를 조정할 수 있다. 이는 자원 사용률을 최적화하고 성능을 유지하는 데 도움이 된다.
- 자동 복구: 컨테이너 오케스트레이션 시스템은 애플리케이션 또는 서비스의 장애에 대응하여 자동으로 복구할 수 있다. 이는 서비스의 가용성을 높이고 장애에 대응하는 데 도움이 된다.
- 서비스 디스커버리 및 로드 밸런싱: 컨테이너 오케스트레이션 시스템은 서비스 간 통신을 위한 디스커버리 메커니즘과 로드 밸런싱을 제공한다. 이는 서비스 간 통신을 효율적으로 관리하고 네트워크 트래픽을 분산하는 데 도움이 된다.
- 선언적 구성: 컨테이너 오케스트레이션 시스템은 YAML 또는 JSON 형식의 선언적 구성 파일을 사용하여 애플리케이션의 구성을 정의하고 관리한다. 이는 코드 기반의 인프라(Infrastructure as Code, IaC)를 구현하는 데 도움이 된다.
- 상태 관리: 컨테이너 오케스트레이션 시스템은 애플리케이션의 상태를 관리하고 모니터링할 수 있다. 이는 애플리케이션의 상태를 추적하고 문제를 신속하게 진단하는 데 도움이 된다.