일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 프로세스
- DP
- g1gc
- BFS
- springboot
- 문제풀이
- Markdown
- 브루트포스
- 그래프 탐색
- Python
- 그리디
- 면접복기
- 이진탐색
- 몬티홀
- 분할정복
- deque
- 정수론
- 빌더패턴
- Stack
- 적정 스레드
- Greedy
- 배열 돌리기1
- 마크다운
- 그래프탐색
- GC
- 회고
- GarbageCollector
- github
- 구현
- 백준
- Today
- Total
FeelingXD
[Docker] Docker 와 VM🐬 본문
이 글에서는 가상화 종류인 Docker에 대해서 작성합니다.
Docker
Docker는 Docker , inc 가 개발중인 컨테이너 환경을 제공하기 위한 소프트웨어입니다.
Docker는 애플리케이션이 움직이는 환경을 컨테이너라는 단위로 가상화하고, 이 컨테이너형 가상화 뿐만아니라 컨테이너의 베이스가 되는 이미지를 효율적으로 만드는(빌드) 기능과 이미지를 배포하기 위한 구조(Docker Hub)도 갖추고 있는 것이 특징입니다.
이 글에서는 Docker의 구조 특히 컨테이너형 가상화와 이미지에 관한 부분을 간단하게 설명합니다.
VM 과 Docker
Docker가 제공하는 가상화의 큰 장점은 효율성입니다. 이 효율성은 도커가 컨테이너 형식의 가상화를 제공하기 때문에 실현되는것인데 지금까지 사용되었던 기타 가상화 프로그램( VMware 등) 은 호스트 컴퓨터위에 전 가상화를 한 서브컴퓨터 를 실행합니다.
docker(좌) 환경이 vm(우) 환경보다 더 가벼운 형태를 취한다.
docker 는 다음과 같은 형태이다. 인프라 -> hostOS -> dockerEngine -> application,A,B,C .. .
VM 은 다음과 같은 형태이다. 인프라 -> 가상화 -> application a,b,c
단계순서는 vm이 더적어보인다 하지만 각 어플리케이션마다 실행 OS 가 들어있기 때문에 환경에 따라 다르겟지만 기본적으로 VM 이 실행하는 프로그램이 더 무거울 수 있습니다.
컨테이너 가상화
DockerEngine(Docker 구동기)는 기본적으로 VM과 달리 따로 OS를 포함하지않는 대신 HostOS에서 자원을 할당받아 사용합니다. docker container 에서 자원이 필요할때 host의 커널을 통해 자원을 사용하게 됩니다.
이때의 장점은 hostOS 가 각 컨테이너를 프로세스 단위로 실행하고 자원양을 조절할 수 있습니다. 또 문제되는 컨테이너를 재실행 하는등 추가작업에도 hostOS가 직접 관여할 수 있스빈다.
반면 VM 의 경우 hostOS 위에 hiperVisor로 각 가상화를 실행합니다. 자원분배는 다음과 같이 진행됩니다. hostOS -> hypervisor -> guestOS 이과정속에서 hostOS는 Hypervisor에 할당한 자원만 알 수있고 그위에 실행되는 guestOS 등 실행에 관여할수는 없습니다. 시스템 프로세스에는 한프로세스로 표시되기에 자원이 어떻게사용되는지 추적하는데 어려움이 있습니다.
그럼 Docker가 항상 좋은거 아닌가요 ?
항상 기술에는 tradeoff가 있듯 VM과 docker 도 마찬가지 입니다. docker의 장점은 hostOS를 공유하고 각 컨테이너가 hostOS의 자원을 사용할 수 있기에 성능 면에서 이점이 있을수있지만 만약 외부로 공개된 docker contianer 에서 커널을 접근할 수 있다면 이는 hostOS의 제어 또한 할수 있음을 의미합니다.
반면 VM 의경우 hostOS위에 각각의 OS를 실행하므로 가상화 컴퓨터접속후 커널을 공격당해도 hostOS위의 OS의 커널이 공격당한거기에 hostOS는 docker의 경우에 비해 안전하다고 할 수 있습니다.
VM 과 Docker를 같이 써볼까? ✨
그럼 docker를 안전하게 사용하기위해서 어떤방법을 사용할 수 있을까요 ? 바로 VM과 같이 사용하는 방법입니다.
🤔 그럼 두가지 단점을 혼합하는 방법아닌가요 ? VM은 보안상의 이점이 있지만 guestOS 무게로 인해 무거워 지지 않을까요 ?
최근 에 VM 상품들 또한 과거보다 개선된 경량OS 를 제공하고 있습니다. 이를 통해서 VM환경이라도 가벼운 GuestOS를 생성하여 각각의 머신을 돌릴수있습니다. 그리고 그위에 DockerContianer를 배치 해서 기존에 docker의 취약한점을 VM으로 보완하는 방법을 사용하는거지요. 또 이런 방법은 각 guestOS 마다 dockerengine 이 다르므로 공격이오더라도 해당 guestOS 를 사용중지하는등의 방법으로 보호할수 있고 다른 GuestOs를 통해 서비스를 지속할수도 있습니다.
참고한글
'프로그래밍' 카테고리의 다른 글
[Kotlin] - 코틀린 컴파일 과정 (0) | 2024.06.22 |
---|---|
[Git] - Git 브랜치 전략 😸 (0) | 2024.06.01 |
Λ - 람다 함수가 뭐에요? 🤔 (0) | 2024.02.05 |
객체 지향 프로그래밍 .md 👀 (0) | 2024.01.22 |