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 |