ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Docker] Docker의 개념 및 활용
    프로그래밍 2024. 5. 15. 17:15
    개요

    1. 가상화 기술의 변화
    2. Docker란?
    3. Docker 활용

     

    ✅ 가상화 기술 


     

    가상화 기술이 등장하기 전까지는 하나의 컴퓨터에서 하나의 OS만이 사용가능했다. 이러한 특징은 해당 OS가 컴퓨터의 모든 리소스를 항상 Full로 사용하기 어려워 CPU 및 리소스의 낭비가 있으며, 서버 자원의 사용량을 예측하기 힘들고 물리적 확장에 한계가 있다는 단점이 있었다. 이에 서버를 쉽게 확장하기 위해 등장한 개념이 하이퍼바이저 가상화 기술이다.

    하이퍼바이저 가상화 VS 컨테이너 가상화

    📦 하이퍼바이저 가상화

    하나의 컴퓨터에서 다수의 독립적인 OS를 동시에 실행하기 위한 소프트웨어로 기존 환경인 Host OS에서 각각의 분할된 환경인 Geust OS를 나누는 역할 및 시스템 자원을 할당하는 역할을 한다.  
    • 가상 머신으로 무언가를 실행할 때 하이퍼바이저를 거쳐야 해 속도 저하가 필연적이다.
    • 해당 환경을 구동하는데 필요한 모든 파일을 가상 머신이 포함하고 있기에 가상 머신을 배포할 때 만들어지는 이미지의 크기가 매우 커진다.

     

    🎉 이미지

    더보기

    이미지는 가상 머신이나 컨테이너 또는 프로그램을 실행하는 데 필요한 파일과 라이브러리, 설정 등을 가지고 있는 파일입니다. 이미지는 레이어라는 계층 구조로 이루어져 있는데, 변경 사항이 생기면 새로운 레이어를 추가해서 기록합니다. 이미지 전체를 새로 받지 않고 해당 레이어만 받는 것으로 이미지를 업데이트할 수 있다는 장점이 있지요.

    이미지를 실행하면 프로세스, 즉 컨테이너가 됩니다.

     

    📦 컨테이너 가상화

    프로세스를 격리된 환경에서 실행하는 기술로 하나의 서버에 다수의 컨테이너를 실행하면 컨테이너끼리 서로 영향을 끼치지 않고 독립적으로 실행을 한다. 이는 하이퍼바이저와는 달리 가상 OS를 만드는 것이 아니라 베이스 환경의 OS를 공유하며 프로세스만 격리한다는 차이점이 있다.
    • Host OS 외 다른 OS를 구동할 수 없다.
    • 종속적으로 필요한 파일만 가지고 있기에 배포를 위해 생성되는 이미지 용량이 작다.
    • 실행속도도 빠르다.

     

    ✅ Docker란?


     

    📦 Docker

    리눅스 컨테이너 기술을 기반으로 한 가상화 플랫폼으로 하드웨어를 효율적으로 활용하기 위해 하드웨어 공간 위에 가상의 머신을 만드는 기술이다. 이는 어플리케이션을 프로세스 격리기술을 사용해 더 쉽게 컨테이너로 실행하고 관리할 수 있게 해주는 오픈소스 프로젝트이다.
    • 컨테이너를 잘 다룰 수 있게 도와주는 도구
    • 이미지를 실행시켜 컨테이너로 만들거나, 생성된 컨테이너를 관리하거나, 컨테이너를 다시 이미지로 만드는 작업을 쉽게 할 수 있다.
    • 도커 엔진: 컨테이너를 생성하고 관리하는 주체로 도커의 핵심이다.

    Docker Container

     

    📦 Docker Container

    가상된 공간을 사용하기 위해 리눅스 자체 기능인 chroot, 네임스페이스, cgroup을 사용함으로써 프로세스 단위의 격리 환경을 만들기에 선으 손실이 거의 없으며, 컨테이너에 필요한 커널을 공유해서 사용하고, 이미지를 만들 때 용량이 작아 가상 머신에 비해 빠르고, 가상화된 공간을 사용할 때의 성능 손실도 적다.
    • 가상화된 공간을 생성할 때 리눅스 자체 기능을 사용하여 프로세스 단위의 격리 환경을 만들어 성능 손실이 없다.
    • 이미지로 만드는 용량이 작다.
    • 배포하는 시간이 빠르다.

     

    📦 Docker 구성요소

    • Docker Client: 도커 명령어를 수행하는 곳으로 설치한 그곳이다.
    • DOCKER_HOST: 도커가 띄워져 있는 서버로 컨테이너와 이미지를 관리한다.
    • Docker daemon: 도커 엔진
    • Registry: 외부 이미지 저장소로 다른 사람들이 공유한 이미지를 내부 도커 호스트에 pull할 수 있다. 이렇게 가져온 이미지는 run하면 컨테이너가 된다. 

    Docker Architecture

     

    📦 도커 이미지와 컨테이너

    도커 엔진에서 사용하는 기본 단위로 도커 엔진의 핵심이다. 도커 이미지는 컨테이너를 생성할 때 필요한 요소이며 이는 운영체제에서 프로그램 / 프로세스, 객체지향 프로그래밍에서 클래스 / 인스턴스 관계와 비슷하다
    • 도커 이미지와 컨테이너는 1 : N 관계이다.
    • Docker File: 도커 이미지를 만들 때 사용되는 파일로, docker build 명령어를 통해 이미지를 만들 수 있다.

    Docker 컨테이너 생성까지 Lifecycle

     

    ✅ Docker 활용


     

    📦 도커를 활용한 배포의 장점

    1. 어떤 환경에서든 동일한 방식으로 애플리케이션을 배포할 수 있다.
      -> 컨테이너는 모든 의존성을 포함하고 있기에 OS에 구애받지 않는다.
    2. 개발 환경과 운영 환경 사이의 차이를 회소화하여 배포 과정에서 오류를 최소화할 수 있다.
      -> 애플리케이션과 환경을 패키징하기에 개발 환경과 동일한 환경을 운영 환경에서 재현할 수 있다.
    3. 배포관리가 용이하다.
      -> 배포, 업데이트, 롤백 등을 도커 이미지를 사용하여 간편하게 수행할 수 있다.

     

     

     

    📌 reference

     

     

    '프로그래밍' 카테고리의 다른 글

    [git] 팀 프로젝트를 하기 위한 git 사용 전략  (0) 2024.04.18
    [Zustand] Zustand란?  (0) 2024.03.23
    [라이브러리] React-query  (0) 2024.02.15

    댓글

Designed by Tistory.