[배포해보기 (1)] Docker에 대하여
웹 프로그래밍

[배포해보기 (1)] Docker에 대하여

728x90
반응형

DOCKER

Docker 가 개발에 있어 거의 모든 곳에서 사용되어가고 있다. 기업이든 개인개발환경이던 모든 곳에서 사용되고 있다.

 

Docker는 가상화(Virtualization)에 기반되어 있다.

"Docker는 Go언어로 작성된 리눅스 컨테이너 기반의 오픈소스 가상화 플랫폼이다."

 

Docker

 

 Docker를 이용하면 일반 OS를 사용하는 것과 비교해서도 거의 성능하락이 없다. 

 

1. 왜 가상화를 사용하는가?

 

모든 서비스를 한 서버안에 올린다면 안정성에 문제가 생길 수 있다. 그렇다고 여러 서버를 사용하기에도 이는 리소스 낭비로 볼 수 있을 것이다.  => 그래서 안정성을 높이면서 리소스도 최대한 활용할 수 있는 방법으로 나타난 것이 서버 가상화이다. (VM(Virtual Machine)이 대표적인 가상화 플랫폼)

 

2. 컨테이너란?

컨테이너는 가상화 기술의 하나이다. 기존 OS를 가상화 시키던 것과는 다르다. ( 컨테이너는 OS레벨의 가상화로 프로세스를 격리시켜 동작하는 방식 )

 

VM

VM의 경우 Host OS 위에 가상화를 위한 Hypervisor엔진 > 그 위에 게스트 OS를 올려 사용한다. (가상화된 하드웨어 위에 OS가 올라가는 형태로 거의 완벽하게 Host와 분리된다.)

 

컨테이너 기반

Docker 엔진 위에 어플리케이션 실행에 필요한 필요한 바이너리만 올라가게 된다. 

Docker 

OS 가상화의 경우 Host OS와 완전히 분리된다는 장점이 있지만 OS위에 OS를 올리기 때문에 무겁고 느리다. 하지만 컨테이너 기반 가상화는 Host OS 그리고 Docker 엔진위에서 바로 동작하면서 Host의 커널을 공유한다. 커널을 공유하면 IO처리가 쉽게 되어 성능의 효율을 높일 수 있다. 

 

컨테이너를 사용한다는 것 => 가상머신(VM)을 생성하는 것이 아니라 Host OS가 사용하는 자원을 분리해 여러 환경을 만들 수 있도록 하는 것.

 

3. Docker Image

docker image는 컨테이너를 실행할 수 있는 실행파일, 설정 값들을 가지고 있는 것이다. Docker 이전의 컨테이너 기술들에서는 컨테이너의 환경을 완전하고 효율적으로 복원하는 것이 어려운 일이었다.

도커는 이를 파일을 계층으로 나누어 저장할 수 있는 유니온 마운트(Union mount) 기술과 도커 허브(Docker Hub) 라는 원격 저장소를 기본적으로 제공함으로써 해결하였다.

 

이미지는 위와 같이 만들어진다. ubuntu 이미지를 만들기 위해 레이어 A,B,C가 들어가고 nginx 이미지를 만든다면 이미 만들어진 우분투 이미지를 베이스 이미지로 하여 위에 nginx만 더하게 된다. 그리고 web app 이미지를 만들려면 만들어진 nginx 베이스이미지에 webapp을 올려 이미지를 만들게 되는 것이다. 

728x90
반응형