본문 바로가기
공부/MLOps

MLops - 6. 도커 & 쿠버네틱스

by DSLAB_JS 2022. 3. 1.

Docker

'쿠베플로우' 라는 툴을 사용하기 위해서는 그전에 '도커'와 '쿠버네티스'를 알고 넘어가야한다.

 

쿠버네티스를 사용하기 위해서는 도커를 이해해야하는데, 요즘 '도커'없이는 개발하기 힘들기 때문에 필수적으로 알아야할 툴이다.

 

1. 도커 개요

  • 도커가 필요한 이유

- Docker는 애플리케이션을 개발, 제공 및 실행하기위한 개방형 플랫폼

- Docker를 사용하면 애플리케이션을 인프라에서 분리할 수 있으므로, sw를 빠르게 제공할 수 있다.

- 애플리케이션을 관리하는 것과 동일한 방식으로 인프라를 관리할 수 있고, 코드를 신속하게 전달, test 및 배포를 위한 Docker의 방법론을 활용하면 코드 작성과 프로덕션 실행 사이의 지연을 크게 줄일 수 있다.

  • 도커 플랫폼

- 컨테이너라고하는 느슨하게 격리된 환경에서 애플리케이션을 패키징하고 실행할 수 있는 기능을 제공

- 격리 및 보안을 통해 주어진 호스트에서 여러 컨테이너를 동시에 실행할 수 있다.

-  Docker는 컨테너의 수명주기를 관리하기위한 도구와 플랫폼을 제공한다.

     - 컨테이너를 사용하여 애플리케이션 및 지원 구성요소를 개발한다.

     - 컨테이너는 애플리케이션을 배포하고 test하는 단위가 된다.

     - 준비가 되면 애플리케이션을 컨테이너 또는 오케스트레이션 된 서비르소 프로덕션 환경에 배포한다. 이는 프로덕션 환경이 로컬 데이터센터, 클라우드 공급자 또는 둘의 하이브리드이든 상관없이 동일하게 작동한다.

  • Docker는 어디에 사용할 수 있을까?

- 빠르고 일관된 애플리케이션 제공

     - Docker는 개발자가 애플리케이션과 서비스를 제공하는 로컬 컨테이너를 사용하여 표준화 된 환경에서 작업 할 수 있도록함으로써 개발 수명주기를 간소한다.

     - 컨테이너는 지속적 통합 및 지속적 배포 (CI / CD) 워크 플로에 적합하다.

 

- 예제 시나리오 

     - 개발자는 로컬에서 코드를 작성하고 Docker 컨테이너를 사용하여 동료와 작업을 공유한다.

     - Docker를 사용하여 애플리케이션을 테스트 환경으로 푸시하고 자동 및 수동 테스트를 실행한다.

     - 개발자가 버그를 발견하면 개발 환경에서 버그를 수정하고 테스트 및 검증을 위해 테스트 환경에 재배포 할수있다.

     - 테스트가 완료되면 업데이트 된 이미지를 프로덕션 환경에 푸시하는 것만 큼 간단하게 고객에게 수정 사항을 제공 할 수 있다.

 

- 반응형 배포 및 확장

     - Docker의 컨테이너 기반 플랫폼은 이동성이 뛰어난 워크로드를 허용한다.

     - Docker 컨테이너는 개발자의 로컬 랩톱, 데이터 센터의 물리적 또는 가상 머신, 클라우드 공급자 또는 혼합 환경에서 실행할 수 있다.

     - Docker의 이식성과 경량 특성은 또한 비즈니스 요구에 따라 거의 실시간으로 워크로드를 동적으로 관리하고 애플리케이션 및 서비스를 확장하거나 해체 할 수 있도록 한다.

 

- Docker 아키텍쳐

     - Docker는 클라이언트-서버 아키텍처를 사용한다.

     - Docker클라이언트는 Docker 컨테이너를 빌드, 실행 및 배포하는 무거운 작업을 수행하는 Docker 데몬과 통신한다.

     - Docker클라이언트와 데몬은 동일한 시스템에서 실행되거나 Docker클라이언트를 원격Docker데몬에 연결할수있다.

     - Docker 클라이언트와 데몬은 UNIX 소켓 또는 네트워크 인터페이스를 통해 REST API를 사용하여 통신할 수 있고,  또 다른 Docker 클라이언트는 Docker Compose로, 컨테이너 세트로 구성된 애플리케이션으로 작업 할 수 있다.

출처 : 강의(머신러닝 엔지니어 실무)

 

- Docker 데몬

     - Docker 데몬 ( dockerd)은 Docker API 요청을 수신하고 이미지, 컨테이너, 네트워크 및 볼륨과 같은 Docker 객체를 관리합니다. 데몬은 다른 데몬과 통신하여 Docker 서비스를 관리 할 수도 있다.

 

- Docker 클라이언트

     - Docker 클라이언트 (docker)는 많은 Docker 사용자가 Docker와 상호 작용하는 기본 방법이다.

     - docker run와 같은 명령을 사용하면 클라이언트가이 명령을 dockerd에 전송하여 실행한다.

     - 이 docker명령은 Docker API를 사용한다.

     - Docker 클라이언트는 둘 이상의 데몬과 통신 할 수 있다.

 

- Docker 레지스트리

     - Docker 레지스트리 는 Docker 이미지를 저장한다.

     - Docker Hub는 누구나 사용할 수있는 공용 레지스트리이며 Docker는 기본적으로 Docker Hub에서 이미지를 찾도록 구성된다.

     - 자신의 개인 레지스트리를 실행할 수도 있다. docker pull또는 docker run명령을 사용하면 구성된 레지스트리에서 필수 이미지를 가져온다.

     - docker push명령을 사용하면 이미지가 구성된 레지스트리로 푸시된다.

 

- Docker 객체

     - Docker를 사용하면 이미지, 컨테이너, 네트워크, 볼륨, 플러그인 및 기타 객체를 생성하고 사용하게된다.

 

- Docker 이미지

     -  이미지 도커 컨테이너를 만들기위한 지침 읽기 전용 템플릿이다.

     - 자신의 이미지를 만들거나 다른 사람이 만들고 레지스트리에 게시 한 이미지 만 사용할 수 있다. 고유한 이미지를 빌드하려면 이미지를 만들고 실행하는데 필요한 단계를 정의하는 간단한 구문으로 Dockerfile을 만든다. Dockerfile의 각 명령어는 이미지에 레이어를 만든다. Dockerfile을 변경하고 이미지를 다시 빌드하면 변경된 레이어 만 다시 빌드된다. 이것은 다른 가상화 기술과 비교할 때 이미지를 매우 가볍고, 작고, 빠르게 만드는 요소의 일부이다.

 

- Docker 객체 - 컨테이너

     - 컨테이너는 이미지의 실행 가능한 인스턴스이다.

     - Docker API 또는 CLI를 사용하여 컨테이너를 생성, 시작, 중지, 이동 또는 삭제할 수 있다. 컨테이너를 하나 이상의 네트워크에 연결하거나 스토리지를 연결하거나 현재 상태를 기반으로 새 이미지를 만들 수 도 있다.

     - 기본적으로 컨테이너는 다른 컨테이너 및 호스트 시스템과 비교적 잘 격리되어 있다. 컨테이너의 네트워크, 스토리지 또는 기타 기본 하위 시스템이 다른 컨테이너 또는 호스트 시스템에서 분리되는 방식을 제어 할 수 있다.

     - 컨테이너는 이미지와 사용자가 생성하거나 시작할 때 제공하는 구성 옵션에 의해 정의되고, 컨테이너가 제거되면 영구 저장소에 저장되지 않은 상태 변경 사항이 사라지게 된다.

'공부 > MLOps' 카테고리의 다른 글

MLops - 5.1 (TFDV)  (0) 2022.02.02
MLOps - 5 (TFDV)  (0) 2022.01.23
MLOps - 4  (0) 2022.01.06
MLOps - 3  (0) 2022.01.03
MLOps - 2  (0) 2021.12.12