영호
[Docker] Docker와 VM(Virtual Machine)비교 본문
[Docker] Docker와 VM(Virtual Machine) 비교
개요
express랑 AWS 공부할 겸 간단한 express api 만들고 AWS ec2로 배포하려는데 자꾸 node 버전 문제로 안햐 npm install에서 자꾸 에러가 발생해 배포에 애를 먹었다. 그래서 해결방안을 찾던 도중 Docker가 생각났고, 왜 요새 Docker나 Kubernetes 플랫폼을 사용하는지 VM(Virtual Machine)과 비교하면서 알아봤다.
VM(Virtual Machone)의 구조
- 호스트 OS위에 애플리케이션 별로 guest OS가 존재한다.
- 게스트 OS를 구동하려면 필요한 자원을 할당받아야 한다.
- 호스트 OS위에 VM 띄우고 필요한 자원을 할당하고, 게스트 OS 부팅해서 애플리케이션 실행하는 방식.
- 그래서 VM이 많아질수록 자원 한정된 자원에서 할당해줘야 하는 자원이 늘어나기 때문에 부담이 생긴다.
Docker란?
- 로고에서 알 수 있듯이 내가 만든 서비스를 이미지로 만들어서 어느 환경에서든 이미지를 받아서 컨테이너로 실행 가능하게 해 준다.
- 즉, 컨테이너 안에는 해당 서비스가 실행 가능한 환경 설정들이 들어있다. 아래 2개는 공식문서 설명
- Docker는 애플리케이션을 신속하게 구축, 테스트 및 배포할 수 있는 소프트웨어 플랫폼입니다.
- Docker를 사용하면 환경에 구애받지 않고 애플리케이션을 신속하게 배포 및 확장할 수 있으며 코드가 문제없이 실행될 것임을 확신할 수 있습니다.
Docker 이미지? 컨테이너?
- 도커 이미지 : 도커 컨테이너를 구성하는 각종 설정들이 들어간다. 컨테이너의 설계도.
- 도커 컨테이너 : 도커 이미지를 실행한 상태. 이미지의 인스턴스 같은 느낌.
Docker 실행 과정
- Dockerfile을 작성한다.
- 해당 Dockerfile로 Docker image를 빌드한다.
- 만들어진 Docker image를 실행한다.
Docker의 장점
- 개발환경과 자신의 로컬 환경을 맞출 필요가 없어진다.
- Docker가 깔려있다는 전제하에 간단하게 Docker image만 있으면 애플리케이션 실행이 가능하다.
- 각 애플리케이션들은 Docker엔진 위에서 동작하기 때문에 어플리케이션 별로 따로 자원을 할당하지 않아도 된다.
- Docker Hub를 제공해줘서 Docker hub에 있는 이미지 중 원하는 것을 받아와 실행할 수 있다.
- ex) MySQL, MongoDB, Jenkins
Docker 구조
- 일단 VM과 가장 큰 차이 게스트 OS가 없다! (벌써 가볍다!)
- Docker container들은 호스트 OS를 공유하며 격리된 process로 동작한다.
- Docker는 각 container들을 별도의 가상 환경으로 동작시키기 위해 Linux의 namespace, cgroup 기능을 이용한다고 합니다.
- 도커는 도커 엔진 위에 애플리케이션 실행하는데 필요한 자원만 할당하기 때문에 VM보다 매우 가볍다.
결론
도커 승!!!
'Docker' 카테고리의 다른 글
[Docker] Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? (0) | 2022.06.04 |
---|---|
[Docker] AWS EC2 Linux docker setting (0) | 2022.05.19 |
Comments