Docker 가 왜 필요한가?
새로운 환경에 개발환경을 구성한다고 가정해 보자. 스프링 환경을 구축한다면 자바, DB, 메시징 큐 등의 여러 개발 필수 요소들을 설치해야 한다. 이는 오래 걸리기도 하고 OS마다 다른 호환성, 개발/스테이지/운영 서버 각각에 맞는 환경을 해줘야하는 번거로움이 있다. 이를 해결하기 위해 도커가 필요하다.
Docker는 무엇을 할 수 있는가?
하나의 OS 에 Docker를 도입함으로써 아래와 같은 예시로 여러 개의 컨테이너를 가동할 수 있다.
- Web Server Container
- Database Container
- Messaging Container
이 서비스들은 분리된 컨테이너에서 각각의 의존성과 라이브러리를 갖추므로 분리된 환경을 구성할 수 있다.
이는 협업적인 측면에서도 여러명의 개발자가 하나의 환경을 바라보기 때문에 통일성을 갖출 수 있다.
Container란 무엇인가
컨테이너란 완전히 분리된 환경으로 각자의 프로세스, 서비스, 네트워크 인터페이스 등을 가상 머신처럼 가지지만 동일한 운영 체제 커널을 가지는 것을 말한다.
여기서 동일한 커널이란 만약 ubuntu에 docker가 설치되어 있다고 가정하자.
그러면 리눅스 커널을 가지므로 Debian, Fedora, SUSE, CentOS 등의 OS에 기반한 컨테이너를 실행할 수 있다.
즉 Docker는 모든 운영 체제와 호환되는 Docker 호스트의 기반 커널을 활용하는 것이고 이 Docker에서는 Windows 기반 컨테이너를 실행할 수 없다.
그러면 Windows 기반의 Docker에서 Linux기반 컨테이너를 돌리는 것은 무엇이냐는 의문이 생기는데 이는 Windows 위의 Linux 가상머신 위의 Linux 컨테이너이다.
가상 머신과 컨테이너의 차이점
- 가상머신 : 하드웨어 인프라 - 하이퍼바이저 위에 올라가는 형태로 각 가상머신은 개별적으로 OS를 가지고 있다
- 컨테이너 : 하드웨어 인프라 - OS - Docker 위에 올라가는 형태로 각 컨테이너는 OS를 가질 필요 없이 어플리케이션, 라이브러리, 의존성등만 가지면 된다
가상머신의 경우 여러개의 운영체제와 커널이 실행되므로 많은 리소스를 사용한다. 또한 무거워서 용량을 많이 차지하기 때문에 간단한 부팅에 경우도 오래 걸릴 수 있다.
컨테이너의 경우 운영체제, 커널에 의존하지 않아 서로 다른 운영 체제의 다른 애플리케이션을 실행할 수 있다.
그럼 컨테이너만 사용해야할까? 꼭 그렇지만은 않다. 컨테이너와 가상 머신을 함께 사용하는 경우도 있다
수천 개의 Docker 호스트의 수천 가지 앱을 실행하고자 한다면 여러 개의 가상머신 안에 컨테이너를 구현하는 방법이 있다.
이미지와 컨테이너
이미지는 컨테이너를 만드는데 사용되며 컨테이너는 서로 분리된 이미지 인스턴스가 실행되는 곳이다.
이 이미지는 Docker hub에 업로드도 가능하며 다운로드 또한 가능하다.
'프로그래밍 > Docker' 카테고리의 다른 글
따배쿠 정리 2 - PC에 쿠버네티스 설치하기 (0) | 2023.08.16 |
---|---|
Docker Run 명령어 (0) | 2023.05.15 |
Docker 명령어 (0) | 2023.04.05 |