개요

docker rundocker build 등의 명령과 그 명령에 의해 실행되는 이미지 빌드, 컨테이너 실행하는 등의 다양한 작업

요소 : Docker CLI, Docker Engine API, Docker Demon

 

Docker CLI

  • Docker 명령을 실행하는 커멘드 라인 도구
  • CLI에 입력된 명령에 따라 Docker Engine API를 호출

Docker Demon

  • Linux  demon process에서 Docker Engine API가 호출되는 것을 기다리고 있다가, 호출된 Docker Engine API에 따라 이미지의 빌드 및 컨테이너의 시작 등을 실행

 

Unix socket 통신 & TLS 통신

  • Docker CLI가 Docker 호스트 안에 있는 경우 Unix socket을 이용해 Docker Demon과 통신
    • Unix socket은 동일한 시스템에 있는 프로세스끼리 통신을 할 수 있는 구조
    • docker-machine ssh 명령을 사용해 Docker 호스트에 로그인한 후 Dokcer 호스트에 있는 Docker CLI 명령 실행
  • Docker CLI가 Docker 호스트 밖에 있는 경우 TCP socket을 사용해 Docker Demon과 통신
    • HTTP를 그대로 이용하는 것이 아니라, 어떠한 보안 대책을 실시하는 것을 추천
    • 그중 하나가 TLS, HTTP를 암호화된 HTTPS 통신을 실시하는 것과 동시에 클라이언트와 서버를 신뢰할 수 있는 것
    • Docker Machine을 사용하여 Docker 호스트를 작성한 경우 인증서 만들기 등의 작업이 자동으로 이루어짐

 

❗ 통신 과정을 실습해볼려면 참고하자! ❗

http://www.devkuma.com/books/pages/1546

 

프로그램 개발 지식 공유, devkuma

데브쿠마는 프로그래밍 개발에 대한 지식을 공유합니다.

www.devkuma.com

 

'Container' 카테고리의 다른 글

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

Docker Component

  • Docker Engine : 핵심 기능

 

  • Docker Registry : 이미지 공개 및 공유
  • Docker Compose : 여러 개의 컨테이너 구성 정보를 코드로 정의, 명령을 실행함으로써 애플리케이션의 실행환경을 구성하는 컨테이너들을 관리하기 위한 툴
  • Docker Machine : 클라우드 환경에 Docker의 실행환경을 명령으로 자동 생성하기 위한 툴
  • Docker Swarm : Docker 호스트를 클러스터링 하기 위한 툴

Docker 기술

  • Namespace
    • 접속한 게스트 별로 독립적인 공간을 제공하고 서로가 충돌하지 않도록 리소스를 격리시킴
    • Mnt(파일 시스템 마운트): 호스트 파일 시스템에 구애받지 않고 독립적으로 파일 시스템을 마운트 하거나 원마운트 가능
    • Pid(프로세스): 독립적인 프로세스 공간 할당
    • Net(네트워크): namespace 간에 network 충돌 방지
    • Ipc(System IPC): 프로세서 간의 독립적인 통신 통로 할당
    • Uts(hostname): 독립적인 hostname 할당
    • User(UID): 독립적인 사용자 할당
  • Cgroup(Control Groups)
    • 제어 가능 리소스: 메모리, CPU, I/O, 네트워크, Device 노드(/dev/)
    • 자원에 대한 제어를 가능하게 해주는 리눅스 커널의 기능
    • 시스템의 자원 할당, 우선순위 지정, 거부, 관리, 모니터링 등의 제어 기능을 수행 → 자원의 효율성 향상
    • 단순 제공, 실제 자원 분배를 위해선 각 자원마다 해당하는 서브시스템이 필요
  • Union File System(UFS)
    • 도커가 관리하는 각 Layer에서 각 컨테이너가 이용할 수 있는 독립된 파일 시스템 블록
    • 리눅스 커널이 제공하는 것이 아니어서 Linux 종류별로 다른 형태를 제공
  • Container Format
    • Docker Engine을 구성하는 핵심 기술 스택인 namespace, cgroup, UFS는 컨테이너를 이용하기 위한 Container Wrapper를 갖고 있으며 이를 맞추기 위한 Container Format을 관리하게 됨(default: libcontainer)

 

네트워크 구성(virtual bridge/ virtual NIC)

 

 

 

https://docs.docker.com/get-started/overview/

 

Docker overview

 

docs.docker.com

 

'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] 개념  (0) 2021.09.11

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로 권한 설정 가능)

+ Recent posts