불친절한 블로그

[Docker] 왜 docker를 써야되지? 본문

IT Infrastructure

[Docker] 왜 docker를 써야되지?

오누! 2020. 3. 31. 14:04
728x90
반응형

Docker는 반 가상화보다 경량화된 방식이고. 게스트 OS를 설치하지 않는다. 그리고 Docker에서는 분리된 공간을 이용해 서버 운영을 위한 프로그램과 라이브러리를 쉽게 설치할 수 있다. 하드웨어를 가상화하는 계층(Hyper-V)이 없으며, 호스트의 자원을 직접 이용하기 때문에 메모리 접근, 파일시스템, 네트워크 속도가 가상머신에 비해 월등히 빠르다. 그러므로, 메인 호스트와 Docker의 컨테이너 사이의 계층과 성능차이는 크게 발생하지 않는다.


솔직히 와닿지 않는다.

정말 docker가 편한지가 알고 싶다.

1 개발 프로그램 설치와 삭제가 매우 쉽다. 5분이면 된다. (elk, reids, mongodb, oracleDB, mysql) 등등. 직접 패키지 인스톨(yum, apt-get, brew)과 소스코드 빌드 등등의 모든 일련의 작업들이 필요없게 된다.

2 Docker의 컨테이너에 대한 개념은 network에 대한 지식 그리고 cloud platform(GCP, AWS, Azure)의 이론을 간접적으로 맛볼 수 있다.

3 극 초기의 각종 셋팅을 포함한 아키텍쳐를 만들때, 스크립트로 짜 놓기만하면 모두가 같은 환경을 이용할 수 있다. 그리고 이 환경을 모두와 공유도 할 수 있으며, 배포용으로도 사용할 수 있다. 실제 서비스 배포시에는 Docker환경에서 점진적 scale out 전략을 선택하는 방법도 고려해볼만 하다.

※ 복잡한 개발 프로그램을 쉽게 설치하고 삭제할 수 있는 시간을 단 5분도 안걸리게 만들어준다.

Docker

Docker는 LXC(LinuX Container)에서 사용하는 리눅스 커널 컨테이너 기술을 이용해 만든 컨테이터 관리 유틸리티이며, Build, Ship, Run Docker는 서비스 운영환경을 묶어서 손 쉽게 배포하고 실행하는 경량컨테이너 기술이다.

● Docker는 2013년 docker.inc에서 출시한 오픈소스 컨테이너 프로젝트

● AWS, Google Cloud Platform, Azure 에서 공식 지원중

Docker의 로고

존재하지 않는 이미지입니다.

● 컨테이너를 싣고 다니는 고래

● Build, Ship, Run

● Docker는 부두 노동자를 의미함, 컨테이너를 다루는 Docker의 기능과 비슷함

● 고래는 서버에서 여러 개의 컨테이너(이미지)를 실행하고 이미지 저장과 배포(운반)을 의미

Docker의 특징

1 컨테이너 이미지 생성 및 공유할 수 있다. 그러기 위해서 Docker에서는 github처럼 docker hub란것이 존재한다.

2 docker-compose라는 여러 Docker 컨테이너를 통합적으로 관리하는 cli 프로그램으로써 docker를 설치하면 번들로써 제공한다. docker-compose.yml 파일을 이용하면 컨테이너들의 구성(아키텍쳐)을 공유할 수 있다.

3 컨테이너 기반을 이용하여 단순한 저장공간 컨테이너(볼륨)를 만들어 저장공간을 container끼리 연결할 수 있으며, 실행한 호스트의 저장공간에도 접근가능하다.

4 Docker는 게스트 OS를 설치하지 않는다. 단지 이미지에 서버 운영을 위한 프로그램과 라이브러리만 격리해서 설치하기 때문에 이미지 용량이 크게 줄어든다.

5 Docker의 컨테이너는 OS를 설치하지 않기 떄문에 호스트와 OS자원을 직접 사용한다.(공유…? 라기보다 사용임…)

6 Docker는 하드웨어 가상화 계층이 존재하지 않기 때문에 메모리접근, 파일접근 등등 관련한 기능에서 직접 접근하기 때문에 가상화보다 빠른 성능을 보여준다

7 Docker프로그램에서 다양한 API를 제공하기 때문에 원하는 만큼 자동화가 가능하다. 이 점은 개발과 서버운용에 매우 유용하다.

Docker에서 컨테이너(Container) 의 특징

Docker에서 컨테이너는 이미지를 실행한 상태이며, 이미지를 여러개의 컨테이너로 만들수있는 하나의 격리된 공간이다. Docker는 Dockerfile파일을 이용하여 컨테이너를 구성할 수 있다. 아무런 docker프로젝트에 들어가서 프로젝트안에 있는 Dockerfile를 아무 지식없이 열어보면 해당 이미지를 만들어내기 위한 인스톨 및 작업에 대한 명령어들이 모아져있는것을 알 수 있다. Docker는 컨테이너를 만들때 스크립트의 조합으로 만들 수 있다. Docker의 컨테이너는 스크립트로만 만들긴 하는데.. 그럼 그 스크립트를 구동시키는 기본적인 Guest OS는 script로 만들어지지 않는데… Docker의 컨테이너는 두 타입으로 나눌 수 있다. 베이스 컨테이너애플리케이션 컨테이너 이때 의문이었던 script를 구동시키는것이 바로 베이스 컨테이너이고, 여러 프로그램을 붙이고 구성해놓은것이 바로 애플리케이션 컨테이너이다.

운영체제로 보면 이미지는 실행파일, 컨테이너는 프로세스 즉, Docker는 특정 실행파일 또는 스크립트를 위한 실행 환경

컨테이너는 가상화보다 훨씬 가벼운 가상화 기술이다. 리눅스 안에 있는 컨테이너 기술을 이용하여 가상공간을 만든다. 하지만, 그 만들어진 공간안에 실행파일은 호스트에서 직접 실행한다. 어찌 보면 컨테이너는 가상화가 아닌 격리의 개념과도 같다. 이 컨테이너 기술은 리눅스의 LXC의 cgroups 와 namespaces가 제공하는 기술 컨테이너에 대한 내용은 아래 링크를 반드시 참조한다.

가상머신과 Docker의 특징

존재하지 않는 이미지입니다.

가상머신의 특징

가상머신은 완전한 컴퓨터라 항상 게스트 OS를 설치해야 한다. 그래서 이미지 안에 OS가 포함되기 때문에 이미지 용량이 커진다.

게스트 OS는 넘나 무겁다. 전 가상화 방식의 느린 속도를 개선하기 위해 반 가상화를 내 놓았지만, 반 가상화라는것도 도찐개찐 무겁다.

Docker의 특징

Docker는 반 가상화보다 경량화된 방식. 게스트 OS를 설치하지 않음. Docker이미지에 서버 운영을 위한 프로그램과 라이브러리를 격리해서 설치할 수 있다.

하드웨어를 가상화하는 계층(Hyper-V)이 없기 때문에 메모리 접근, 파일시스템, 네트워크 속도가 가상머신에 비해 월등히 빠름

메인 호스트와 Docker의 컨테이너 사이의 계층과 성능차이는 크게 발생하지 않는다.

728x90
반응형
Comments