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

Concurrency

  • 병행성, 병행적인 프로세스들의 집합으로 응용 프로그램을 구조화함으로써 구현됨
  • fork()
  • Overhead in Process Model : 여러 개의 프로세스를 사용하는 모델에서 각각의 프로세스는 독립적, 통신을 위해서는 커널을 통한 IPC(Inter Process Communication)가 필요 + PCB의 크기가 크다 ⇒ 프로세스의 생성과 context switching에 오랜 시간이 걸림

Thread

  • CPU 스케줄링의 기본 단위
  • 한 프로세스 안에서 제어의 흐름
  • pc, registers, stack ( 프로세스보다 작아 오버헤드를 줄임 )
  • 자신만의 레지스터 상태와 스택을 가짐
  • 같은 프로세스 안에서 여러 스레드 생성 가능, 프로세스를 위한 코드와 주소 공간과 운영 자원을 공유 가능
  • 스레드가 실행되는 환경 : task

single은 기존의 process와 같다

 

Multithreading

 

  • Single Processor : Concurrency 달성(병렬적인 것처럼 보임, 계산 속도를 증가)

  • Multiple Processor : Concurrency 달성(동시에 여러 스레드 실행, core의 병렬성)

 

User-level vs Kernel-level

  • User-level threads : 유저 레벨에서 라이브러리 호출을 통해 커널 위에서 유지됨
    • 스레드 관리가 유저 레벨에서 된다.
    • 커널 모드로 전환 불가능, 빠르고 간편
    • 애플리케이션에 특화된 스케줄링
    • Blocking problem : 하나의 스레드에서 I/O처리를 시작했을 때 다른 스레드에서 일 진행 못함, 멀티 프로세서의 concurrency유지 못함(커널이 스레드의 존재를 모름)
  • Kernel-level threads : 운영체제 안, 커널 안의 함수를 사용
    • 커널에 의해 관리된다.
    • 유저레벨에 비해 느리다
    • Blocking problem 없음
    • 현대 OS들은 커널을 지원
  • Multithreading Models(Mapping Model)
    • Thread libraries : 스레드를 생성하고 관리하기 위한 API, 유저 레벨과 커널 레벨의 역할이 서로 다름

user-level : 커널와 1:1 매칭 / kernel level : 다양한 매칭

  • Thread Mapping and scheduling
    • user level에서의 스케줄은 thread library를 통해 kernel level과 매핑되어 수행
    • kernel level의 스케줄은 물리적 cpu와 kernel level 스레드들이 커널을 통해 매핑
    • 병렬 실행 : virtual processor(커널 레벨)에 있는 스레드의 병행성, 물리적 코어들에 있는 스레드의 병행성
    • 실제 병렬성(parallelism) : 하나의 스레드 : 하나의 코어의 1:1 관계(thread pinning)

 

Threading Issues

  • fork() 이후에 exec()이 바로 호출되면, 모든 스레드를 복사할 필요가 없다.
  • Signals(sw interrupt)
    • Synchronous signals : 시그널을 발생시킨 동작을 수행한 프로세스에 전달
    • Asynchronous signals : 동작 중인 프로세스 바깥에서 발생한 이벤트에 의해 발생
  • Thread pools : 할 일을 기다리는 많은 스레드가 존재하는 풀 생성
    • 새 스레드를 생성하는 것보다 요청에 응답하는 게 조금 더 빨라짐
  • Thread Local Storaged(TLS) : 각각의 스레드들이 자기 자신만의 데이터를 가지게끔

 

❗ Concurrency는 한번에 많은 것을 처리(SW) / Parallelism은 한 번에 많은 일을 처리(HW)

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

[개념] Memory Management 1  (0) 2021.08.12
[개념] Virtualization  (0) 2021.08.12
[개념] IPC  (0) 2021.08.12
[개념] I/O Management  (0) 2021.08.12
[개념] Process Management  (0) 2021.08.12

+ Recent posts