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