일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- MSLE
- 피처 스케일링
- mmdetection
- 다중 회귀
- bcss
- 청산원함
- RMSLE
- stacking
- MaskRCNN코랩
- mask2cocojson
- 모델 성능 최적화
- 엘라스틱넷
- mask2coco
- MaskRCNN_colab
- 회귀 평가 지표
- 로지스틱 회귀
- stratified k-fold
- PyQt5
- MaskRCNN환경구성
- 기사단원의무기
- spleeter
- docker
- seaborn.barplot
- MaskRCNN환경구축
- 프로그래머스
- flask모델서빙
- 객체 성능 평가 지표
- bargraph
- Python
- rogistic regression
- Today
- Total
노트와 노트
도커(Docker)란? 본문
딥러닝 모델을 개발하기에 앞서 모델 학습 환경을 구축하는 것은 매번 너무 번거롭고 귀찮은 숙제이다.
전 회사에 근무할 때, 프로젝트에서 도커를 사용해본 적 있는데 도커에 대해 잘 알고 사용한 것은 아니었지만 이렇게 간단하다니 하고 놀랐던 기억이 있다. 모두의 PC 환경이 다른데도 어디서나 동일한 스택으로 간단하게 동작한다는 것이 너무나 맘에 들었다. 그간 모델 학습 환경을 구축하는 데에 쏟은 시간이 적지 않았기에 ㅜㅜ
그 당시에는 사실 도커나 컨테이너의 개념에 대해 잘 모르는 상태로 가이드를 보고 컨테이너를 실행해서 컨테이너 환경에서 모델을 학습하고, 테스트하고, Dockerfile을 만들고, 이미지를 빌드하고... 뭐 요 정도만 했어서 앞으로 도커를 계속해서 이용하려면 제대로 알아 두는 게 좋을 것 같아 차근차근 도커에 대해 공부해보려고 한다.
도커(Docker)란?
애프리케이션을 개발, 제공 및 운영하기 위한 컨테이너 기술을 기반으로 한 오픈소스 가상화 플랫폼이다.
도커의 핵심은 컨테이너화된 애플리케이션은 어떤 환경에서든 기존과 동일한 기술 스택에서 그대로 동작하는 것이다.
오늘날 어떠한 앱 하나를 개발하려면 코드를 작성하는 것보다 훨씬 많은 것이 필요하다. 여러 언어, 프레임워크, 아키텍처, 개별 수명주기를 가진 도구 간 불연속적인 인터페이스로 인해 발생되는 복잡성까지... 도커는 이러한 Workflow를 단순화하고 가속화하여 개발자가 조금 더 편리하게 앱 개발을 할 수 있도록 돕는다.
도커 아키텍처(Docker Architecture)
도커는 내부적으로 Client-Server(DOCKER_HOST) 구조를 사용한다. Client와 Docker host의 Docker daemon은 UNIX 소켓 혹은 네트워크 인터페이스를 통해 REST API 요청을 통해 통신한다.
- Client: 도커를 설치한 곳. docker build(도커 이미지 빌드 명령어), docker pull(도커 이미지를 내려받는 명령어), docker run(컨테이너를 실행시키는 명령어) 등의 도커 명령어를 수행.
- DOCKER_HOST: 컨테이너와 이미지를 관리하는 서버.
- Docker daemon: 컨테이너를 생성하고 관리하는 주체인 도커 엔진(Docker Engine)을 의미.
- Registry: 도커 이미지 저장소. Docker Hub(Public docker registry)를 기본 값으로 사용하며 다른 사람들이 공유한 이미지를 도커 호스트에 가져오거나(pull) 올릴 수(push) 있음.
컨테이너(Container)란?
컨테이너(Container)란, 애플리케이션이 어떠한 컴퓨팅 환경에서도 빠르고 안정적으로 실행될 수 있도록 코드 및 모든 종속성을 패키지화하는 소프트웨어의 표준 단위이다. 한 마디로 코드부터 앱이 구동되는 환경까지 모두 포함된 격리 기술이다.
도커 이미지(Docker Image)란?
코드, 런타임, 시스템 도구, 시스템 라이브러리 및 설정 등 애플리케이션을 실행하는 데 있어 필요한 모든 것을 포함하는 경량의 독립형 실행 가능 소프트웨어 패키지이다.
도커 컨테이너 이미지는 런타임 시 컨테이너가 된다.
도커 컨테이너 VS 도커 이미지
도커 이미지(Docker Image) | 도커 컨테이너(Docker Container) |
컨테이너의 설계도(Container blueprint) | 도커 이미지 인스턴스(Docker image instance) |
변형 불가(Immutable) | 쓰기 가능(Writable) |
컨테이너 없이 존재 가능 | 이미지를 실행시켜야 존재할 수 있음 |
컴퓨팅 자원을 필요로 하지 않음 | 실행을 위해 컴퓨팅 자원 필요 |
공개/비공개 레지스트리 플랫폼으로 공유 (대표적인 예:Docker Hub) |
이미 실행중인 개체는 공유 필요 없음 |
단 한 번만 생성 | 같은 이미지로부터 다수의 컨테이너 생성 |
※표 출처: R, Python 데이터 분석과 프로그래밍의 친구 https://rfriend.tistory.com
R, Python 분석과 프로그래밍의 친구 (by R Friend)
R, Python 분석과 프로그래밍, 통계, Machine Learning, Greenplum, PostgreSQL, Hive, 분석으로 세상보기, 독서일기
rfriend.tistory.com
도커 컨테이너(Docker Container) VS 가상머신(Virtual Machine)
그렇다면 기존의 가상화 기술과의 차이점은 무엇일까?
도커 컨테이너
- 코드와 종속성을 함께 패키징하는 앱 계층의 추상화
- 여러 컨테이너는 동일한 시스템에서 실행될 수 있음 -> OS 커널을 다른 컨테이너와 공유할 수 있음
- 각 컨테이너는 사용자 공간에서 격리된 프로세스로 실행됨
- 가상화된 공간을 생성할 대 리눅스 자체 기능을 이용하므로 성능 손실 없음
- 컨테이너는 VM에 비해 공간을 덜 차지하고(컨테이너의 크기는 일반적으로 수십 MB 수준임) 더 많은 애플리케이션을 처리할 수 있으며, 더 적은 수의 VM 및 운영 체제가 필요함
가상 머신
- 하나의 서버를 여러 서버로 바꾸는 물리적 하드웨어의 추상화
- 하이퍼바이저(Hypervisor)를 사용하며 단일 시스템에서 여러 VM을 실행할 수 있음
- 시스템 자원을 가상화하고 독립된 공간을 생성하는 작업은 Hypervisor를 거치므로 성능 손실이 있음
- 각 VM에는 운영 체제, 애플리케이션, 필수 바이너리 및 라이브러리의 전체 복사본이 포함되어 있으며 수십 GB에 달함
- 크기가 크기 때문에 부팅 속도가 비교적 느림
즉, 도커 컨테이너는 독립된 격리 공간을 생성할 때 가상 머신과는 달리 성능 손실이 없고, 용량이 작으며 배포 및 부팅 속도가 빠르다는 차이점이 있다.
도커를 도입하여 클라우드 환경으로 이주할 때의 장점
기존 조직에서 애플리케이션을 클라우드 환경으로 이주할 때의 선택지는 1) 서비스로서의 인프라(IaaS), 2) 서비스로서의 플랫폼(PaaS)이 있었다. 두 가지 방법은 모두 일장일단이 있으며 비교하면 다음과 같다.
서비스로서의 인프라(IaaS) | 서비스로서의 플랫폼(PaaS) |
IaaS: | PaaS: |
이주 과정이 쉬움: 어플리케이션의 각 컴포넌트를 가상 머신에서 동작시킴 | 이주 과정이 까다로움: 기존 애플리케이션의 각 컴포넌트를 하나씩 클라우드의 managed service로 이주해야 함 |
어플리케이션이 특정 클라우드에 종속되지 않음 | 애플리케이션이 특정 클라우드에 종속됨 |
운영비가 비싸며 가상 머신의 성능을 온전히 활용하지 못함 | 운영비가 저렴하고 관리가 쉬움 |
도커를 도입한 클라우드 이주 과정
도커를 도입하게 되면 애플리케이션의 각 컴포넌트는 컨테이너에서 동작하게 되며, 이들 컨테이너는 VM처럼 독립적이지만 경량이며 PaaS의 managed service처럼 효율적이다. 또한 도커화된 애플리케이션은 이식성이 뛰어나 Azure Kubernetes같은 서비스는 물론이고 AWS, 데이터 센터로도 별도의 수정 없이 이주할 수 있다.
'Docker' 카테고리의 다른 글
[Docker] 자주 쓰는 명령어 정리 (1) | 2024.03.29 |
---|