Docker 에 대해서

민콕이·2026년 2월 10일
post-thumbnail

Docker 란 무엇인가

도커는 애플리케이션을 구축, 테스트 및 배포할 수 있는 소프트웨어 플랫폼 입니다.
특징으로는 애플리케이션과 그 애플리케이션을 실행하는 데 필요한 모든 파일(코드, 라이브러리, 설정)을 컨테이너라는 단위로 묶는 것입니다.



왜 쓰는걸까?

도커를 사용하는 가장 큰 이유는 내 컴퓨터에서는 잘 되는데, 왜 서버에서는 안돼? 라는 고질적인 문제를 해결해주기 떄문입니다.
도커는 애플리케이션과 이를 실행하는 데 필요한 모든 환경을 컨테이너라는 독립된 공간에 모두 집어넣습니다

  • 환경 일관성
    개발자 PC, 테스트 서버, 운영 서버가 모두 다른 운영체제나 설정을 가지고 있더라도, 도커 컨테이너는 어디서나 똑같이 작동합니다.

  • 가볍고 빠른 실행
    도커 컨테이너는 가상 머신(VM)과 달리 운영체제를 통째로 부팅하지 않습니다. 호스트 운영체제의 커널을 공유하며 애플리케이션만 격리하여 실행하기 때문에, 훨씬 가볍고 부팅 속도가 몇 초 단위로 빠릅니다.

  • 이식성
    "컨테이너"로 묶인 애플리케이션은 도커만 설치되어 있다면 노트북, 물리 서버, 클라우드(AWS, Google Cloud 등) 어디로든 쉽게 옮겨서 실행할 수 있습니다.

  • 효율적인 자원 관리
    VM은 각 서버마다 OS를 따로 설치해야 해서 자원 낭비가 심하지만, 도커는 불필요한 OS 오버헤드가 없어서 같은 하드웨어 자원에서 더 많은 애플리케이션을 실행할 수 있습니다.

  • 쉬운 버전 관리와 배포
    도커 이미지는 마치 코드의 Git처럼 버전 관리가 가능합니다.
    문제가 발생하면 이전 버전의 이미지로 즉시 되돌릴 수 있습니다.



Docker와 VMware의 차이점

도커(Container 기반)와 VMware(Virtual Machine 기반)는 애플리케이션을 격리된 환경에서 실행한다는 점은 같지만, 격리하는 방식과 목적에서 큰 차이가 있습니다.

특징도커 (Container)VMware (Virtual Machine)
격리 수준애플리케이션 단위 격리하드웨어(가상) 단위 격리
OS 사용호스트 OS의 커널 공유 (경량)게스트 OS를 각 VM마다 설치 (무거움)
격시작 속도수 초 (초고속)수 분 (부팅 과정 필요)
크기(용량)메가바이트(MB) 단위 (매우 작음)기가바이트(GB) 단위 (매우 큼)
성능 오버헤드거의 없음가상화 계층으로 인한 오버헤드 존재

구조적 차이점

  • VMware (VM): 하드웨어 위에 하이퍼바이저를 설치하고, 그 위에 가상 하드웨어를 에뮬레이션하여 게스트 OS를 설치합니다. 진짜 컴퓨터 한 대를 가상으로 만드는 것입니다.

  • 도커 (Container): 호스트 OS 위에 도커 엔진이 있고, 컨테이너는 호스트 OS의 커널을 공유하면서 애플리케이션에 필요한 파일들만 격리하여 실행합니다. 컴퓨터 안의 '폴더'를 격리하는 것과 비슷합니다.


하이퍼바이저 (Hypervisor)

하이퍼바이저는 하드웨어 위에서 여러 개의 가상 머신(VM)을 실행하고 관리하는 소프트웨어입니다. 쉽게 말해 진짜 컴퓨터 한 대를 가상으로 쪼개주는 역할을 합니다.

역할: 물리적인 서버의 CPU, 메모리, 디스크 등의 자원을 가상 머신들에게 나누어 줍니다.

특징: 각 가상 머신(VM)마다 독립적인 운영체제(Guest OS)를 설치해야 합니다. 그래서 무겁고 시작하는 데 시간이 걸립니다.

대표적인 예: VMware, VirtualBox, Hyper-V, KVM


컨테이너 (Container)

컨테이너는 애플리케이션과 그 실행에 필요한 모든 파일(코드, 라이브러리, 설정 등)을 하나로 묶어 격리된 환경에서 실행하는 기술입니다.

역할: 애플리케이션을 실행하는 데 필요한 환경만 딱 싸서 실행합니다.

특징: 운영체제(OS)를 새로 설치하지 않고, 호스트 운영체제의 커널을 공유합니다. 그래서 가볍고 시작하는 데 몇 초밖에 걸리지 않습니다.

대표적인 기술: Docker, Containerd



Docker의 구조

도커 이미지 (Docker Image)

도커 이미지는 애플리케이션을 실행하는 데 필요한 모든 파일, 라이브러리, 설정, 실행 명령어 등을 포함하고 있는 읽기 전용 템플릿입니다.

구조: 여러 개의 레이어(Layer)가 겹겹이 쌓인 구조입니다. 각 레이어는 Dockerfile의 명령어(RUN, COPY 등)에 의해 생성됩니다.

특징: 불변(Immutable) 상태입니다. 이미지는 한 번 생성되면 수정할 수 없습니다.


도커 컨테이너 (Docker Container)

도커 컨테이너는 도커 이미지를 기반으로 생성된 실제 실행 중인 인스턴스입니다.

구조: 이미지 레이어 위에 쓰기 가능 레이어(Writable Layer)가 추가된 형태입니다.

특징: 가변(Mutable) 상태입니다. 애플리케이션 실행 중 발생하는 파일 생성, 수정, 삭제 작업은 쓰기 가능 레이어에서 일어납니다. 컨테이너를 삭제하면 이 레이어도 함께 삭제됩니다.

격리: 리눅스 커널 기술인 네임스페이스(Namespaces)컨트롤 그룹(Cgroups)을 사용하여 호스트 운영체제 및 다른 컨테이너로부터 파일 시스템, 네트워크, 자원 사용량을 격리합니다.


도커 레지스트리 (Docker Registry)

도커 이미지를 저장하고 공유하기 위한 저장소입니다.

동작: 사용자는 레지스트리에 이미지를 업로드(push)하거나 다운로드(pull)할 수 있습니다.

대표 예시: 도커 허브(Docker Hub)와 같은 공개 레지스트리나 사설 레지스트리(Private Registry)가 있습니다

profile
정리 블로그

0개의 댓글