Docker & Docker Compose

Fraise_KIM·2023년 8월 18일
0

Docker 🐳

  • 컨테이너 기술을 기반으로 한 일종의 가상화 플랫폼
  • 부두에서 컨테이너를 옮기과 관리하는 직업인 ‘docker’에서 따온 이름처럼, 컨테이너를 잘 다룰 수 있게 도와주는 도구이다.
  • 도커를 이용하면 1️⃣ 이미지를 실행시켜 컨테이너로 만들거나, 2️⃣ 생성된 컨테이너를 관리하거나 3️⃣ 컨테이너를 다시 이미지로 만드는 작업이 쉽게 가능해 진다.

  • 가상화 : 물리적 자원인 하드웨어를 효율적으로 활용하기 위해 하드웨어 공간 위에 가상의 머신을 만드는 기술
  • 컨테이너 : 컨테이너가 실행되고 있는 호스트 OS의 기능을 그대로 활용하면서 프로세스를 격리하여 독립 환경을 만드는 기술
    👉 Docker는 독립된 환경을 만들어서 하드웨어를 효율적으로 활용하는 기술



가상화

Hyperviser 기반의 가상화 vs Container 기반의 가상화


가상화

  • 앞서 말했듯, 하나의 하드웨어를 여러 개의 가상 머신으로 분할해 효율적으로 사용하는 기술
  • 분할된 가상머신들은 각각의 독립환경으로 구동 된다.
  • 이 때, 베이스가 되는 기존의 환경을 Host OS, 그리고 가상 머신으로 분할된 각각의 환경을 Guest OS라고 부름.



Hypervisor

  • 가상 머신을 생성하기 위해서는 Hypervisor 또는 가상 머신 모니터라고 불리는 소프트웨어를 이용한다.

  • 호스트 하드웨어에 설치되어 호스트와 게스트를 나누는 역할을 하고,
    각각의 게스트는 하이퍼바이저에 관리되며 시스템 자원을 할당받게 된다.

  • 이때 하이퍼바이저에 의해 생성된 게스트(가상서버)는 호스트(물리서버)나 다른 게스트와 상호 간섭하지 않고, 완전히 분리된 환경에서 구동된다.

  • 하이퍼바이저를 활용하면 마치 하드웨어가 여러 개인 것처럼 하나의 서버를 여러 명이 나눠서 쓸 수 있다. (컴퓨터 한 대에서 서로 다른 OS를 동시에 사용 가능)


    ⚠️ 가상 머신으로 무언가를 하려면, 하이퍼바이저를 반드시 거쳐야 한다는 점에서, 속도 저하가 필연적이다.
    또한 가상머신은 해당 환경을 구동하는데 필요한 파일을 모두 포함하고 있기 때문에, 가상머신을 배포할 때 만들어지는 이미지의 크기가 매우 커진다는 한계점이 있다.



Container

  • 하이퍼바이저와 달리, 컨테이너는 가상의 OS를 만드는 것은 아니다.
  • 컨테이너는 베이스 환경의 OS를 공유하면서 필요한 프로세스만 공유하는 방식.
  • 커널을 공유하기 때문에 호스트 OS의 기능을 모두 사용할 수 있다.
  • 그렇기 때문에 컨테이너 위에서는 호스트 OS와 다른 OS를 구동할 수 없다.
  • 대신에 격리시킬 애플리케이션과 그것에 필요한 파일이나 특정 라이브러리 등 종속 항목만 포함하기 때문에, 배포를 위해서 생성되는 이미지의 용량이 작아진다는 장점이 있다.
  • 운영체제가 아닌 프로세스이며, 하이퍼바이저를 거칠 필요가 없어 실행속도가 빠르다.



Image

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

  • 컨테이너는 즉, 이미지를 실행한 상태이며 추가되거나 변하는 값들은 컨테이너에 저장되게 된다.
  • 때문에 같은 이미지에서 여러개의 컨테이너를 생성할 수 있으며, 컨테이너의 상태가 변하거나 컨테이너가 삭제되더라도 이미지는 그대로 남아있게 된다.

👉 정리하면 이미지는 컨테이너 실행에 필요한 모든 정보를 가지고 있기 때문에, 의존성을 위해서 이것저것 설치하거나 충돌을 해결할 필요가 없다.





도커의 장점

  • 개발 과정에서 다른 라이브러리와 충돌하는 것을 방지하기 위해 격리된 환경이 필요할 경우, 완성된 서비스를 배포할 경우, 혹은 배포 중인 서비스를 받아서 실행해 볼 때도 유용하다.
  • 특히 배포 과정에서 도커를 사용해 필요한 파일들만 포장해서 만들면 종속성 이슈에서도 벗어날 수 있다.
  • 즉, 도커를 사용하면 서버가 늘어나는 경우 파일 받고, 필요한 라이브러리 설치하고 이런 불필요한 과정 없이,이미지를 실행해서 컨테이너로 만들면 된다.

1️⃣ 빠른 설치 (Rapid Application Deployment)

2️⃣ 어플리케이션 이식성(Portability Across Machines)

: 어플리케이션과 설치 파일들이 하나의 컨테이너에 존재하기 때문에 호스트의 커널이나 플랫폼 버전 등에 상관없이 도커만 실행할 수 있으면 사용 가능

3️⃣ 버전제어, 컴포넌트 재사용(Version Control & Component Reuse)

: 컨테이너 버젼 제어가 쉽고 변경 내역의 확인이 가능하며 롤백이 간단하다.

이전 레이어에서 컴포넌트들을 재사용하기 때문에 도커를 가볍게 만들 수 있다.

4️⃣ 쉬운 유지관리(Simplified Maintenance)

: 어플리케이션 종속성에 관한 문제들에 대해 유지관리가 쉽다.




Docker Hub

  • 도커에서 제공하는 이미지 저장소

  • https://hub.docker.com/

  • ex) Docker에서 제공하는 MySQL 이미지



Docker Compose

  • 다중 컨테이너를 정의하고 실행하기 위한 도구
  • 다중 컨테이너를 구성하기 위해서 YML 파일을 사용한다.
  • https://docs.docker.com/compose/






📂 참고자료
https://velog.io/@markany/도커에-대한-어떤-것-1.-도커란-무엇인가

https://velog.io/@zidru/도커Docker에-대해서-알아보자

0개의 댓글