Docker란 무엇인가?

curric·2025년 5월 21일
post-thumbnail

Docker란?


Docker란 애플리케이션을 빠르게 만들고, 테스트하고, 배포할 수 있도록 하는 컨테이너 기반 가상화 플랫폼이다.

쉽게 말해, 어떤 프로그램을 실행할 때 보통 운영체제(OS), 라이브러리, 의존성 등 여러 조건이 맞아야하는데, Docker는 이 모든 실행환경을 하나의 상자(Container)에 담아 누가 어디서든 동일하게 실행할 수 있도록 해준다.

Docker의 간단한 특징

  • Docker는 Go 언어로 작성된 linux 기반의 Container RunTime 오픈소스이다.
  • 구글, 아마존, 마이크로소프트에서도 도커를 지원하고 있다.

Container란?


Docker에 있어 가장 핵심인 Container에 대해 살펴보기 앞서 가상화를 왜 사용하는지에 대한 이해가 간단하게 필요하다.

가상화를 왜 사용하는가?

현실문제

  • 개발환경과 배포환경이 서로 달라서 발생하는 문제
    (ex 내 컴퓨터에서는 되는데 서버에서 안 됨)
    -> 이식성(Portability)

  • 여러 앱을 한 시스템에 설치하면 충돌하거나 꼬이는 문제
    (ex 서로 다른 python node.js 등)
    -> 환경격리(Isolation)

  • 서버 운영을 하는 입장에서 cpu 사용량이 적은 서버는 리소스 낭비로 이어질 수밖에 없음
    -> 자원 효율성(Resource Efficiency)

가상화가 해결하는 방식

"서로 다른 프로그램을 격리된 공간에서 안전하게 실행하자"

  • 가상화는 하드웨어나 운영체제를 "가짜로 흉내내서" 분리된 환경을 만들어주는 기술

  • 각각의 앱이 독립된 시스템처럼 동작하게 해줌

그러면 이제 Container에 대해 알아보면,

Container

컨테이너는 대표적인 가상화방식 2가지중 하나이며, 기존 VM기반처럼 OS 전체를 통째로 가상화하는 것이 아닌 OS 커널을 공유하고 프로세스를 격리하고 동작하는 방식으로 이루어진다.

이게 바로 Docker가 사용하는 OS 전체를 복제하지 않고 필요한 실행 환경만 묶어서 실행하는 Container 가상화 방식이다.

그러면 한 서버의 여러 OS를 가상화 하여 사용하는 것과 컨테이너 방식으로 프로세스를 격리시켜 동작하는 방법은 어떠한 차이점이 있을까?

VM 기반 가상화 vs Container 가상화

VM(Virtual Machine, 가상머신)은 물리적인 서버(Host) 위에 가상화를 시키기위한 하이퍼바이저(Hypervisor)를 두고,
그 위에 또 다른 운영체제(Guest OS)를 설치해 사용하는 구조이다. 이는 가상화된 하드웨어 위에 OS가 올라가는 형태로 거의 완벽하게 Host와 분리된다고 봐도 무방하다.
반면에 Container 가상화는 Container Engine 위에 Application과 해당 Application이 동작하는데 필요한 라이브러리, 설정 파일, 실행 바이너리만을 포함한 상태로 실행된다.
즉, 전체 운영체제를 포함하지 않고 필요한 최소한의 구성만을 사용하여 훨씬 가볍고 빠르게 동작한다.

Docker의 Image란?


Docker Image란 컨테이너를 생성하기 위한 일종의 '설치 패키지' 또는 '템플릿'이다.

쉽게 생각하면 Image를 객체지향의 클래스, container를 instance라고 이해할 수 있다. 혹은 Image를 레시피, container를 레시피를 따라 요리한 실제 음식이라 할 수 있다.

Image는 변경되지 않으며, 그 Image를 기반으로 여러 개의 Container를 만들 수 있다.
Image를 미리 정의해두기에, 어떤 환경이든 동일한 실행 환경을 보장할 수 있고, 버전 관리가 가능하며(ex node:18, python:3.11), 배포가 용이하다. (Docker Hub 등에 공유 가능)

이제 실제로 Image를 만들어보는 Docker File에 대해 알 필요가 있다.

Dockerfile이란?


Dockerfile은 Dockerfile이란, Docker 이미지를 만들기 위한 명령어들이 적힌 텍스트 파일이다.

이 명령어들에는

  • 어떤 OS 환경을 쓸지
  • 어떤 파일을 복사할지
  • 어떤 패키지를 설치할지
  • 실행 시 어떤 명령을 실행할지
    등이 포함된다.

즉, 비유하자면 Image의 설계도, 요리법의 초안이라고도 할 수 있다.

Image 배포방법


git을 이용해봤다면, 이해하기 쉬운 그림이다.
Container Registry라는 곳에 Push와 Pull을 통해 Image를 주거나 받거나 한다.

Container Registy의 종류로는,

Public Registry

  • Docker Hub
  • Github packages

Private Registry

  • Amazon AWS ECR
  • Google Cloud Container Registry
  • Microsoft Azure Container Registry

등이 있으며, 그 중 Docker Hub은 Docker 공식 홈페이지에서 다양한 이미지를 배포하고 있다.
https://hub.docker.com/

정리


  • Docker는 컨테이너 기반의 가상화 플랫폼으로, 동일한 실행 환경을 어디서나 보장한다.
  • Container는 VM보다 훨씬 가볍고 빠르며, 프로세스 단위로 격리된 환경을 제공한다.
  • Image는 Container를 만들기 위한 템플릿이며, Dockerfile로 정의할 수 있다.
  • Image는 Registry를 통해 배포 및 공유가 가능하다.
profile
학생입니다

0개의 댓글