Study/Container

[Docker] Docker Container의 이해

Dream Amal 2024. 1. 15.

1. 클라우드 컴퓨팅

정의

  • 컴퓨팅 파워, 데이터베이스, 스토리지, 애플리케이션 및 기타 IT 리소스를 온디맨드인터넷을 통해 제공하고 사용한 만큼만 비용을 지불하는 것
  • 물리적 데이터 센터와 서버를 구입, 소유 및 유지 관리하는 대신 클라우드 공급자(CSP)로부터 필요에 따라 컴퓨팅 파워, 스토리지, 데이터베이스와 같은 기술 서비스에 액세스 할 수 있음

클라우드 컴퓨팅 아키텍쳐

  • 소프트웨어로서의 인프라
  • 소프트웨어 솔루션
    • 유연함
    • 하드웨어 솔루션보다 간편하고 빠르게 경제적으로 변경 가능
    • 획일적은 과중한 작업 해소

 

 

 

 

 

클라우드 컴퓨팅 제공 방식

  • OpenStack
    • IaaS 기반 프라이빗 클라우드를 위한 OpenSource

IT 서비스 모델

클라우드 서비스 제공 업체

⭐ 2. 클라우드 네이티브 ⭐

클라우란

Cloud Native Computing Foundation

  • 조직이 퍼블릭, 프라이빗, 그리고 하이브리드 클라우드와 같은 현대적이고 동적인 환경에서 확장 가능한 애플리케이션을 개발하고 실행할 수 있게 하는 것
  • 컨테이너, 서비스 매쉬, 마이크로서비스, immutable 인프라, 그리고 declarative API가 예시가 됨
  • CNCF는 벤더 중립적인 오픈 소스 프로젝트 생태계를 육성하고 유지함으로써 해당 패러다임 채택을 촉진함

왜 클라우드 네이티브인가?

  • 시대적으로 변화되는 애플리케이션 개발환경과 인프라 구조

  • 모노놀릭
    • 한 서버에 모든 부하가 다 몰리게 됨
  • 멀티티어
    • 각각의 tier에 부하가 분산됨

클라우드 네이티브 애플리케이션 운영

  • DevOps
    • 개발-배포까지를 빠르게 할 수 있도록 돕는 주기
  • 컨테이너
    • 애플리케이션과 운영 환경이 모두 들어있는 독립된 공간
    • host 운영체제 상에 논리적인 partition을 만드는 것이라고 이야기 할 수 있음
    • 각각의 조건에 맞는 설비를 갖출 수 있어 관리가 쉬움
    • 운영체제와의 의존성을 배제
    • 가볍고, overhead가 적음
  • 개발한 프로그램과 실행 환경을 모두 컨테이너로 운영
  • Micro Service Architecture (MSA)환경의 Ploy-glot 애플리케이션 운영
    • 다양한 언어를 사용하여 프로그래밍하는 것ploy-glot
    • 특정 서비스에 장애가 발생하더라도 전체 서비스에 영향을 미치지 않음

DevOps

03. 컨테이너의 이해

컨테이너란

  • 애플리케이션 가상화
  • 경량의 독립 실행형 소프트웨어 패키지
    • 코드, 런타임, 시스템 도구, 시스템 라이브러리 및 설정과 같이 응용 프로그램을 실행하는 데 필요한 모든 것을 포함
  • 컨테이너는 컨테이너 엔진을 통해 호스트의 자원을 다른 컨테이너와 공유하지만, 가상머신은 각각의 머신에 대해 시스템 전체가 동작해야 함

  • Hypervisor
    • 호스트 컴퓨터에서 다수의 운영체제를 동시에 실행하기 위한 논리적 플랫폼
  • Container Engine
    • Docker도 container engine 종류 중 하나
    • container
      • 확장성도 좋고 크기도 작음

컨테이너의 이해

  • History

  • 기술
    • namespace vs cgroup
      • namespace → 프로세스 자원을 관리
      • cgroup → 하드웨어 자원을 관리

실습

mkdir testdir
sudo chroot testdir/
# error -> bin/bash 가 없어서 실행되지 않음

ldd /bin/bash # 의존성 check

  • 특정 디렉토리를 root로 바꾸기 위해서는 /bin/bash 의 실행 파일들이 필요
    • /bin/bash 실행을 위한 의존성 file도 함께 필요

 

# 실행을 위한 /bin/bash copy
mkdir testdir/bin
mkdir testdir/lib64
cp /bin/bash testdir/bin/

# 의존성이 있는 디렉토리 copy
ldd /bin/bash
cp /lib64/libtinfo.so.6 testdir/lib64/
cp /lib64/libc.so.6 testdir/lib64/
cp /lib64/ld-linux-x86-64.so.2 testdir/lib64/

# test를 위한 명령어 copy
cp /bin/date testdir/bin/

sudo chroot testdir/
  • ls 명령어 copy
# ls 명령어가 있는 곳 확인
which ls
# ls copy
cp /usr/bin/ls testdir/bin/

# ls 명령어와 연관된 의존 패키지 copy
ldd /usr/bin/ls
cp /lib64/libpcre2-8.so.0 testdir/lib64/
cp /lib64/libcap.so.2 testdir/lib64/
cp /lib64/libselinux.so.1 testdir/lib64/

# ls test
sudo chroot testdir/
ls
  • /proc
    • process 단위로 관리하고 있는 디렉토리
# 프로세스를 관리하는 디렉토리
ls /proc
# 현재 실행중인 bash 확인
ps
# 현재 실행중인 bash의 PID로 생성된 디렉토리로 이동
cd /proc/2454/
# 명령어 단위로 관리 중임을 확인할 수 있음 
ll ns
  • cgroup
cd /sys/fs/cgroup/
ls
cat cgroup.controllers 
cat cgroup.procs 
ls
cd user.slice/
ls
id
sudo mkdir container1
cd container1/
ls

04. 도커의 이해

도커란

  • Build
    • docker의 image를 만드는 단계
  • ship
    • 만든 image를 공유
  • run
    • image를 실행

도커 컴포넌트

  • docker client와 docker daemon은 RESTfullAPI로 통신함
  • docker images
    • container 실행을 위해 필요한 file
    • read only인 경우가 많음
      • 이미 만들어진 image를 사용하는 것이기 때문

도커 엔진

05. PWD (Play with Docker)

Play with Docker | Docker

# docker 이미지 list 확인
docker image ls
# centos ver7 다운로드
docker pull centos:7
# /bin/bash로 centos7 의 실행환경 run (실행환경 이름은 centos7_test)
docker run -it --name=centos7_test centos:7 /bin/bash

# docker host(node)의 80번 포트로 docker/getting-started의 80번 포트를 연결하라
docker run -dp 80:80 docker/getting-started:pwd

# host의 8888 포트와 연결
docker run -dp 8888:80 docker/getting-started:pwd
  • run option
    • d : background 실행
    • p : port mapping
728x90

댓글