[Docker] 도커(Docker) 개요

배창민·2025년 11월 28일
post-thumbnail

도커(Docker) 정리

1. 도커란 무엇인가

도커(Docker)는 리눅스의 프로세스 격리 기술을 이용해
애플리케이션을 컨테이너(container) 라는 단위로 실행하고 관리하는 오픈 소스 플랫폼이다.

  • 한 줄 요약
    → “애플리케이션과 그 실행 환경 전체를 하나의 컨테이너로 묶어, 어디서나 똑같이 실행되게 해주는 기술”

도커 컨테이너 안에는 다음과 같은 것들이 함께 들어간다.

  • 애플리케이션 코드
  • 런타임 (예: JRE, Node.js 등)
  • 시스템 도구
  • 시스템 라이브러리

그래서 어떤 서버에서 돌리든 항상 동일한 환경에서 실행되는 것을 보장한다.

1-1. 내부적으로 어떻게 동작하나

도커는 리눅스 커널의 기능을 활용해 운영체제 수준 가상화를 구현한다.

  • 네임스페이스(namespaces)
  • cgroups
  • OverlayFS, AUFS 같은 유니언 파일 시스템

이 덕분에 여러 개의 컨테이너가 하나의 리눅스 인스턴스(호스트) 위에서
서로 격리된 상태로 동시에 실행된다.
전통적인 VM처럼 OS 전체를 여러 개 띄울 필요가 없어서 훨씬 가볍다.

도커 프로젝트는 원래 프랑스 PaaS 기업 dotCloud 에서 내부 프로젝트로 시작했고,
2013년 3월 오픈 소스로 공개되었다.


2. 도커 이미지와 컨테이너

도커를 이해할 때 가장 중요한 개념은 이미지(Image)컨테이너(Container) 이다.

2-1. 이미지(Image)

도커 이미지는 특정 서비스를 실행하기 위해 필요한 것들을 모두 묶어놓은 템플릿이다.

포함되는 것 예시

  • 서버 프로그램 (예: Nginx, Spring Boot 애플리케이션)
  • 애플리케이션 소스코드 또는 빌드 결과물
  • 라이브러리, 의존성
  • 설정 파일

특징

  • 보통 읽기 전용 템플릿 역할
  • 버전 태그로 관리 (예: nginx:1.25, openjdk:17-jdk)
  • Docker Hub 같은 레지스트리에 올려서 공유·배포 가능

2-2. 컨테이너(Container)

컨테이너는 이미지를 실제로 실행한 상태이다.

  • 이미지를 기반으로 생성되는 하나의 프로세스 실행 단위
  • 이미지에 담긴 환경을 그대로 가져와서 격리된 공간에서 동작
  • 필요에 따라 여러 개를 띄울 수 있다 (예: 웹서버 컨테이너 3개)

2-3. 이미지 vs 컨테이너 정리

구분설명
이미지실행에 필요한 코드, 라이브러리, 설정을 모두 포함한 템플릿. 불변에 가까운 배포 단위
컨테이너이미지를 실제로 실행한 결과. 호스트 OS 위에서 격리된 프로세스로 동작하는 런타임 인스턴스

3. 도커를 사용하는 이유

3-1. 가볍고 빠른 가상화

  • 도커는 VM을 띄우지 않고 호스트 OS의 커널을 공유한다

  • 게스트 OS를 따로 올리지 않기 때문에

    • 메모리 사용량이 적고
    • 시작 속도가 빠르다

3-2. 어느 환경에서나 동일한 실행

  • 컨테이너 안에 실행에 필요한 모든 것을 포함하기 때문에

    • “새 서버에 이것저것 설치” 같은 작업을 최소화할 수 있다
    • 이미지만 받아서 컨테이너를 생성하면 바로 실행 가능
  • 로컬, 테스트 서버, 운영 서버 환경을 통일하기 쉬워진다

3-3. 개발 환경 세팅 자동화

  • 도커 이미지만 준비해두면

    • 팀원이 새로 합류해도 이미지 한 번 받는 것만으로 개발 환경 구성
    • “버전이 달라서 안 돌아간다” 같은 문제 감소
  • 실행 환경을 강제할 수 있어서
    “개발자는 되는데 서버에서는 안 된다” 같은 상황을 줄일 수 있다

3-4. 배포와 롤백에 유리

  • 도커는 환경을 모듈식 유닛(이미지) 단위로 관리할 수 있게 해준다

  • 장점

    • 새 버전 이미지를 빌드하고 컨테이너만 교체하면 배포 끝
    • 장애 발생 시 이전 버전 이미지로 빠르게 롤백 가능
    • 기능 배포, 버그 수정 주기를 짧게 유지하기 좋다

4. 마무리 정리

  • 도커는 컨테이너 기반 가상화 플랫폼
  • 이미지는 실행 환경을 통째로 묶어놓은 템플릿
  • 컨테이너는 그 이미지를 실제로 실행한 프로세스
  • VM보다 가볍고 빠르며, 어디서나 동일한 실행 환경을 제공
  • 개발·테스트·운영 환경을 통일하고, 배포·롤백 속도를 크게 높여준다
profile
개발자 희망자

0개의 댓글