← 모든 문제
도커란 무엇이고 어떻게 작동하나요?
자주초급DevOps

도커란 무엇이고 어떻게 작동하나요?

짧은 답변
Docker는 애플리케이션을 컨테이너로 패키징하고 실행하기 위한 개방형 플랫폼입니다. 호스트의 Linux 커널을 공유하는 격리된 프로세스(네임스페이스 및 cgroup을 통해) 전체 가상 머신이 필요한 대신. 클라이언트-서버 모델을 사용합니다. docker 클라이언트는 REST API를 통해 dockerd 데몬에 명령을 보냅니다. 이미지를 빌드하고 이미지에서 컨테이너를 실행합니다.

존재 이유. Docker를 사용하면 모든 종속성(라이브러리, 구성, 런타임)이 포함된 애플리케이션을 단일 아티팩트(이미지)로 패키징하고 개발자 노트북, CI 및 프로덕션에서 동일하게 실행할 수 있습니다. 이는 고전적인 "내 컴퓨터에서 작동" 문제를 해결합니다.

컨테이너 대 가상 머신. VM은 하드웨어를 가상화하고 자체 커널과 함께 전체 게스트 OS를 제공합니다. 컨테이너는 호스트의 커널을 사용하는 격리된 프로세스입니다. 결과적으로 컨테이너는 더 가볍고, 몇 분의 1초 만에 시작되며, 더 적은 리소스를 사용합니다. 그러나 컨테이너는 경량 VM이 아닙니다. 호스트 커널에 연결되어 있으며 격리 경계가 VM보다 약합니다. VM에는 하드웨어 강제 격리가 적용되는 반면, 공유 커널의 취약점은 잠재적으로 컨테이너에서 벗어날 수 있습니다. 이는 속도와 밀도의 절충입니다. 호스트는 컨테이너 유형과 일치해야 합니다. Linux 컨테이너에는 Linux 커널이 필요하고, Windows 컨테이너에는 Windows 커널이 필요합니다. macOS 및 Windows에서 Docker Desktop은 작은 Linux VM(예: WSL2를 통해)을 투명하게 실행하므로 Linux 컨테이너는 OS 커널이 아닌 해당 VM 커널을 공유합니다.

아키텍처(클라이언트-서버). Docker 문서에 따라:

  • docker 클라이언트는 사용자가 Docker와 상호 작용하는 기본 방법입니다. docker run와 같은 명령이 데몬으로 전송됩니다.
  • dockerd 데몬은 컨테이너 구축, 실행 및 배포의 "무거운 작업을 수행"하고 이미지, 컨테이너, 네트워크 및 볼륨과 같은 개체를 관리합니다.
  • 클라이언트는 UNIX 소켓이나 네트워크 인터페이스를 통해 REST API를 통해 데몬과 통신하므로 데몬은 다른 시스템에서 실행될 수 있습니다.
  • 레지스트리는 이미지를 저장합니다. 기본 공용은 Docker Hub입니다.

이미지 및 컨테이너. 편리한 비유: 이미지는 클래스(또는 디스크의 프로그램)와 같고 컨테이너는 클래스의 인스턴스(실행 중인 프로세스)입니다. 하나의 이미지에서 많은 컨테이너를 시작할 수 있습니다.

  • 이미지는 레이어로 구성된 컨테이너 생성 지침이 포함된 읽기 전용 템플릿입니다. Dockerfile에 의해 정의됩니다. 이를 변경하면 변경된 레이어만 다시 작성됩니다.
  • 컨테이너는 실행 가능한 이미지 인스턴스입니다. 이미지의 읽기 전용 레이어 위에 얇은 쓰기 가능한 레이어(쓰기 시 복사)를 추가합니다. 컨테이너가 제거되면 거기에 기록된 모든 내용이 손실됩니다. 이것이 바로 영구 데이터에 볼륨이 필요한 이유입니다.

격리 작동 방식(내부적으로). dockerd는 커널을 직접 호출하지 않습니다. 컨테이너 수명 주기 관리를 containerd에 위임하여 OCI 런타임을 호출합니다. Docker에서 기본값은 runc이지만 런타임은 플러그 가능합니다(crun, gVisor, Kata 등). 실제 격리는 Linux 커널 기능에서 비롯됩니다.

  • 네임스페이스는 리소스를 격리합니다(man7 페이지에는 PID, 네트워크, 마운트, UTS, IPC, 사용자, cgroup, 시간의 8가지 유형이 있습니다). 프로세스는 자신의 PID, 자신의 네트워크 스택 등만 "인식"합니다.
  • cgroups(제어 그룹) 리소스 사용량(CPU, 메모리, I/O)을 제한하고 설명합니다.

일반적인 후속 조치. 이미지 레이어가 캐시됩니다. docker compose는 다중 컨테이너 앱을 실행합니다. 데이터는 볼륨을 통해 유지됩니다(컨테이너는 기본적으로 임시임). OCI는 이미지 형식(image-spec), 런타임(runtime-spec), 레지스트리 배포 프로토콜(distribution-spec)을 표준화합니다. 이 세 가지 사양은 생태계의 상호 운용성을 유지합니다.

Docker컨테이너

지금 다운로드하고 내 작업에 무료로 사용해 보세요!

Windows용 다운로드
무료 크레딧 10 15개 • 신용카드 필요 없음버전: 로딩 중…

설치 없이 - 다운로드하고 실행. 가입 없이 - Google로 로그인.