EH_dream

Docker학습_25.07.17 본문

MLops

Docker학습_25.07.17

Song EH. 2025. 7. 17. 11:41

Docker

 

도커(Docker)는 애플리케이션을 컨테이너라는 단위로 패키징해서 실행하는 플랫폼 쉽게 말하면,

어떤 프로그램이 "어떤 환경에서도 똑같이 작동하도록 만들어주는 기술”

 

핵심개념

  1. 컨테이너 (Container)
    • 프로그램, 라이브러리, 설정파일 등을 묶은 실행 단위
    • 가볍고 빠르기 때문에 가상머신보다 효율적이다.
  2. 이미지(Image)
    • 컨테이너를 만들기 위한 설계도
    • Dockerfile을 기반으로 생성한다.
  3. Dockerfile
    • 이미지 만들기 위한 스크립트이다.
    • 예시 : ‘ 이 OS 기반으로 Python을 설치하고 내 코드 복사해 넣고 실행해줘’
  4. 도커 허브 (Docker Hub)
    • 이미지들을 올리고 받을 수 있는 공식 저장소 이다.

 

도커의 구조

  1. Docker Client
    • 사용자가 docker 명령어를 치면 클라이언트가 요청을 도커 데몬에게 전달
      • 사용예시 : docker build, docker run, docker pull
      • 사용자는 클라이언트를 통해 간접적으로 도커를 조작한다.
  2. Docker Daemon
    • 실제로 컨테이너를 생성, 실행, 관리하는 백그라운드 서비스이다.
    • 명령을 받고 컨테이너, 이미지 네트워크, 볼륨을 관리한다.
      • 데몬은 보통 docker로 실행된다.
      • 클라이언트와 REST API를 통해 통신한다.
  3. Docker Image
    • 컨테이너를 실행하기위한 설계도로 정적인 파일이다.
      • 리눅스 기반 스시템, 앱 실행에 필요한 설정 / 라이브러리를 포함한다.
      • 계층 구조 (layered) 로 되어있거, 같은 부분은 캐시되기 때문에 효율적이다.
  4. Docker Container
    • 이미지를 기반으로 실제로 실행중인 인스턴스 ( 프로세스 ) 이다.
      • 이미지의 복사본을 메모리에 띄워서 실행
      • 서로 족립적이고 격리되어 있다. 하지만 같은 커널을 공유한다.
  5. Docker Registry
    • 이미지를 저장하고 배포하는 저장소이다.
      • 기본은 Docker Hub
      • 기업은 자체 레지스트리 (Private registry) 운영이 가능하다.

 

사용하는 이유

  • 개발 환경을 통일 하기 위해서 ( 로컬 ↔ 서버환경)
  • 배포 자동화 (CI / CD)
  • 여러 앱을 격리된 상태로 실행이 가능하다 ( 작은 가상 머신처럼 사용가능 )
  • 테스트 환경을 쉽게 세팅이 가능하다.

 

보조 구성요소

Dockerfile 이미지를 생성하기 위한 설정 파일
Volume 컨테이너끼리 공유하거나, 데이터를 유지하기 위한 디스크 공간
Network 컨테이너 간 통신을 위한 가상 네트워크 구성

 

구조 흐름 요약

[User] → docker CLI
        ↓
[Docker Client] → REST API → [Docker Daemon]
                                   ↓
                          이미지 생성 / 컨테이너 실행
                                   ↓
                           Docker Image → Docker Container
                                   ↑
                           Docker Registry (ex. Docker Hub)

 

버추얼 머신과 도커의 차이

버추얼머신 (VM) 은 가상환경의 한 종류로 컴퓨터 안에 또 하나의 진짜 컴퓨터를 만든것이고,
도커는 프로그램 실행에 필요한 최소한의 환경만 가볍게 만든것이다.

격리된 환경에서 실행한다는 점은 같지만 무겁고 느린게 VM, 가볍고 빠른게 Docker라고 생각하면된다.

 

💡참고 예시 상황

VM이 필요한경우

  • 윈도우에서 리눅스 전체 환경을 띄워야 할때
  • 서로 완전히 격리된 보안이 필요한 테스트 환경이 필요할때

Docker가 유리한 경우

  • 빠르게 앱 실행하고, 배포 자동화를 할 때
  • 여러 개의 앱을 격리된 상태로 띄울 때