╱╱╭╮╱╱╱╱╱╱╭━━━╮╱╱╱╭╮╱╭╮╱╱╱╱╱╱ ╱╱┃┃╱╱╱╱╱╱┃╭━╮┃╱╱╱┃┃╱┃┃╱╱╱╱╱╱ ╱╱┃┣━━┳━━╮┃┃╱┃┣━╮╱┃╰━╯┣━━┳━╮╱ ╭╮┃┃╭╮┃┃━┫┃╰━╯┃╭╮╮┃╭━╮┃╭╮┃╭╮╮ ┃╰╯┃╭╮┃┃━┫┃╭━╮┃┃┃┃┃┃╱┃┃╭╮┃┃┃┃ ╰━━┻╯╰┻━━╯╰╯╱╰┻╯╰╯╰╯╱╰┻╯╰┻╯╰╯

CS/클라우드 컴퓨팅

[클라우드 컴퓨팅] 컨테이너 및 도커 컨테이너 (11)

재안안 2024. 6. 20. 17:41


[11] 컨테이너 (도커 컨테이너)

 

컨테이너
-  컨테이너는 샌드박스화된 런타임 환경 (독립적)
-  패키징 : 어플리케이션, 라이브러리등 환경을 묶음
-  컨테이너는 호스트 OS와 커널 리소스 공유
-  어플리케이션(프로세스)을 OS로 부터 격리
-  호스트 OS와 다른 기반의 컨테이너는 구동x
-  호스트의 특정 포트에 연결 또는 디렉토리 공유 가능

도커
-  컨테이너 가상화 기술 기반의 오픈소스 가상화 플랫폼
-  다양한 실행 환경을 컨테이너로 추상화
-  다른 환경에서도 동일한 인터페이스를 제공
-  리눅스의 네임스페이스, 컨트롤 그룹을 이용해 프로그램을 격리하는 방식으로 컨테이너를 구성
-  PaaS
-  CPU/메모리는 필요한 만큼 사용 (미리 할당x 제한은o)


도커 기술
1. 네임스페이스 (컨테이너 독립시키기)
-  네트워크, 사용자 ID, 파일시스템, 프로세스 트리와 같은 운영체제 환경을 어플리케이션 별로 격리

2. 컨트롤 그룹 (cgroup, 컨테이너 자원 제한)
-  컨테이너별로 사용할 수 있는 CPU, 메모리 등과 같은 시스템 자원을 제한하는 역할

3. 유니온 파일 시스템 (그냥 파일 관리)
-  물리적으로 서로 다른 파일 시스템이더라도 하나의 디렉토리에 마운트하여 논리적으로 하나의 파일 시스템으로 통합

도커 구동 방식
다양한 인터페이스를 사용하여 커널의 기능을 사용
-  libvirt, LXC, systemd-nspawn (0.9 이전 버전)
-  libcontainer 엔진 (커널 기능 직접 호출)

도커 엔진(컨테이너를 구축하고 실행하는 소프트웨어)
1. Docker Daemon
2. REST API
3. CLI

도커 아키텍처
1. 도커 데몬
-  도커 호스트에서 동작하는 데몬 프로세스
-  클라이언트 요청을 통해 도커 객체를 관리
-  도커 호스트에서 수행하는 도커 데몬은 레지스트리로 부터 이미지를 받아서 인스턴스를 생성

2.도커 클라이언트 (Docker Desktop)
-  도커 클라이언트는 Daemon과 통신해서 컨테이너를 생성, 실행, 배포

3. 도커 레지스트리
-  Repository : 도커 이미지를 모아놓은 것
-  Registry : Repository를 모아놓은 것 (DockerHub)
-  로컬에 없는 이미지를 요청 받으면 도커 허브에서 pull

@DockerHub
-  도커 이미지를 등록할 수 있는 퍼블릭 저장소

3-1) 도커허브에서 이미지 공유 및 사용하기
1. tag (tagged이미지 계정/레포 이름:허브에서의 이름)
2. push
3. pull/삭제/run

4. 도커 이미지
-  Read-Only Template
-  레이어 기반으로 구성 (다수의 read-only 레이어 리스트)
-  레이어의 id는 SHA256로 만든 16진수 hash value
-  상위 레이어는 하위 레이어에 의존성을 갖고, 각 레이어는 파일과 디렉토리로 구성
-  이미지 빌드시, 하위 이미지와의 차이점을 기준으로 레이어를 순차적으로 쌓음
-  실행되면 thin writable 레이어가 최상위에 추가 (RAM)
-  writable 레이어 저장하려면 볼륨 마운트 또는 export를 통해 새로운 이미지로 저장
-  writable 레이어와 하위 계층 내용 충돌시 writable 레이어의 내용으로 덮어씀
-  writable 레이어는 storage driver로 관리 (overlay2, vfs)
-  이미지 생성을 위해 Dockerfile을 사용

@Thin : dynamic (layer의 용량이 가변적)

@볼륨 마운트
-  로컬 파일 시스템과 컨테이너의 파일 시스템을 동기화
-  디렉토리 매핑하면 도커 호스트에 계속 남음

@Export
-  기존 이미지 + writable layer를 새로운 이미지로 저장하는 명령어 (.tar)

@Dockerfile
-  커스텀 이미지 파일을 생성하기 위한 도구
-  기본 이미지가 뭔지, 뭘 더 설치할 지, 뭘 수행할 지, 어떤 환경변수를 저장할 지 설정

5. 도커 컨테이너
-  도커 이미지를 run하면 도커 컨테이너 생성 (프로세스)
-  bash shell로 실행해야 안꺼짐

@도커 객체 : 도커 프로세스 내에 사용되는 도커 이미지, 컨테이너, 네트워크, 볼륨

도커 실행 단계
1. 이미지 로드 (없으면 dockerhub에서 pull)
2. 이미지 실행
3. 컨테이너 전용 파일시스템을 최상위 레이어로 할당
4. 네트워크 인터페이스 생성 및 추가, 연결 (IP주소 할당)
5. 실행 (bash) 및 종료 (exit)