개발 환경의 주요 요소인 container와 Docker 개념을 정리해보자
이론적으로는 공부를 여러번 했지만 아직 클라우드 인프라와 MLOps 개발 경험이 없어서
오개념이나 설명이 부족할 수 있지만 그건 차차 보완하면 되겠지 ㅎㅎ
[1] 컨테이너가 필요한 이유
(https://azure.microsoft.com/ko-kr/overview/what-is-a-container/#why-containers)
소프트웨어 서비스는 다양한 조합의 개발환경에 종속적으로 실행되기때문에, 개발환경과 실행환경이 다를 경우 정상적으로 실행되기 어렵다. (“it works on my machine” 문제라고 부른다)
이 때문에 어플리케이션 개발코드를 구성 파일, 라이브러리, 종속성 등과 함께 패키징하여 제공하는 것을 컨테이너화(containerization)이라고 하며, 패키징된 번들을 컨테이너 이미지 라고 부른다.
컨테이너를 이용하면 어플리케이션이 컨테이너 이미지를 기본 단위로 테스트되고 배포되어 개발환경과 실행환경이 충돌하는 문제를 극복할 수 있다.
컨테이너를 이용하여 얻을 수 있는 장점을 3가지로 표현하면
- 민첩성: 개발자가 어플리케이션을 패키징하여, 배포와 운영에 필요한 추가 노력이 줄어들고 빠르게 서비스할 수 있음
- 이식성: 모든 환경에서 작동하도록 서비스를 제공하므로 머신/OS플랫폼/클라우드 간 이식(migration)이 가능함
- 신속한 확장성: 같은 인프라 자원에서 가상머신에 비해 많은 컨테이너를 지원할 수 있고, 경량화된 특성으로 빠르게 시작하거나 중지할 수 있어 신속하게 이용 가능함
[2] 가상머신(VM)와 컨테이너 비교
컨테이너와 유사한 형태인 가상머신(virtual machine)과 비교하여 두 개념의 차이는 다음과 같다
(https://docs.microsoft.com/ko-kr/virtualization/windowscontainers/about/containers-vs-vm)
가상머신은 어플리케이션마다 커널과 운영체제(OS)를 포함한 구성을 실행하는 반면,
컨테이너는 호스트 운영체제와 커널 위에서 어플리케이션, 서비스 등만 포함하여 구분 실행한다.
(*커널이란 하드웨어의 주요 기능을 제어하는 인터페이스이다 [설명 LINK] )
그래서 가상머신을 이용할 때는 어플리케이션 이용을 위해 운영체제를 완전히 실행해야하지만,
컨테이너를 이용할때는 전체 리소스 중 일부만을 사용하도록 조정하여 리소스 사용을 줄일 수있다.
따라서 격리화된 컨테이너의 이용 공간은 VM이미지에 비해 매우 작다.
[3] Docker 란?
Docker란 컨테이너를 위한 운영체제를 제공하는 오픈소스 플랫폼이다. 초기엔 Linux 에서 호환되는 방식이었지만, 현재는 윈도우 서버나 Azure, AWS 같은 클라우드 서비스에서 이용할 수 있다.
가상머신이 하드웨어를 가상화하는 것과 유사하게, 컨테이너에서는 운영체제를 가상화한다. 이 때 각 서버에는 Docker Engine이 설치되어 컨테이너를 구축, 시작, 중단하기위한 명령 세트를 제공한다.
(*Hypervisor란 VMM이라고도 불리며 VM을 생성하고 구동하는 소프트웨어이다. 하이퍼바이저를 통해 하드웨어 리소스를 공유하고 여러 운영체계를 구동하는 것이 가상머신에서의 가상화 개념이다 [설명 LINK] )
Docker가 실제로 작동되는 workflow를 간단하게 설명하면 아래와 같다
- Docker 파일은 컨테이너의 인프라와 종속성 등을 정의하는 문서
- Docker 이미지는 컨테이너를 정의하는 읽기 전용 템플릿으로, 라이브러리 및 종속성 코드를 포함하며 변경불가능(immutable)하다
- Docker 컨테이너는 인스턴스화된(실행되는) Docker 이미지이다
즉, 개발 단계에서 Docker파일을 Docker 이미지로 빌드하고, Docker이미지를 Pull & Push 할 수 있다.
(+)
실제 기업에서는 AWS 나 Azure 와 같은 클라우드 환경에서 개발을 관리하는 경우가 일반적이므로 클라우드에서 제공하는 Docker 서비스를 참고하여 익히면 효과적일 듯 하다
AWS Docker : https://aws.amazon.com/ko/docker/
'데이터 사이언스 or 엔지니어링 > 응용을 위한 기술들' 카테고리의 다른 글
AWS EC2 에 Django 기반의 웹 서버 만들기 (1) | 2023.12.28 |
---|---|
WSL-pyspark 실습 환경 설정 (0) | 2022.04.04 |