공부?/국비 지원 일기장

62일차 - 가상화, 도커, 컨테이너

무무요 2024. 11. 11. 17:50


=======

가상화
* 사전 지식
운영체제(Operating System) 
- 컴퓨터 구성 요소인 하드웨어와 소프트웨어 간 인터페이스 역할
  → OS도 소프트웨어지만 특수 기능(인터페이스 역할 및 시스템 자원 관리)을 수행하기에 시스템 소프트웨어라고 부름
주요 기능
- 프로세스 관리
- 메모리 관리
- 파일시스템 관리
- 입출력 관리
- 인터페이스 제공
    
프로그램 vs 프로세스
프로그램
- 실행 가능한 명령어들의 집합
- 하드디스크와 같은 저장장치에 저장

프로세스
- 실행 중인 프로그램
- 메모리(RAM)에 위치          
       
가상화는 실제 물리적(Actual, Physical)으로 존재하는 것이 아닌, 논리적으로 추상화(Abstraction)되어 만들어진 것으로 여러 가지 가상화가 있음
종류
1. 가상 컴퓨터 하드웨어 플랫폼
  > Virtual Computer Hardware Platform
  > 가상화 하드웨어로 구성되는 컴퓨팅 플랫폼(= Virtual Machine)
2. 가상 스토리지 장치
  > Virtual Storage Device 
    - Redundant Array Independent Disk, Logical Unit Number
3. 가상 네트워크 자원
  > Virtual Network Resource – Virtual Local Area Network

서버 가상화
- 1960년대 메인프레임 컴퓨터에서 애플리케이션에 사용되는 시스템 자원을 논리적으로 분할하여 할당하는 기술(Partitioning)을 시초로 하고 있음

종류 (기존 Application운영(가상화 사용X)


1. 호스트 가상화


2. 하이퍼바이저(호스트 가상화와는 다르게 호스트 OS를 필요로 하지 않음)


3. 컨테이너 가상화(OS에 컨테이너를 운영하기 위한 컨테이너 런타임(Ex. 도커)을 설치한 후 어플리케이션을 실행하는 방식)

 

하이퍼바이저(Hypervisor)
- 하나의 물리적 시스템에서, 다수의 가상머신을 실행시키는 소프트웨어
- 가상머신(VM)에 필요한 자원을 할당/관리하는 역할
- 하이퍼바이저가 작동하는 물리적 시스템을 호스트(Host Machine)라고 하며, 호스트 상에서 작동하는 가상머신들을 게스트(Guest Machine)라고 함
- 하이퍼바이저 어원
  - OS의 커널을 슈퍼바이저라고 했음
  - 슈퍼바이저(Guest에서 작동하는 커널)들의 슈퍼바이저(Host에서 작동하는 커널) 이기 때문에 슈퍼(Super)보다 더 강한 표현으로 하이퍼(Hyper)를 사용하게 되었음
- 1973년 “Architectural Principles for Virtual Computer Systems”에서 2가지 유형으로 하이퍼바이저를 분류

 

Type 1 -> Native( bare metal)

 

Type 2 -> Hosted

- 성능은 Type 1이 우수

- 대표적인 Type 1 하이퍼바이저
Microsoft Hyper-V, RedHat KVM, VMware ESX


클라우드 = 빌려쓴다(H/W, S/W, O/S)      
OS 비슷한거 + Apache를 구동할때 필요한 내용(라이브러리) + apache


Docker 
  * 도커 개요 
- 데이터 또는 프로그램을 격리하는 기능을 제공하는 소프트웨어
  - 빠르고 편리하게 애플리케이션을 개발/테스트/배포/실행할 수 있는 플랫폼 

- 도커(Docker)는 리눅스의 응용 프로그램들을 프로세스 격리 기술들을 사용해 컨테이너로 실행하고 관리하는 오픈 소스 프로젝트 
- 컨테이너
  - 소프트웨어를 배포/운영할 때 필요한 코드, 라이브러리, 환경 설정 파일들을 모아 격리시킨 후 실행할 수 있는 패키지 형태로 만들어 놓은 것
  - 서로 다른 컨테이너는 격리된 환경에서 작동하므로 충돌 불가
 - 가상머신에 비해 리소스 소모량이 적음

  * 도커 특징 
- 컨테이너를 사용하여 애플리케이션 및 지원 구성 요소를 개발 
- 리눅스 자체 기능을 사용하여 프로세스 단위의 격리 환경을 제공 
- 배포 용량과 시간을 단축하고, 성능 손실을 최소화함  

* 도커 구조


* 도커 장/단점
장점
- 한 대의 물리 서버에 여러 대의 서버를 가용할 수 있음 : 가상화를 이용해도 되지만 도커는 격리된 환경을 제공하여 더 안전하며, 컨테이너에는 커널을 포함하고 있지 않으므로 가상화 기법에 비해 가볍다.
- 서버 관리 용이 : 컨테이너 교체나 수정이 쉬워 환경 이전이 쉽다.

단점
- 리눅스용 소프트웨어만 지원하므로 제한적으로 사용 가능
- 호스트 시스템에 문제 발생 시 모든 컨테이너에 영향을 미침

도커 종류(에디션)
- Docker Community Edition (CE) 
- Docker Enterprise Edition (EE) 

\ = 다음줄에 이어서 작성하겠다.
컨테이너는 가벼워야 되기 때문에 기본적으로 설치를 다 안한다.

* 도커 설치
- 다양한 운영체제에서 사용 가능(리눅스, 윈도우, 맥 OS X)  
- 설치 및 설정 방법은 운영체제에 따라 다르지만, 설치된 이후 사용 방법은 동일
- 공식 홈페이지 : https://www.docker.com/ 
설치 환경 
- 운영체제 : 리눅스(Ubuntu Desktop 22.04) 
- 하드웨어 : x86_64(다른 표현으로 amd64와 동일)

 

도커 주요 명령어(컨테이너, 이미지, 볼륨, 네트워크)

컨테이너 관련 명령어
# docker container 명령어 옵션(# docker container --help로 확인)

주요 명령어
start : 컨테이너 실행
stop : 컨테이너 정지
create : 도커 이미지로부터 컨테이너 생성
rm : 정지 상태의 컨테이너 삭제
exec : 실행 중인 컨테이너 내 프로그램 실행
ls : 컨테이너 목록 출력
cp : 도커 컨테이너와 도커 호스트 간 파일 복사
commit : 도커 컨테이너를 이미지로 변환

run : 도커 이미지 다운로드 + 컨테이너 생성 및 실행
  → docker image pull + docker container create + docker container start 일괄 수행
docker container run < 제일 많이 쓰인다.

이미지 관련 명령어
# docker image 명령어 옵션(# docker image —help로 확인)
주요 명령어
pull : 도커 이미지 다운로드 
rm : 도커 이미지 삭제
ls : 도커 이미지 목록 출력
build : 도커 이미지 생성

볼륨 관련 명령어
# docker volume 명령어 옵션(# docker volume —help로 확인)
주요 명령어
create : 볼륨 생성
inspect : 볼륨 상세 정보 출력
ls : 볼륨 목록 출력
rm : 지정한 볼륨 삭제
prune : 현재 마운트되지 않은 볼륨 모두 삭제

네트워크 관련 명령어
# docker network 명령어 옵션(# docker network —help로 확인)
주요 명령어
connect : 컨테이너를 도커 네트워크에 연결
disconnect : 컨테이너의 도커 네트워크 연결 해제
create : 도커 네트워크 생성
inspect : 도커 네트워크 상세 정보 출력
prune : 현재 컨테이너가 접속하지 않은 네트워크를 모두 삭제
rm : 지정한 네트워크 삭제