도커의 동작 원리

1. 도커의 구조 

  • 도커 사용  X
    • 도커를 사용하지 않는 일반 서버의 구조로 물리 서버가 있고, 물리 서버에서 동작하는 운영체제가 있으며, 운영체제 위에 프로그램이나 데이터가 올라갑니다.
    • 물리 서버 | 운영체제 |  프로그램 or 데이터
  • 도커 사용 O
    •  도커를 사용하는 경우, 물리 서버에서 동작하는 리눅스 운영체제가 존재하며, 운영체제 위에서 도커 엔진이 동작하고 그 위에는 컨테이너가 존재합니다. ( 데이터나 프로그램은 컨테이너 내부에 위치합니다. )  
    • 물리 서버 |  리눅스 운영체제 | 도커 엔진 | 컨테이너 ( 프로그램 or 데이터 ) 
  • 컨테이너의 구조
    • 리눅스 운영체제에서 커널을 제외한 나머지 부분이 들어있습니다. 
      ( 커널 : 하드웨어를 다루는 부분 / 나머지 : 명령을 전달받거나 커널이 실행한 결과를 프로그램에 다시 전달 )  
    • 즉, 커널은 가장 밑바탕이 되는 리눅스 운영체제의 커널공유하여 도커가 '가볍다'는 특징을 가질 수 있습니다.
    • scratch 이미지를 사용하는 경우 텅 빈 컨테이너를 만들 수 있습니다.
    • 도커는 밑바탕에서 리눅스 운영체제가 동작하는 것을 전제로 하는 구조이므로 리눅스 운영체제에서만 동작할 수 있다.

 

2. 도커 허브 / 이미지 / 컨테이너

  • 이미지는 컨테이너를 생성하기 위한 빵틀같은 역할을 합니다. 
    • 하나의 이미지로부터 여러 개의 컨테이너를 생성할 수 있습니다. 
    • 반대로 컨테이너를 바탕으로 이미지를 생성할 수도 있습다다. ( 이미지 익스포트 )
  • 도커 허브는 도커 이미지를 배포하는 서비스의 이름입니다. ( https://hub.docker.com )
  • 한 컨테이너의 한 프로그램
    • 도커를 사용하는 원칙 중 하나
    • 유지보수와 보안 측면에서 유리함.

 

3. 도커 컨테이너의 생애주기와 데이터 저장

  • 컨테이너 생명주기
    • 컨테이너는 도커 허브와 이미지를 사용하면 쉽게 생성 가능합니다. 따라서, 기존의 컨테이너를 업데이트 하는 것보다, 오래된 컨테이너를 버리고 새로운 이미지로부터 새로운 컨테이너를 만들어 갈아타는 방식을 사용합니다. 
    • 생성 > 실행 > 종료 > 폐기 
  • 데이터 저장
    • 컨테이너를 폐기하면 컨테이너 안의 데이터( 파일 등 )는 전부 삭제됩니다. 따라서, 보통 컨테이너 외부에 데이터를 저장합니다. 
    • 보통 도커가 설치된 물리적 서버( 호스트 )의 디스크를 마운트해 해당 디스크에 데이터를 저장합니다.
      ( 외부에 데이터 저장  )
    • 마운트 : 디스크를 연결해 데이터를 기록할 수 있도록 한 상태

 

4. 도커의 장점과 단점

도커의 핵심 성질

  • 환경을 격리할 수 있다.
    • 독립된 환경으로 여러 개의 컨테이너를 띄울 수 있고, 똑같은 애플리케이션을 여러 개 띄울 수 있다.
    • 이미지를 만들 수 있고, 도커 허브를 이용하여 배포할 수 있다. 
      1. 이미지를 처음부터 만들지 않아도 내려받기만 하면 컨테이너를 사용할 수 있다.
      2. 컨테이너 구축이 간단하므로 교체가 쉽고, 업데이트가 쉽다.
      3. 이동성이 좋다. ( 환경 이동이나 개발환경 구축이 쉽다 )
    • 컨테이너에 커널을 포함시킬 필요가 없다.
      1. 컨테이너에는 커널을 포함시키지 않아도 되기 때문에 가볍다.
  •  

도커의 장점

  • 한 대의 물리 서버에 여러 대의 서버를 띄울 수 있다.
    • 도커를 통해 격리된 환경으로 여러 가지 기능을 안전한 상태로 띄울 수 있으며, 같은 소프트웨어를 여러 개 띄울 수도 있다.
    • 컨테이너에는 커널이 포함되지 않으므로 소프트웨어적으로 하드웨어를 재현하는 가상화 기술에 비해 가볍다. 
  • 서버 관리가 용이하다.
    • 업데이트가 간단하기 때문에 최신 상태로 소프트웨어를 유지하기 쉽다.
    • 컨테이너 교체나 수정이 쉽기 떄문에 환경 이전이 간단하다. ( 생성 및 폐기가 간단함 ) 
  • 다루기 쉽다.
    • 명령 한 줄로 서버 구축이 끝난다.

도커의 단점

  • 리눅스용 소프트웨어밖에 지원하지 않는다. 
  • 호스트 서버에 문제가 생기면 모든 컨테이너에 영향을 미친다.
  • 컨테이너 여러 개를 사용하는 형태를 가정하므로 컨테이너 하나만을 사용하면 이점을 누릴 수 없다.
    ( 오히려 도커 엔진으로 인해 오버헤드가 발생함 )

도커의 주 용도

  • 팀원 모두에게 동일한 개발환경 제공하기 ( 동일한 환경 여러 개 만들기 )
  • 새로운 버전 테스트 ( 격리된 환경을 이용 )
  • 동일한 서버가 여러 대 필요한 경우( 컨테이너 밖과 독립된 성질을 이용 )

 

'Docker' 카테고리의 다른 글

Docker & Kubernetes [ 1 ]  (1) 2023.12.04
12月 Wanted Free Onboarding BE Challenge [ 1. 사전 과제 ]  (1) 2023.12.04

Docker  ?

도커는 '데이터 또는 프로그램을 격리시키는 기능을 제공하는 소프트웨어' 입니다.

 

데이터나 프로그램을 독립된 환경에 격리해야 하는 이유는 무엇일까요?

  • 대부분의 프로그램은 단독으로 동작하는 것이 아니라 어떤 실행 환경이나, 다른 프로그램을 이용해 동작합니다.
    ( PHP로 작성된 프로그램은 PHP 실행 환경이 필요하고, 파이썬으로 작성된 프로그램은 파이썬 실행 환경이 필요함 )
  • 소프트웨어 역시 여러 프로그램으로 구성될 수 있고, 다른 프로그램과 정보를 공유하기도 합니다.
    ( 워드프레스를 실행하려면 MySQL DB가 필요하고,서로 다른 시스템 A와 B가 같은 프로그램 C와 연동될 수 있음 )
  • 위의 예시와 같이 프로그램 간 공유로 인해 많은 에러가 발생할 수 있습니다.
    ( 프로그램 공유하는 시스템 간 요구하는 버전의 불일치 등 )
  • 도커는 컨테이너 기술을 활용해 한 서버에서 실행되는 다양한 프로그램과 데이터를 각각 독립된 환경에 격리하는 기능을 제공합니다.

 

컨테이너 & 도커 엔진 & 이미지

  • 컨테이너란 시스템에 필요한 실행환경, 데이터 또는 프로그램을 격리시키는 단위입니다.
  • 도커 컨테이너는 이미지의 인스턴스로 실행 중인 어플리케이션을 뜻합니다. 
  • 도커는 이러한 컨테이너를 다루는 기능을 제공하는 소프트웨어이고, 도커를 사용하기 위해선 도커의 본체인 도커 엔진을 설치해야 합니다.
  • 도커 엔진을 사용해 컨테이너를 생성하고 구동시킬 수 있습니다.
  • 이미지는 컨테이너를 만들기 위해 컨테이너를 위해 프로그램에 필요한 실행 환경이나 데이터 등이 패키징 되어있는 파일입니다. 

도커의 제약 사항

  • 리눅스 운영체제가 필요하다.
  • 컨테이너에서 동작시킬 프로그램도 리눅스용 프로그램이다. 

 

'Docker' 카테고리의 다른 글

Docker & Kubernetes [ 2 ]  (2) 2023.12.26
12月 Wanted Free Onboarding BE Challenge [ 1. 사전 과제 ]  (1) 2023.12.04

컨테이너

컨테이너란?

  • 실행에 필요한 모든 파일을 포함한 전체 실행(runtime) 환경에서 애플리케이션을 패키징하고 격리할 수 있는 기술
  • 전체 기능을 유지하며 컨테이너화된 애플리케이션을 환경(개발, 테스트, 프로덕션 환경 등) 간에 쉽게 이용할 수 있음

 

컨테이너의 장점

  • 컨테이너를 활용하면 담당 영역을 분리하여 개발 팀과 운영 팀 간의 충돌을 줄일 수 있음
    ( 개발자는 애플리케이션에 집중하고 운영 팀은 인프라에 주력할 수 있다 ) 
  • 컨테이너 기술은 오픈소스 기반이므로 최신 기술을 활용하여 다양하고 강력한 기술 제품을 쉽게 채택할 수 있다.
  • 격리(Isolation) : 각 컨테이너는 독립된 환경에서 실행되어 애플리케이션과 라이브러리 간의 충돌을 방지할 수 있다
  • 이식성(Portability) : 컨테이너는 호스트 시스템의 환경에 관계없이 일관된 방식으로 실행되므로 이식성이 뛰어나다
  • 확장성(Scalability) : 컨테이너는 가상화 오버헤드가 적어 가볍게 실행되며, 필요에 따라 쉽게 복제하여 확장할 수 있다 
  •  마이크로서비스 아키텍처 (MSA) : 컨테이너는 MSA를 지원하여 각 서비스를 독립적으로 배포하고 운영할 수 있다.

 

가상머신과 컨테이너

특징 컨테이너 가상머신
기술 호스트 OS의 커널을 공유 별도의 하이퍼바이저를 통해 가상화
시작 시간 빠르게 시작 및 종료 부팅 및 초기화에 시간이 소요됨
자원 사용량 가볍고 효율적 무겁고 상대적으로 높은 오버헤드
격리 프로세스 격리 완전한 운영 체제 격리
이식성 뛰어난 이식성 호스트 OS에 의존적이며 이식성이 상대적으로 낮음
성능 가상화 오버헤드가 적음 가상화 오버헤드가 상대적으로 높음
확장성 가볍고 쉽게 복제 가능 무겁고 적은 수의 가상 머신을 동시에 실행할 수 있음
운영 체제 지원 동일한 호스트 OS 상에서 실행되므로 호스트와 동일 다양한 운영 체제를 가상화할 수 있음
사용 사례 마이크로서비스, 컨테이너 오케스트레이션
(쿠버네티스)
서버 가상화, 테스트 환경 등

 

도커

  • 컨테이너 기술을 제공하는 오픈 소스 플랫폼 중 하나

 

도커 파일, 도커 이미지, 도커 컨테이너

도커 파일(Dockerfile) : 도커 이미지를 빌드하기 위한 텍스트 기반의 스크립트  

도커 이미지(Docker Image) : 애플리케이션과 그에 필요한 모든 것들을 패키징한 불변의 가볍고 실행 가능한 파일

도커 컨테이너(Docker Container) : 도커 이미지의 인스턴스로, 실행 중인 애플리케이션과 그에 필요한 환경을 포함

 

레퍼런스

https://www.redhat.com/ko/topics/containers

'Docker' 카테고리의 다른 글

Docker & Kubernetes [ 2 ]  (2) 2023.12.26
Docker & Kubernetes [ 1 ]  (1) 2023.12.04

+ Recent posts