1장. 도커란?

yun·2022년 9월 24일
0

Docker

목록 보기
1/7
post-thumbnail
  • 리눅스 컨테이너에 여러 기능을 추가하여, 애플리케이션을 컨테이너로서 좀 더 쉽게 사용할 수 있게 만들어진 오픈소스 프로젝트
  • Go 언어로 작성
  • 일반적으로 도커 엔진(Docker Engine), 또는 도커 관련 모든 프로젝트를 의미
    • 도커 컴포즈(Docker Compose), 레지스트리(Private Registry), 도커 허브(Docker Hub), Docker for Desktop 등
    • 도커 엔진: 컨테이너를 생성하고 관리하는 주체

가상 머신과 도커 컨테이너

  • 기존 가상화 기술
    • 하이퍼바이저를 이용해 여러 개의 운영체제를 하나의 호스트에서 생성해 사용
    • 운영체제는 가상 머신(VM: Virtual Machine)이라는 단위로 구별
    • 장점: 완벽한 운영체제를 생성
    • 단점
      • 일반 호스트에 비해 성능 손실이 있음
      • 수 기가바이트에 달하는 가상 머신 이미지를 애플리케이션으로 배포하기 부담스러움
  • 도커 컨테이너
    • 리눅스의 자체 기능인 chroot, namespace, cgroup을 사용
    • 프로세스 단위의 격리 환경 생성
    • 컨테이너에 필요한 커널은 호스트의 커널을 공유해 사용
    • 컨테이너 안에는 애플리케이션을 구동하는 데 필요한 라이브러리 및 실행 파일만 존재
    • 장점
      • 컨테이너 이미지 용량이 가상 머신에 비해 매우 작음
      • 컨테이너를 이미지로 만들어 배포하는 시간이 가상 머신에 비해 빠름
      • 가상화된 공간을 사용할 때의 성능 손실이 거의 없음

Q. 도커의 단점?

  • 베어-메탈 속도를 제공하지는 않음
  • 지속성을 위한 설계 필요
    • 도커 컨테이너는 스테이트리스(stateless)이며 불변적(immutable)
    • 컨테이너 인스턴스는 일시적(transient)
    • 인스턴스가 시스템 메모리로부터 제거되면 영원히 사라짐

도커를 시작해야 하는 이유

앱 개발과 배포가 편리해짐

개발/운영 환경 통합

  • 도커 컨테이너는 호스트 OS 위에서 실행되는 격리된 공간
  • 즉, 독립된 개발환경을 보장
  • 운영 환경 배포 시
    • 도커 이미지를 운영 서버에 전달하기만 하면 됨
    • 운영 서버에서 컨테이너에서 사용하던 패키지를 새롭게 설치할 필요 x
    • 각종 라이브러리 설치로 인한 의존성을 걱정할 필요 x

배포 속도가 빨라짐

  • 커널을 포함하지 않으므로 이미지 크기가 크지 않음
  • 이미지 내용은 레이어 단위로 구성
  • 중복되는 레이어를 재사용할 수 있어서 앱 배포 속도가 매우 빨라짐

여러 앱의 독립성과 확장성이 높아짐

  • 모놀리스(Monolith) 애플리케이션
    • 여러 모듈이 상호작용하는 로직을 하나의 프로그램 내에서 구동
    • 서비스의 기능이 복잡해지고 거대해질수록 소프트웨어 자체의 확장성과 유연성이 줄어듦

마이크로서비스(Microservices) 구조 등장!

  • 마이크로서비스
    • 여러 모듈을 독립된 형태로 구성
    • 언어에 종속 x
    • 변화에 빠르게 대응
    • 각 모듈의 관리가 쉬워짐

도커랑 무슨 상관이 있냐면...

  • 컨테이너는 수 초 내로 생성 및 시작 가능
  • 여러 모듈에게 독립된 환경을 동시에 제공 가능

따라서, 마이크로서비스 구조에서 많이 사용하게 됨

개발자가 구조를 직접 구현하기보다는 도커 스웜 모드, 쿠버네티스 등 컨테이너 오케스트레이션 플랫폼을 통해 사용하는 것이 일반적

도커 엔진 설치

  • 도커 EE(Enterprise Edition), 도커 CE(Community Edition) 제공
  • 실습에서는 도커 CE의 stable 버전 사용 권장
    1) 리눅스: CLI로 도커 엔진 설치
    2) 윈도우, 맥
    • Docker Desktop 설치
    • 리눅스 환경 사용(vm으로 리눅스 설치 or AWS EC2에서 1번 방법)

참고문헌

0개의 댓글