Docker 란 무엇인가?
- 컨테이너 기반 가상화 도구
- 애플리케이션을 컨테이너 라는 단위로 격리하여 실행하고 배포하는 기술
Docker 가 소개하는 Docker란?
- Open Platform
- 어플리케이션을 인프라에서 분리해준다
- 신속하다
- 인프라를 어플리케이션을 관리하는 것 처럼 관리 할 수 있다.
- 코드 배포에 용의하다.
Container 란 무엇일까 ? 1
- 컨테이너는 가상화 기술 중 하나
- 호스트 운영체제 위에 여러 개의 격리된 환경을 생성한다.
- 각각의 컨테이너 안에서 어플리케이션을 실행한다.
가상화 (Virtualization) 기술이란 무엇일까?
- 하드웨어 리소스(프로세서, 메모리, 저장소 등)를 추상화 하는 것이다.
- 가상화의 예
- 메모리 가상화
- 하드웨어 가상화(Hypervisor 기반)
- 컨테이너 가상화
- 네트워크 가상화
가상 머신이란 무엇일까?
하나의 물리적인 컴퓨터 자원(CPU, 메모리, 저장장치 등)을 가상적으로 분할하여 여러 개의 가상 컴퓨터 환경을 만들어 내는 기술이다.
이를 통해 물리적인 컴퓨터 자원을 더욱 효율적으로 사용할 수 있으며, 서버나 애플리케이션 등을 운영하는데 있어 유연성과 안정성을 제공한다.
더 깊게 들어가보자
Bare Metal
하드웨어 상 어떠한 소프트웨어도 담겨 있지 않은 하드웨어를 가장 기본적인 상태다.
그래서 베어메탈에 운영체제를 설치하면, 우리가 일반적으로 알고 있는 서버 컴퓨터, 컴퓨터 노드가 된다.
- 베어메탈 서버는 가상화를 위한 하이퍼바이저 OS 없이 물리 서버를 그대로 제공하는 것을 말한다
- 하드웨어에 대한 직접 제어 및 OS 설정까지 가능
가상 머신, 가상화
가상의 베어메탈을 만드는 일련의 기술들을 의미한다. 가상의 컴퓨터를 만드는 기술, 에뮬레이션과 매우 비슷한 개념이다.
근데
에뮬레이션 - 보통 이기종의 하드웨어에서 작동하는 소프트웨어를 실행하는 목적
가상화 - 현재 사용 중인 하드웨어에서 구동 할 수 있는 소프트웨어를 실행하는 목적
- 베어메탈에 하나 이상의 가상 머신을 만든다. 이 가상머신에 운영체제를 올리고 애플리케이션을 실행한다.
하이퍼바이저
하이퍼바이저는 VM들이 각자 자신의 가상 운영체제, 즉 게스트 운영체제를 실행하고 관리하는 걸 도와준다.
그리고, 호스트 머신들이 자원을 VM들에게 분배할 수 있도록 도와주는 역할을 한다.
가상화의 장점
- 여러 개의 논리적 운영체제 작동
- 여러 서버를 모아서 자원의 사용률 개선
- 풀(pool) 개념을 사용, 자원에 대한 빠른 전개 및 회수 가능
- 어플리케이션을 완전히 격리함으로써 멀티테넌시 환경 구성
- 멀티테넌시: 서로 다른 고객이 서버 리소스를 나누어 사용하는 공유 호스팅
가상화의 단점
- 완전한 운영체제가 올라가기 때문에 대량의 메모리가 필요하다.
- 프로세스는 빠른 컨텍스트 전환과 sleep 상태로, 여러 개의 VM들이 CPU 경쟁을 해도 크게 문제가 되지 않는다, 근데 메모리는 CPU 만큼 빠르게 전환 할 수 없다.
- 운영체제가 메모리를 많이 잡아 먹는다 -> 우분투 리눅스 OS 유지하는 것만으로도 500M 정도의 메모리 소모
- 용량 이외에 CPU 성능 확보도 중요하다.
- CPU는 빠른 컨텍스트 전환이 가능 하기 때문에 어플리케이션간 CPU 경쟁이 분산 되지만, 어플리케이션의 요청이 중첩되는 걸 피할 수 없다.
- 어플리케이션의 CPU 요청이 중첩되면 어플리케이션의 응답시간이 늦어지는 문제가 발생한다.
- 가상화는 운영체제와 네트워크, 보안, 스토리지, 모니터링, 운영 등에 대한 통합된 지식이 필요하다. 효율적인 가상화 환경을 운용하기 위해서는 DevOps 와 같은 조직 구성이 필요하다.
Container 란 무엇일까? 2
- 리눅스 커널의 기능을 사용해서 만들어졌다.
- chroot: 파일 시스템을 격리
- namespace: 프로세스 격리
- cgroup: 하드웨어 자원 격리
- 프로세스 단위의 격리 환경을 가진다.
사실상 추상적인 개념으로, 컨테이너 처럼 작동하는 것을 상상하게끔 만들어졌다.
격리된 네트워크, CPU, 메모리, 디스크를 가진 공간을 만들고 이 공간에서 프로세스를 실행해서 유저에게 서비스 하는 것이다.
Container 장점
- 운영체제로 실행되지 않기 때문에 완전히 실행하기 전에는 자원을 소비하지 않는다.
- VM은 완전한 운영체제를 포함하기 때문에 설치하는 것만으로도 디스크 공간을 점유하지만, 컨테이너는 이미지로부터 Copy on write 방식으로 만들어지기 때문에, 그 자체로 디스크 공간을 점유하지 않는다.
- Copy On Write - 복사본과 원본이 리소스를 공유하고, 복사본이 수정되었을 때만 새 리소스를 만드는 리소스 관리 기법
Docker 란 무엇일까?
- 컨테이너 기반 가상화 도구
- 리눅스 컨테이너 기술인 LXC(Linux Container) 기반
- 어플리케이션을 컨테이너 라는 단위로 격리하여 실행하고 배포하는 기술
- 다양한 운영체제에서 사용할 수 있으며, 컨테이너화된 어플리케이션을 손쉽게 빌드, 배포, 관리 할 수 있는 다양한 기능을 제공한다.
- 위 기능을 통해 어플리케이션을 빠르게 개발하고, 효율적으로 배포, 관리 할 수 있다.
그래서 위와 같은 이점들을 얻기 위해 기존에 사용하던 VM을 대체할 Docker가 나오게 된 것이다.
다음에는 도커 아키텍처, 도커 볼륨 마운트에 대해서...