Docker

 

"Go언어로 작성된 리눅스 컨테이너 기반으로 하는 오픈소스 가상화 플랫폼"

 

Linux Container

운영체제 수준의 가상화 기술로 리눅스 커널을 공유하면서 프로세스를 격리된 환경에서 실행하는 기술

docker container / virtual machine

 

특징

  • 운영체제 수준의 가상화 기술(게스트 OS 관리가 필요 없음)
  • 빠른 속도와 효율성(하드웨어 에뮬레이션이 없음)
  • 높은 이식성(portability, 컨테이너 각각의 독자적인 실행환경)
  • 상태를 가지지 않음(stateless, 다른 컨테이너에게 영향을 주지 않음)

종류

  • System Container
    • 컨테이너 기술들을 사용해 운영체제 위에 하드웨어 가상화 없이 운영체제를 실행
    • 다수의 프로세스가 같은 환경을 공유하는 것이 목표
    • LXC, LXD
  • Application Container
    • 컨테이너 기술을 활용해 하나의 애플리케이션을 실행하는 것이 목표
    • 단 하나의 프로세스만 실행한다
    • Docker

 

❗ 컨테이너라는 말이 정확하게 정의되어 있지는 않은 느낌! 다 각자 설명들이 미세하게 다름... 그냥 그림으로 나는 이해해야겠다! ❗

 

Docker Image

컨테이너를 실행할 수 있는 실행파일, 설정 값들을 가지고 있는 것

"Image를 Container에 담고 실행시키면 해당 프로세스가 동작"

 

Docker File

이미지 생성 출발점, 이미지를 구성하기 위한 명령어들을 작성하여 이미지를 구성할 수 있다.

 

❗ 즉, Docker File을 읽을 수 있으면 해당 이미지가 어떻게 구성되어 있는지 알 수 있음! ❗

 

Docker Hub & Docker Registry

허브에서는 이미지를 저장하고 관리해준다.

https://hub.docker.com/

 

Docker Hub Container Image Library | App Containerization

We and third parties use cookies or similar technologies ("Cookies") as described below to collect and process personal data, such as your IP address or browser information. You can learn more about how this site uses Cookies by reading our privacy policy

hub.docker.com

 

❗ 사용해보니 GitHub와 유사, push, pull 명령어 사용!! ❗

 

Docker Archtecture

❗ 내가 더 유심하게 봐야하는 부분은 "HOST", 왜냐면 내가 배포를 해야하니까!! ❗

'Container' 카테고리의 다른 글

[Docker] Docker Swarm  (0) 2021.09.11
[Docker] Docker Machine  (0) 2021.09.11
[Docker] Docker Compose  (0) 2021.09.11
[Docker] Docker Engine  (0) 2021.09.11
[Docker] Docker 구조  (0) 2021.09.11

OS Posting(앞으로도 쭉 업데이트할 예정!)

더보기
❗ OS는 기초중에 기초니까... 개념 확실히 알고 가자! ❗

'Computer Science > DevOps' 카테고리의 다른 글

[Jenkins] Jenkins Pipeline 구축  (0) 2023.07.03
[Jenkins] Jenkins 다뤄보기  (0) 2023.06.27
[CI/CD] Tool  (0) 2021.08.11
[CI/CD] 정의  (0) 2021.08.11
[배경] DevOps 공부  (0) 2021.08.11

File-System Structure

  • logical file system : meta data(내용을 제외한 모든 파일 시스템 구조) 관리, Directory 구조를 관리, FCB
  • file-organiztion module : 물리 블럭과 논리 블럭을 알고 있어서 논리 주소를 물리주소로 변경
  • basic file system : 적절한 장치드라이버에게 물리블록을 읽고 쓰도록 명령 내림
  • I/O control : Device driver와 interrupt handler로 이루어져 있으며 고수준 언어의 명령을 디바이스에 맞는 저수준 언어로 변경

 

Virtual File System

  • os는 동시에 여러 타입의 파일 시스템을 지원해야함.
  • 기존 파일 시스템 밑에 가상파일 시스템을 두어 다양한 파일 시스템을 다룸
  • 네트워크로 연결된 파일 시스템도 하나의 파일 시스템으로 볼 수 있도록 도와줌

 

Directory Implementation

  • 하드에서는 파일과 디렉터리를 대부분 선형 구조로 관리
  • Linked List를 이용(Hash Table, B+트리)

 

Allocation Methods

  • Contiguous Allocation : 외부 단편화가 일어날 수 있으며 압축에 많은 비용
  • Linked Allocation : 디스크를 구성하는 블락 단위로 연결리스트 구조로 연결, 중간에 접근하기 위해선 순차 탐색, 에러 블락있으면 끊긴다.
  • Indexed Allocation : index block을 두어 해당 블락안에 파일을 구성하는 블락들의 포인터를 담는다. 디렉토리는 파일 이름과 index block의 주소를 가진다. index block이 사라지면 파일을 모두 잃어 버린다..

 

Free-Space Management

  • Bit map : n개의 블락이 있으면 n개의 배열을 만들어 0과 1 저장
  • Linked List : 비어있는 블락끼리 연결
  • Grouping : 하나의 블락이 루트 블락이 되어 다른 빈 블락을 가리킴
  • Counting : 첫번째 빈 블락에 연속된 빈 블락의 개수 저장

 

(추가)

B-Tree

  • 이진 트리를 확장해 하나의 노드가 가질 수 있는 자식 노드의 최대 숫자가 2보다 큰 트리 구조
  • 자료를 정렬된 상태로 보관하고, 삽입 및 삭제를 대수 시간으로 가능
  • 상향식 구성

https://hyungjoon6876.github.io/jlog/2018/07/20/btree.html

'Computer Science > Operating System' 카테고리의 다른 글

[Linux] CentOS 교육 -2  (0) 2022.10.26
[Linux] CentOS 교육 -1  (0) 2022.10.24
[개념] File System 1  (0) 2021.08.12
[개념] Storage Management  (0) 2021.08.12
[개념] Memory Management 5(Virtual Memory)  (0) 2021.08.12

File

  • 컴퓨터 시스템을 편리하게 사용하기 위해 저장된 정보에 대한 일과된 논리적 관점을 제공하고 저장장치의 물리적 특성을 추상화하여 논리적 저장 단위, File을 정의
  • 속성 : 이름, 식별자, 타입, 위치, 크기, 시간 등
  • 명령어 : 생성, 쓰기, 읽기, 재설정, 삭제, 절단
  • open() 시스템 호출로 파일에 접근
  • 재접근에 대한 낭비를 줄이기 위해 open-file table에 모든 열린 파일에 대한 정보가 저장됨
  • close()로 닫으면 open-file table에서 제거됨
  • file pointer : 읽기와 쓰기 시스템 호출의 일부분, 파일을 어디까지 읽었다는 것을 나타냄
  • Open File Locking : Shared lock 여러 프로세스가 잠금 가능, writer lock 한 번에 한 프로세스만 잠금

 

File Structure & Internal File Structure

  • 각각의 파일들은 그 파일을 다루는 프로그램에 의해 인식 가능한 내부 구조를 일정한 형태로 가짐
  • 특정 파일들은 os가 인식할 수 있도록 미리 정해진 구조를 따름
  • 파일은 일련의 블록으로 간주, 디스크 입출력은 한 블록 단위로 수행되고 모든 디스크 블록들은 동일한 크기를 가짐

 

Access Methods

  • Sequentail Access : 순차 접근, Tape Model과 비슷
  • Direct Access : 고정길이의 논리 레코드의 집합으로 정의되어야함, 레코드 번호로 접근
  • IBM의 ISAM : 크기가 작은 마스터 색인을 메모리에 유지, 우선 메모리에서 색인 블록 번호를 찾고 레코드로 가서 순차적으로 데이터를 찾음.

 

Directory and Disk Structure

  • 디렉토리는 그 볼륨에 있는 모든 파일에 대한 이름, 위치, 크기, 유형과 같은 정보를 기록

  • 위 그림에서 directory는 root라 생각하면 되고 하나의 disk가 파티션의 복수의 directory로 나누어질 수 있다.
  • format : 해당 디스크의 데이터를 모두 지우는 것이 아닌 directory를 재설정

Directory 종류

Single-Level Directory

  • 모든 파일이 한개의 디렉터리 밑에 있다. (1:1)

 

Two-Level Directory

  • master file directory 밑에 user file directory 존재, 경로명을 써서 파일을 찾아가야 함

 

Tree-Structure Directories

  • os는 하위 디렉터리 역시 하나의 file로 본다. 비트를 설정해 0이면 file, 1이면 subdirectory
  • 아래로 계속해서 나아갈 수 있지만 cycle은 안된다. 즉, 파일공유 안됨!
  • rm -r <dir-name>에서 r의 recursive..

 

Acyclic-Graph Directories

  • 그래프 구조로 cycle 허용
  • 링크는 다른 파일이나 서브 디렉터리를 가리키는 포인터(하나의 파일로 취급)
  • 하나의 파일에 복수의 링크가 존재 가능
  • 원본 파일을 지워도 링크 파일은 존재 → Dangling pointer

 

General Graph Directory

  • 파일을 검색할 때 마스터 디렉터리부터 경로를 따라 탐색
  • 서브 디렉터리를 지시하는 링크가 사이클 만들면 똑같은 경로를 재탐색하거나 무한루프
  • 한 번에 탐색할 수 있는 디렉터리 개수를 제한!
  • garbage collection 기법을 사용해 외부에서 가리키는 지시 포인터 없으면 삭제

 

File-System Mounting

  • 파일 시스템의 디렉터리 구조에 접근을 하기 위해서는 마운트가 되어야 한다.
  • os는 디바이스 이름과 파일 시스템을 부착할 수 있는 mount-point가 있고 파일 시스템 연결 가능

 

File Sharing

  • 시스템에 복수의 사용자가 있다면 파일 공유 가능
  • 단 파일을 보호하기 위해 해당 파일에 대한 권한이 사용자마다 정해짐
  • 소유자, 그룹, 모든 사람 (리눅스 명령어 chmod로 권한 설정 가능)

Memory vs Storage

  • memory(DRAM)는 단기 데이터 액세스 허용(웹 탐색, 애플리케이션 로드 등)
  • storage(HDD)는 장기적 데이터 액세스 허용(파일, 애플리케이션 및 os)
  • memory와 storage는 함께 작동 가능 : 컴퓨터에 프로세스를 지원하기에 충분한 RAM이 없으면 HDD의 일부를 가상메모리로 변환 

Storage Management

  • 사용자가 스토리지 장치 사용을 최적화하고 데이터가 상주하는 모든 미디어의 데이터 무결성을 보호하는 프로세스
  • 보안, 가상화 등의 측면을 다룸
  • 성능, 신뢰성, 복구 가능성, 용량

 

 

❗ 자료가 너무 없네...? ❗

Virtual Memory

  • (메인 메모리 크기) < (프로세스 크기)를 위해 나왔다.
  • 필요한 부분만 메모리에 올림으로써 메인 메모리에 올라가는 프로세스의 크기를 줄인다.

  • 페이징 과정을 걸쳐 필요한 페이지만 메모리에 적재 "요구 페이징(Demand Paging)"

 

Demand Paging

  • 프로세스의 이미지를 backing store에 저장(swap device)

  • valid bit를 페이지 테이블에 추가(1 - memory에 적재 중, 0 - memory에 없음)
  • valid bit가 0인데 해당 페이지를 부르면 Page Fault 발생

  • pure demand paging : 처음부터 모든 페이지를 적재시키지 않고 CPU가 요구할 때 valid를 바꾸어 페이지를 적재
  • prepaging : 우선 필요할 것 같은 페이지를 적재시키고 필요할 때 다른 페이지를 적재

 

Page Replacement

FIFO

  • First-In First-Out
  • 메모리에 먼저 올라온 페이지를 먼저 내보낸다.
  • victim page의 대상은 가장 먼저 메모리에 올라온 페이지
  • 처음에 프로세스가 실행 될 때 최초 초기화를 시키는 역할만 진행
  • 프레임의 수가 많을수록 page fault가 감소 (Belady's Anomaly)

 

OPT

  • Optimal
  • 가장 사용하지 않을 페이지를 가장 우선적으로 내보낸다.
  • 미래를 알 수 없기 때문에 실질적으로 수행하기 어렵다.

 

LRU

  • Least-Recently-Used
  • 최근에 사용하지 않은 페이지를 가장 먼저 내보낸다.
  • 과거를 보고 판단, 실질적으로 사용 가능!

  • Global 교체 : 메모리상의 모든 프로세스 페이지에 대해 교체
  • Local 교체 : 메모리상의 자기 프로세스 페이지에서만 교체

'Computer Science > Operating System' 카테고리의 다른 글

[개념] File System 1  (0) 2021.08.12
[개념] Storage Management  (0) 2021.08.12
[개념] Memory Management 4(Segmentation)  (0) 2021.08.12
[개념] Memory Management 3(Paging)  (0) 2021.08.12
[개념] Memory Management 2  (0) 2021.08.12

+ Recent posts