Docker 란?
docker 란 Go 언어로 작성된 리눅스 컨테이너 기반으로 하는 오픈소스 가상화 플랫폼이다.
향상된 컴퓨터의 성능을 더욱 효율적으로 사용하기 위해 가상화 기술이 많이 등장하였다.
서버 관리자 입장에서 CPU 사용률이 10%대 밖에 되지 않는 활용도가 낮은 서버들은 리소스 낭비일 수 밖에 없다.
그렇다고 모든 서비스를 한 서버 안에 올린다면 안정성에 문제가 생길수도 있다.
그래서 안정성을 높이며 리소스도 최대한 활용할 수 있는 방법으로 나타난게 서버 가상화이다.
대표적인 가상화 플랫폼으로는 VM 이 있다. 그렇다면 컨테이너란 무엇일까?
컨테이너란?
컨테이너는 가상화 기술 중 하나로 대표적으로 LXC( Linux Container ) 가 있다.
기존 OS를 가상화 시키던 것과 달리 컨테이너는 OS레벨의 가상화로 프로세스를 격리시켜 동작하는 방식으로 이루어진다.
- 가상화된 공간을 생성할때 리눅스 자체 기능을 사용하여 프로세스 단위의 격리 환경을 만듦
- 가상머신과 달리 커널을 공유해서 사용하므로, 컨테이너에는 라이브러리 및 실행파일만 있으므로 용량이 비교적 작음
- 위의 이유로 컨테이너를 만들때 배포하는 시간이 가상머신에 비해 빠르며, 사용할 때의 성능 손실 또한 거의 없음
VM 가상화 플랫폼 과 DOCKER 가상화 플랫폼 비교
기존에 우리에게 익숙한 VM 같은 경우엔 Host OS 위에 가상화를 시키기 위한 Hypervisor 엔진 그리고 그 위에 Guest OS 를 올려 사용한다. 이는 가상화된 하드웨어 위에 OS가 올라가는 형태로 거의 완벽하게 Host와 분리된다고 봐도 무방하다.
반면에 컨테이너 기반 가상화는 Docker 엔진 위에 Application 실행에 필요한 바이너리만 올라가게 된다.
OS 가상화를 보면 Host OS와 완전히 분리되는 장점은 있지만, OS위에 OS를 올리기 때문에 무겁고 느릴 수 밖에 없다.
하지만 컨테이너 기반 가상화는 Host OS 그리고 Docker 엔진 위에서 바로 동작하며 Host의 커널을 공유한다.
커널을 공유하게 되면 IO 처리가 쉽게 되어 성능의 효율을 높일 수 있습니다.
컨테이너를 사용하는 것은 가상 머신을 생성하는 것이 아니라 Host OS가 사용하는 자원을 분리하여 여러 환경을 만들 수 있도록 하는 것이다.
DOCKER 의 아키텍쳐
Docker Daemon
- Docker API 요청 수신, Image, Container, 네트워크와 같은 Docker 객체 및 Docker 서비스를 관리한다.
Docker Client
- Docker 사용자가 Docker와 상호작용하기 위한 방법으로 기본적인 Docker 명령어를 통해 Docker Daemon과 통신한다
- docker run과 같은 명령어를 이용해 Docker를 실행할 수 있다.
Docker Registry
- Docker 이미지 저장한다
- Docker Hub이라는 공용 Registry와 개인 private한 Registry에서 Docker이미지를 관리한다.
- 일반적으로는 Docker Hub이라는 공용 Registry에서 실행한다.
Docker Image
- 이미지 = 실행파일
- 컨테이너 실행에 필요한 파일과 설정값 등을 포함하고 있는 것으로 Immutable(불변적)하다.
- 이미지는 Docker Hub에 저장되고, 그곳에서 다운받아 사용할 수 있다.
'Docker' 카테고리의 다른 글
[DOCKER] Docker 이미지 및 컨테이너 정리 (0) | 2025.03.12 |
---|---|
[Docker] ec2 내에 docker, docker-compose 설치 (0) | 2024.12.19 |
Docker 명령어 (0) | 2024.05.08 |