본문 바로가기

환경/Docker

Docker 에 대해서 알아보자!

요즘 개발 환경에서 떠오르고 있는 Docker 에 대해서 공부해보기로 했습니다.

Docker 와 가상머신

가상머신은 가상머신에 리눅스를 설치한 뒤 서버와 DB를 설치하고 개발한 Application 또는 웹사이트를 실행합니다.

이렇게 세팅한 가상 머신 이미지를 여러 서버에 복사해서 실행 하면 이미지 하나로 여러 서버를 계속 만들어낼 수 있습니다.

보통 가상 머신 서버는 독자적으로 운영하거나 서비스 형태로 제공 하는 AWS, Microsoft Azure 를 사용하기도 합니다.

이런 가상 머신을 사용하다보니 리얼 서버에 비해 속도가 느리다는 단점이 생깁니다.

그래서 위의 가상 머신 그림과 같이 반가상화 방식이 개발이 되었습니다.

하지만 가상 머신이기 때문에 Guest OS 를 무조건 설치해야 하므로 이미지 안에 OS가 포함되어 이미지 용량이 커지는 상황이 발생됩니다.

따라서 반가상화를 하여 속도가 빨라진 대신 가상화 이미지의 용량이 커져 이미즈를 주고 받는 데에 부담스러워지는 현상이 나타납니다.

이때, Docker 를 통해 반가상화 보다 좀더 경량화 된 방식이 나옵니다.

Docker 이미지에 서버 운영에 필요한 프로그램과 라이브러리만 격리해서 설치할 수 있고, OS 자원은 호스트와 공유합니다.

이렇게 되면서 이미지 용량이 크게 줄어들게 됩니다.

또한 가상화 레이어가 없기때문에 파일 시스템, 네트워크 속도도 가상머신에 비해 월등히 빠른 속도를 가지게 됩니다.

Docker 는 Git 에서 소스를 관리하는 것처럼 이미지 버전 관리 기능을 제공하고 있습니다.

중앙 관리를 위해 저장소에 이미지를 올리고 받을 수 있는 기능 또한 제공 되어 dOCKER 이미지를 공유할 수 있는 Docker Hub 가 제공됩니다.

다양한 API를 제공하기 때문에 원하는 만큼 자동화를 할 수 있어 개발과 서버 운영에 매우 유용합니다.

 

리눅스 컨테이너

리눅스는 운영체제 레벨에서 가상화 제공했습니다.

OS 를 통째로 가상화하는 것이 아닌 리눅스 커널 레벨에서 제공하는 일종의 격리된 가상공간입니다.

리눅스 컨테이너는 격리된 공간만 제공할 뿐 개발 및 서버 운영에 필요한 부가기능이 부족했습니다.

Docker 는 리눅스 컨테이너를 기반으로 편리하게 이미지를 관리하고 배포할 수 있도록 하는 기능을 제공하고 있습니다.

※ 즉 리눅스 Kernel 기능 안에 chroot, namespace, cgroup 과 같은 기능을 활용하여 만들었습니다. 다른 Window 나 IOS .서버에서 사용 시 해당 독립적인 공간을 활용할 수 있도록 설정해줘야합니다. 

 

Docker 이미지와 컨테이너 

이미지란 필요한 프로그램 또는 라이브러리, 소스를 설치한 후 파일로 만든 것을 말합니다.

컨테이너란 이미지를 실행한 상태를 말합니다.

이미지는 여러개의 컨테이너를 만들 수 있습니다. 

즉, 운영체제 관점에서 이미지는 실행 파일이고 컨테이너는 프로세스를 의미합니다.

 

Docker가 필요한 이유

리눅스/ 유닉스 환경에서는 파일 실행이 필요하면 모든 구성 요소가 잘게 쪼개어져 있습니다.

시스템 구조가 단순해지고 명확해지는 장점이 있지만 의존성 관계를 해결하기 어렵다는 단점이 있습니다.

이 문제를 해결하기 위해 리눅스 배포판 별로 패키지 시스템이 나왔지만 일일이 소스 컴파일을 하거나 패키지를 설치해야 한다는 단점이 있습니다.

서버가 한두대라면 큰 어려움이 없지만 클라우드 환경에서 여러 개 서버를 생성할 경우 하나씩 서버를 설치하는 것이 힘듭니다.

그래서 이 모든 문제를 해결하기 위해 Docker 이미지를 활용하여 실행할 서버가 몇개가 되든 배포하여 올리는 방법이 나왔습니다.

 

해당 내용은 다음 URL에서 더 자세하게 알 수 있습니다.

http://pyrasis.com/Docker/Docker-HOWTO

 

PYRASIS.COM: Docker 기본 사용법

Docker는 리눅스 서버를 손쉽게 패키징하고, 배포할 수 있도록 해주는 플랫폼입니다. 이 문서는 Docker 기본 사용법 강좌입니다.

pyrasis.com

 

'환경 > Docker' 카테고리의 다른 글

Ubuntu 환경에서 Docker 설치하는 방법  (0) 2022.09.21