본문 바로가기
Docker(k8s)

Docker란

by 하고집 2026. 2. 23.
반응형

Docker는 애플리케이션을 컨테이너(Container) 형태로 패키징하고 실행하는 플랫폼

 

코드+라이브러리+실행 환경을 하나로 묶어서 어디서든 동일하게 실행되도록 만듬.

 

컨테이너란?

 - 프로세스 격리기술(Linux namespace + cgroup 기반)  >>> "가볍고 빠른 가상 서버" 가 된다고 생각하면 된다.

 - VM처럼 보이지만 OS를 통째로 가상화하지 않음

 - 가볍고 빠르다

 

*namespace = 프로세스가 시스템 자원을 독립된 공간처럼 보이게 만드는 커널 기능

*cgroup은 "사용 가능한 자원"을 제한하는 기능

    eg)docker run -m 512m --cpus="1.5" nginx

 

 

VM 과 Docker 차이

구분VMDocker

가상화 대상 하드웨어 OS 커널
부팅 속도 느림 (OS 필요) 즉시 실행
리소스 사용 작음
구조 Hypervisor 위 Guest OS Host OS 위 컨테이너

 #Docker는 OS커널을 공유

   VM은 각자 OS를 따로 가짐.

 

 

Docker 구성 요소

1. Docker Engine

   - docked(데몬)

   - container runtime

   - REST API

 

2. Image

   - 실행 가능한 템플릿

   - 계층 구조

 

Image                                                             Container

설계도 실행 중인 인스턴스
변경 불가 실행 상태
저장 가능 종료/삭제 가능

 

Docker가 해결하는 문제

   - "내 PC에서는 되는데 서버에서는 안됨" 문제 해결

   - 의존성 충돌 제거

   - CI/CD  자동화 기반 제공

   - 마이크로서비스 환경 구축

 

여기서 마이크로 서비스 환경 구축이란 말이 이해가 안될수도 있다.

 

예전에는 하나의 코드, 하나의 배포단위, 하나의 서버 프로세스 로 일부기능만 수정해도 전체 재배포 하거나 장애나면 전체가 다운이 되었다. 이런 문제를 극복하기 위해

독립된 프로세스, 독립된 배포, 독립된 확장

 

기능 단위로 서비스를 쪼개서 각각 독립적으로 운영하는 아키텍쳐 인것이다.

 

[ 하나의 애플리케이션 ]
 ├─ 로그인
 ├─ 게시판
 ├─ 결제
 └─ 관리자

 

이 구조를 아래와 같이 변경한것이다.

 

[Auth Service]
[Board Service]
[Payment Service]
[Admin Service]

 

서비스환경

Auth Node 18
Payment Java 17
AI 추천 Python 3.10

 

이런식으로 사용하는 언어나 라이브러리 버전 런타임 환경이 다르면 충돌이 발생할수 있기때문에 

Docker가 각 서비스를 컨테이너로 격리 하게 되는 것이다.

반응형