도커(1): docker에 대하여

김현진·2020년 9월 24일
1

도커

목록 보기
1/7

먼저 시작전 밑의 모든자료는 따라하며 배우는 도커와 CI환경에 자료를 가져와서 쓰는거 이니 참조하십시오.

오늘 내가 정리한 docker에 대해 머리에 있는 내용을 정리할겸 블로깅을 해본다.

docker란 무엇인가?

  • 컨테이너를 사용하여 응용프로그램을 더 쉽게 만들고 배포하고 실행 할 수 있도록 설계된 도구이며
    컨테이너 기반의 오픈소스 가상화 플랫폼

  • 리눅스 컨테이너를 기반으로 하여 특정한 서비스를 패키지하고 배포하는데 유용한 오픈소스 프로그램.

무슨말인지 아직 잘 모르겠지만 차차 정리하면서 익숙해지면 괜찮아 지겠지?

docker를 왜 사용 해야될까?

  • 우선 docker 없이 프로그램을 설치를 해야된다면 installer 설치 => installer 실행 과정 중 에러가 뜰 수 있음 설치과정도 복잡하다.(아마 한번쯤은 다 겪어 봤을것이라고 추정됨)

  • 특정한 소프트웨어를 개발한 이후에 배포하고자 할 때 해당 프로그램이 어디에선가 손쉽게 구동 하기위해 (배포 및 운용을 쉽게 할 수 있다!!!)

  • docker를 사용한다면 설치가 간편하고 설치시 error 빈도를 줄일 수 있다.

docker 설치방법

  • 리눅스
curl -s https://get.docker.com/ | sudo sh

sudo usermod -aG docker ubuntu // 우분투 유저 권한추가
  • mac / window

docker 홈페이지에서 다운 여기

docker이미지와 컨테이너의 간단한 소개

도커아이콘을 보듯이 고래(?)가 컨테이너들을 가지고 있다.

여기서 컨테이너는 우선 간단하고 편리하게 프로그램을 실행 시켜주는 것이라고 생각하면 된다.

도커 이미지는 응용프로그램을 실행하는데 필요한 설정이나 종속성을 가지고 있다. 컨테이너는 그림에서 보듯이 도커이미지의 인스턴스이며 프로그램을 실행하는 애다. 도커 이미지를 통해 컨테이너를 생성하고 컨테이너를 통해 프로그램을 실행한다.

도커와 기존 가상화 기술과의 차이(docker vs VM)

출처 https://m.post.naver.com/viewer/postView.nhn?volumeNo=21385900&memberNo=2521903

여기서 하이퍼바이저라는 생전 처음 들어보는 단어가 나온다.

여기서 하이퍼바이저란
호스트 시스템(OS: Mac, window, Linux,...)에서 다수의 게스트OS(mac, window,..)를 구동할 수 있게 하는 소프트웨어. 하드웨어를 가상화하면서 하드웨어와 각각의 VM을 모니터링 하는 중간관리자라고 보면된다

하이퍼바이저는 가상 머신(Virtual Machine, VM)을 생성하고 구동하는 소프트웨어입니다. 가상 머신 모니터(Virtual Machine Monitor, VMM)라고도 불리는 하이퍼바이저는 하이퍼바이저 운영 체제와 가상 머신의 리소스를 분리해 VM의 생성과 관리를 지원합니다

위의 그림에서는 host os가 생략되었다고 보면 될 거 같고, 위의 그림을 보면 쉽게 이해가 될것이다. 하드웨어core1 => VM core1 , 하드웨어core2 => VM core2

하이퍼바이저에 의해 구동되는 VM은 각 VM마다 독립된 가상하드웨어를 할당하는데 논리적으로 분리되어 있어서 한 VM에 오류가 발생해도 다른 VM에 영향을 주지 않는다.

docker 컨테이너 특징

  • 돌아가는 앱은 컨테이너가 제공하는 격리기능 내부에 샌드박스가 있지만 여전히 같은 호스트의 다른 컨테이너와 동일한 커널을 공유함. 결과적으로 컨테이너 내부에서 실행되는 프로세스는 호스트 시스템에서 볼수 있음

도커 컨테이너와 가상머신의 공통점

  • 기본 하드웨어에서 격리된 가상환경 내에 어플리케이션을 배치하는방법

도커 컨테이너의 이점

  • 도커 컨테이너는 게스트OS 하이퍼바이저가 없기 때문에 가볍다.

Cgroup, 네임스페이스, 커널 용어 정리

  • Linux® 커널은 Linux 운영 체제(OS)의 주요 구성 요소이며 컴퓨터 하드웨어와 프로세스를 잇는 핵심 인터페이스입니다. 그리고 두 가지 관리 리소스 사이에서 최대한 효과적으로 통신합니다.

커널은 다음과 같은 4가지 기능을 수행합니다.
메모리 관리: 메모리가 어디에서 무엇을 저장하는 데 얼마나 사용되는지를 추적합니다.
프로세스 관리: 어느 프로세스가 중앙 처리 장치(CPU)를 언제 얼마나 오랫동안 사용할지를 정합니다.
장치 드라이버: 하드웨어와 프로세스 사이에서 중재자/인터프리터의 역할을 수행합니다.
시스템 호출 및 보안: 프로세스의 서비스 요청을 수신합니다.

출처
https://www.redhat.com/ko/topics/linux/what-is-the-linux-kernel

  • C Group: CPU , 메모리, Network, BandWith, 등 프로세스 그룹의 시스템 리소스 사용량 관리
    => 어떤 어플이 사용량이 너무 많다면 그 어플리케이션 같은 것을 C group에 집어 넣어서 CPU와 메모리 사용 제한 가능 즉 하나의 프로그램에 메모리 / 하드디스크 / 네트워크 등 할당을 시켜주는 거라고 보면된다.(프로세스를 작동시키는데 필요한 양, 카카오톡을 실행시킬때 필요한 하드 / 메모리(RAM)등등 용량)
  • 네임 스페이스
    하나의 시스템에서 프로세스를 격리실킬 수 있는 가상화 기술 위의 그림에서 보듯이 점선이 격리가 되어 있다고 보면된다.
  • 용어정리

    오버헤드(Overhead)란 어떤 처리를 하기 위해 들어가는 간접적인 처리 시간 · 메모리 등을 말한다.

profile
기록의 중요성

0개의 댓글