Section1. 도커란 무엇인가
현재 대부분 백엔드 프론트 등 다양하게 사용됨
컨테이너 기술느슨한 결합
도커 = 데이터 또는 프로그램 을 격리시키는 기능
일반적으로 서버에서 많이 사용중

다양한 프로그램과 데이터를 각각 독립된 환경에 격리하는 기능을 제공함
컨테이너: 독립된 창고에 데이터나 프로그램을 둔 것
도커 엔진: 컨테이너를 실행하는 도구

이미지 = 컨테이너를 만들기 위한 틀 (like Class ↔ instance)
여러 개의 컨테이너 생산 가능
도커는 리눅스 전용임
컨테이너에서 동작하는 프로그램도 리눅스용
💡 왜 데이터나 프로그램을 독립된 환경에 격리해야 하는가?
실행 환경을 통일하기 위해서임
사용하는 라이브러리 간 충돌이 발생할 수 있음
⇒ 프로그램을 공유하면서 발생하는 문제를 해결해줌
Section2. 서버와 도커
우리가 평소에 서버라고 얘기하는 것
서버 = 어떤 서비스를 제공하는 것
서버의 두 가지 의미:
- 물리적인 의미의 서버
- 소프트웨어 관점의 서버
서버의 예시
| 서버의 종류 | 설명 |
|---|---|
| 웹서버 | |
| 메일서버 | |
| 데이터베이스 서버 | |
| 파일 서버 | |
| DNS서버 | |
| DHCP 서버 | IP주소를 자동으로 할당하는 기능을 제공하는 서버 |
| FTP 서버 | |
| 프록시 서버 | |
| 인증 서버 |
보통 서버는 리눅스를 기반으로 제공됨
컨테이너를 이용해 위와 같은 서버의 기능들을 안전하게 배포할 수 있음
- 각각이 버전이나 업데이트로부터 자유로워짐
- 하나의 (물리적) 서버에서 N개의 (소프트웨어) 서버를 사용할 수 있음
- 물리적 환경의 차이나 서버 구성의 차이를 무시할 수 있음
⇒ 자유롭게 이동이 가능해짐
도커와 가상화 기술의 차이
가상화 기술은 물리적인 대상을 소프트웨어로 대체한 것을 의미함
⇒ CPU, 메모리, 메인보드 등 물리적 부품을 소프트웨어로 구현한 것
⇒ 따라서 OS를 새롭게 설치한 것과 동일함
1. 구조적 차이
| 항목 | Docker (컨테이너) | VM (가상 머신) |
|---|---|---|
| 가상화 방식 | OS 수준 가상화 (컨테이너) | 하드웨어 수준 가상화 (Hypervisor) |
| 실행 단위 | 애플리케이션 + 라이브러리 | 전체 OS + 애플리케이션 |
| 부팅 시간 | 수 초 | 수 분 |
| 리소스 사용량 | 작음 (공유된 커널 사용) | 큼 (별도 OS 사용) |
2. 성능
- Docker: 거의 네이티브 수준의 성능
- VM: 하이퍼바이저의 오버헤드로 성능 저하 있음
3. 호환성 및 격리
- Docker: 동일 커널 공유 → 커널 의존 있음
- VM: 완전한 OS 독립성 → 완전한 격리 가능
4. 사용 사례
- Docker: 빠른 배포, CI/CD, 마이크로서비스
- VM: OS별 테스트, 높은 보안 요구 환경
요약
- Docker는 가볍고 빠르며 애플리케이션 중심
- VM은 무겁지만 더 강력한 격리와 호환성 제공