다시 웹, 백엔드로/CICD

컨테이너 가상화 이해

EnoughTT 2023. 9. 3. 14:41

컨테이너 가상화 이해

 

컨테이너 기술

 

컨테이너 기술은?

  • 컨테이너는 애플리케이션을 언제든 실행 가능하도록 필요한 모든 요소를 하나의 런타임 환경으로 패키징한 논리적 공간임
  • 운영 시스템을 가상화한 경량의 격리된  프로세스
  • 온프레미스 서버에서 빠르고 효율적으로 배포 가능하며, 확장성 또한 가지고 있음
  • 반복적이고 불편한 작업에 시간을 낭비하지 않고 애플리케이션 개발에 집중할 수 있게 됨

 

컨테이너 특징

  • Image를 통해 실행되므로 경량임
  • 언제든 프로세스 수준의 속도로 빠르게 실행(run) 할 수 있고, 한번에 여러 개의 컨테이너를 동시 실행 가능
  • 어떤 환경에서도 동작 가능한 이식성 보유
  • 컨테이너 자체 애플리케이션 환경에 대한 관리만 요구됨, 지속적 서버관리 비용 절감 가능
  • 컨테이너는 DevOps workflow 구성에 최적

 

컨테이너의 타입

  • 컨테이너 패키징 메커니즘: 시스템 / 애플리케이션 / 라우터 컨테이너
  • 시스템(OS) 컨테이너
    • 호스트OS 위에 Ubuntu와 같은 배포판 리눅스 Image 통해 배포되는 컨테이너
    • 또다른 VM의 형태이고, 내부에 다양한 애플리케이션 및 라이브러리 도구를 설치/실행 가능
    • LXC, LXD, OpenVZ, Linux VServer, BSD Jails
  • 애플리케이션 컨테이너
    • 단일 애플리케이션 실행을 위해 해당 서비스를 패키징하고 실행하도록 설계된 컨테이너
    • 3-tier 애플리케이션과 같은 경우 각 tier (front - back - DB)를 개별 컨테이너로 실행하여 연결
    • Docker container runtime, Rocket

 

Docker는 무엇인가?

    • 여러 계층의 Application을 container로 분리/연결하여 실행하는 MSA (MicroServiceArchitecture) 프로젝트에 유용
    • Application의 Infra(runtime)는 Image를 통해 제공하고 Public or Private 하게 공유 가능
    • Github 와 유사한 방식(open share)으로 Docker Hub에서 제공
    • Image 를 기반으로 Application 서비스를 제공, 이를 컨테이너화 (Containerization) 할 수 있음

도커 컨테이너 빌드업!

 


 

docker 컨테이너 가상화와 VM 가상화 비교

 

도커 컨테이너 빌드업!

 

가상화 (Virtualization)

  • 서버, 스토리지, 네트워크, 애플리케이션 등을 가상화 하여 하드웨어 리소스를 효율적으로 사용하는데 그 목적이 있고 기업은 효율적인 자원 활용, 자동화된 IT 관리, 빠른 재해 복구 등의 장점이 있음
  • 소프트웨어적으로 추상화된 가상화를 통해 제한된 부분을 쉽게 관리하고 유지 할 수 있음
  • 하이퍼바이저 기반의 가상머신(VM, Virtual Machine)을 통해 수행

 

컨테이너 가상화  VS VM 가상화

  • 애플리케이션 프로세스 및 종속 요소와 소스 등을 이미지화 하여 HostOS 와 격리된 환경을 제공함
  • VM 가상화는 별도의 GustOS 를 두고 원하는 애플리케이션을 설치하는 하드웨어 수준의 가상화 구현
  • 컨테이너 가상화는 VM 가상화에 비해 경량이면서 호스트 운영체제의 커널을 공유하는 운영체제(OS) 수준의 가상화 구현, 원하는 애플리케이션 환경을 빠르게 번들링하여 패키징함

 

애플리케이션 배포 방식 비교

도커 컨테이너 빌드업!

 

 

컨테이너화 (Containerization) 기술

  • 리눅스 컨테이너 기술은 LXC (LinuX Container) 이용한 시스템 컨테이너화로 시작
  • 애플리케이션 컨테이너 기반의 Docker 출시, 초기 Docker 버전은 LXC를 활용해 컨테이너 생성
  • Docker는 containerd, runC 를 이용하는 방식으로 변경

도커 컨테이너 빌드업!

 

 

Docker 기능

도커 컨테이너 빌드업!

 


 

PWD (Play with Docker)

 

Docker 컨테이너 놀이터 (Play with Docker)

  • Docker는 웹에서 제공하는 인스턴스 형태의 Docker 랩실을 제공
  • 한 인스턴스 당 4시간의 시간을 제공하며, 언제든 무료로 사용 가능
  • 외부에서 접근 가능한 웹 주소 제공 (https://www.docker.com/play-with-docker)

 

Docker 계정 필요

 

 

 

docker 이미지 확인

docker images

 

nginx 설치 / 실행

 

설치

docker pull nginx:1.23.1-alpine

nginx:1.23.1-alpine 용량은 23.5MB 인데 이 안에 os도 있고 nginx 애플리케이션도 올라가 있음

 

실행

docker run -d -p 8001:80 --name=webserver1 nginx:1.23.1-alpine

-d : 백그라운드로 실행

-p : 포트 설정 hostPort:exposePort 8001번 호스트 포트를 열어서 80번으로 노출

--name : 이미지 이름

nginx:1.23.1-alpine : 사용할 이미지

 

docker 컨테이너 프로세스 보기 (실행중/종료)

docker ps
docker ps -a

 

 

위 8001 포트가 생성됨 (만약 안생기면 open port 를 열어서 8001 접속)

nginx 실행 확인 (외부)

 

nginx 실행 확인 (내부 - curl localhost:8001)

 

docker 컨테이너 중지

docker stop 컨테이너

 

프로세스를 종료했지만 컨테이너는 이미지의 복사본이라서 스냅샷이 남아 있음
전체 삭제

docker rm webserver1

 

 

PWD에서 제공하는 샘플 이미지 배포

docker run -d -p 80:80 --name=pwd-container docker/getting-started:pwd

 

docker run은 로컬에 이미지가 없다면 docker hub에서 원하는 이미지를 가져와서 다운로드 한 뒤 run을 해주게 됨

 

 

 

 

 

 

 

 

 

 

 

feat. 한번에 끝내는 CI/CD 모든 것

'다시 웹, 백엔드로 > CICD' 카테고리의 다른 글

Nodejs 환경 Image build  (0) 2024.08.14
Docker 플랫폼 환경 구성  (0) 2024.08.13
docker 엔진 설치와 구성 확인  (0) 2023.09.11
Ubuntu linux 환경 구성  (0) 2023.09.08
Docker 플랫폼 환경 구성  (0) 2023.09.06