Docker

[Docker] Docker란? (코딩온)

효진인데요 2023. 12. 23. 01:44

 

 

 

Docker에 대해 본격적으로 알아보기 전,

꼭 짚고 넘어가야 하는 핵심 개념들부터 차례대로 정리해 보는 시간을 가졌다.

 

 

Container ?

 

 

흔히 생각하는 컨테이너의 이미지가 다들 있을 것이라고 생각한다.

 

대충 뭐 이런거..?

 

 

이제 알아볼 컨테이너라는 기술도 이 컨테이너와 유사한 부분이 있다고 한다.

 

 

 

Container 의미 

  • 애플리케이션의 코드, 라이브러리, 환경 설정을 포함
  • 애플리케이션을 안전하고 효율적으로 실행 가능
  • 한 곳에서 다른 곳으로 쉽게 배포 가능 ( 이동 가능 )

 

화물 운송에 쓰이는 컨테이너가 화물을 안전하고 효율적으로 운송하는 것과 같이

비슷한 의미를 가지고 있는 부분도 존재하는 것 같다.

 

 

▶️ Docker는 화물 운송에서 쓰이는 컨테이너의 개념을 모티브로 하여 개발되었다고 할 수 있음

 

 

 


 

 

container 기술 정의

 

  • 애플리케이션을 실행하기 위한 가상 환경
  • 커널을 사용해 가볍고 효율적으로 실 가능
  • docker과 kubernetes와 같은 도구를 사용하여 배포하고 관리

  • 호스트 OS의 자원을 분리해 독립적으로 실행 ➡ 컨테이너가 서로 영향을 미치지 않고 안전하게 실행
  • 표준화된 이미지를 기반으로 컨테이너를 생성 ➡ 컨테이너는 쉽게 이동, 공유, 재사용 가능
  • 컨테이너는 호스트 OS 커널을 공유하여 IO처리가 쉬워져 가볍고 성능 효율을 높임

 

대표적으로 Linux Container가 존재한다.

 

 

 

커널?
  • 컴퓨터의 뼈대
  • 컴퓨터의 하드웨어와 소프트웨어를 연결 및 관리
  • 컴퓨터 자원을 관리하는 운영체제의 핵심 부분
  • 프로세스 혹은 스레드의 관리 및 CPU 스케줄링 
     각 프로세스마다 CPU를 사용할 수 있는 시간을 분배하고 관리
  • 메모리 및 I/O 디바이스 관리
  • IPC (Inter Process Communication)
     한 컴퓨터 내부의 프로세스끼리 통신을 도와줌
  • 다른 컴퓨터와의 통신 가능하도록 함

 

 

 

 

 

container 기술 장점

 

  • 경량화
      별도의 운영체제 포함 X -> 가볍고 효율적
  • 빠른 실행
      호스트 운영 체제의 커널을 공유

 

 

또 하나의 장점을 예를 들어 설명해 보자면,

 

우리가 프로젝트 배포를 위해서는 필요한 환경을 구축해야 하는데,

이때 구축해야 하는 환경을 생각해 보면 서버, OS, 네트워크 통신 포트 구성, 개발 툴 등이 존재한다.

 

물론 이러한 과정에서는 호환성을 위해 버전도 맞춰야 하는 경우도 생긴다.

 

 

다른 개발자가 이를 개발하려면 이 과정을 모두 일일이 다시 설정해하는 작업이 필요하고,

변경이나 차질이 생겨 어떤 하나를 바꾸게 되면 연쇄적으로 다른 것들까지 영향이 가 변경해야 하는 경우가 생길 수도 있다.

 

 

container를 활용하면 이러한 작업들 간편화가 가능해진다.

 

 

 

container 기술 단점

 

  • 독립성
      호스트 운영 체제의 커널 공유 -> 가상 머신과 같은 독립성은 제공하지 못함
      호스트 운영 체제가 업데이트되거나 오류 발생 시 영향

  • 보안
      가상 머신에 비해 보안 기능이 약함
      따라서 민감한 데이터를 포함하지 않도록 주의 필요

 

 

 

 

가상 머신 vs 컨테이너

 

[코딩온] Docker > Docker 소개

  가상 머신 (VM, Virtual Machine) 컨테이너 (Container)
공유 자원 하드웨어 전체 운영체제의 커널
메모리 사용량 작음
실행 속도 느림 빠름
사용 목적 및 유용한 환경 다양한 운영체제를 실행하는 환경 애플리케이션 실행
확장성 혹은 비용 절감이 중요한 환경

 

 

가상화를 사용하는 이유

 

  • 기술의 발전으로 향상된 컴퓨터의 성능을 더욱 효율적으로 사용하기 위함

  • CPU 사용률이 낮은 상태로 많은 서비스가 나뉘어 있으면 활용도가 낮은 서버들은 리소스가 낭비되고, 하나로 합치면 안정성에 문제 발생 가능
      안정성을 높이며 리소스를 최대한 활용할 수 있도록 가상화 사용

 


 

 

 

Docker란?

 

  • 컨테이너를 기반으로 하는 오픈소스 가상화 플랫폼
  • 컨테이너를 이미지라는 형태로 보다 쉽게 생성 및 관리

  • 성능 향상
  • 뛰어난 이식성
    →   하나의 서버에서 생성한 컨테이너 이미지를 다른 서버에서도 쉽게 배포 가능
  • 유연성
      운영체제의 버전, 하드웨어 사양에 관계없이 동일한 애플리케이션 실행 가능

      쉽게 Scale Out 가능

 

 

Scale out vs Scale up

 

 

출처:https://bruno-jang.tistory.com/34

 

 

  Scale out (스케일 아웃) Scale up (스케일 업)
확장성 하나의 장비에서 처리하던 일을 여러 장비에 나눠서 처리
수평 확장
지속적 확장 가능
CPU 변경, RAM 추가 등으로 하드웨어 장비의 성능 높임
수직 확장
성능 확장에 한계 존재
비용 비교적 저렴한 서버 비용으로 부담 적음 성능 증가에 따른 비용 증가폭이 큼
장애 읽고 쓰는 작업이 여러 대의 서버에 분산 처리
따라서 장애 발생 시 전면 장애로 번질 가능성이 적음
한 대의 서버에 부하가 집중
따라서 장애 발생 시 전반적인 영향이 큼

 

 

 

 

 

Docker 핵심 구성 요소

 

[코딩온] Docker > Docker 소개

 

구성 요소 기능 동작 과정 및 종류
Docker Daemon Docker API 요청을 수신
이미지, 컨테이너와 같은 Docker Object 관리
Docker Client에게서 전달 받은 명령어 실행
Docker Client 사용자가 docker run, docker build 등의 명령어를 사용해 Docker와 상호작용하는 주요 수단 Docker API로 Docker Daemon에게 명령어 전달
Docker Registry Docker Images 저장 public : 공개 저장소
ex) Docker Hub

private: 비공개 저장소
Docker Objects Docker에서 생성하고 사용하는 이미지, 컨테이너 등의 기타 개체 이미지 : 
애플리케이션을 실행하는 데 필요한 모든 파일, 구성 및 설정을 포함하는 읽기 전용 파일 시스템
컨테이너 생성에 사용

컨테이너 :
이미지를 실행한 상태
별도의 실행 환경 제공
호스트 운영 체제와 격리

 

 

 


 

 

 

✏️ 정리

 

 

Docker?

  • 애플리케이션을 배포, 테스트, 개발하는 데 유용한 도구
  • 개발 생산성을 높임
  • 안정적으로 애플리케이션 운용하는 도구

 

 

Images?

  • 애플리케이션을 실행하는 데 필요한 모든 파일, 구성 및 설정 포함하는 읽기 전용 파일 시스템

 

 

Containers?

  • Docker Images를 실행한 상태

 

 

 

 

 

 

Docker 공식 문서

https://docs.docker.com/

 

Home

Home page for Docker's documentation

docs.docker.com

 

 

 

728x90