[ Docker ] 따라하며 배우는 도커와 CI환경 - 1

·2023년 5월 31일
0

Day 1

Docker를 쓰는 이유?

예를 들어 Redis를 설치할 때
갖고 있는 서버, 패키지 버전, 운영체제 등등
프로그램을 설치하는 과정중에 많은 에러들이 발생하고 설치 과정 다소 복잡하지만

Docker를 사용하면 쉽게 설치할 수 있다.

Docker

컨테이너를 사용하여 응용프로그램을 더 쉽게 만들고 배포하고 실행할 수 있도록 설계된 도구
이미 컨테이너 기반의 오픈소스 가상화 플랫폼이며 생태계이다.

도커 이미지와 도커 컨테이너 정의

컨테이너

서버에서의 컨테이너의 개념

컨테이너 안에 다양한 프로그램, 실행환경을 컨테이너로 추상화하고
동일한 인터페이스를 제공해 프로그램의 배포 및 관리를 단순하게 해준다.

코드와 모든 종속성을 패키지화해 응용 프로그램이 한 컴퓨팅 환경에서 다른 컴퓨팅 환경으로 빠르고 안정적으로 실행되도록 하는 SW 표준 단위

컨테이너 이미지

코드, 런타임, 시스템 도구, 시스템 라이브러리 및 설정과 같은 응용프로그램 실행하는 데 필요한 모든 것을 포함, 가볍고 독립적이며 실행 가능한 SW 패키지

또한 런타임에 컨테이너가 되고 도커 컨테이너의 경우 도커 엔진에서 실행될 때 이미지가 컨테이너가 된다.
리눅스와 윈도우 기반 애플리케이션 모두에서 사용할 수 있는 컨테이너화된 SW는 인프라에 관계없이 항상 동일하게 실행 된다.

컨테이너는 SW를 환경으로부터 격리시키고 개발과 스테이징의 차이에도 불구하고 균일하게 작동하도록 보장한다.

정리
도커 이미지는 프로그램을 실행하는데 필요한 설정이나 종속성을 갖고 있고
도커 이미지를 이용해 컨테이너를 생성하며
도커 컨테이너를 이용해 프로그램을 실행한다.

도커와 기존의 가상화 기술과의 차이를 통한 컨테이너 이해

가상화 기술 나오기 전에는 한대의 서버를 하나의 용도로만 사용해
안정적이지만 비효율적으로 사용

하이퍼 바이저 기반 가상화 출현 후
논리적으로 공간 분할해 VM 독립적 가상 환경 서버 이용 가능

하이퍼 바이저

하이퍼 바이저는 host 시스템에서 다수의 게스트 OS 구동할 수 있게 함
sw, 하드웨어 가상화하면서 하드웨어와 각각의 VM을 모니터링하는 중간 관리자

하이퍼 바이저 2가지 종류

네이티브 하이퍼 바이저 / 호스트형 하이퍼 바이저

네이티브 -> 하이퍼 바이저가 하드웨어 직접 제어, 자원 효율적 사용 가능, 별도 host OS 없어 오버헤드 적다, 여러 하드웨어 드라이버 세팅해야 해 설치 어렵다

호스트형 -> 일반적 SW처럼 host OS 위에서 실행, 하드웨어 자원 VM 내부의 게스트 OS에 에뮬레이트 하는 방식, 오버헤드 크다
OS 종류 제약 없고 구현 다소 쉽다. 일반적으로 많이 사용

하이퍼 바이저 구조

하이퍼 바이저에 구동되는 VM 각 VM마다 독립된 가상 하드웨어 자원 할당 받는다
논리적으로 분리되 있어서 한 VM에 오류 발생해도 다른 VM에 퍼지지 않는 장점이 있다.

컨테이너 가상화 기술

기존 가상화 기술 (VM) 과 상당히 유사한 구조이다.

VM과 비교했을 때 컨테이너는 하이퍼바이저와 게스트 OS 필요하지 않아 더 가볍다

어플리케이션 실행할 때 컨테이너 방식에서는 host OS위에 어플리케이션의 실행 패키지인
이미지 배포하기만 하면 되는데
VM은 어플리케이션을 실행하기 위해 VM 띄우고 자원 할당하고 게스트 OS 부팅해 실행해야해서
훨씬 복잡하고 무겁게 실행해야 한다.

공통점
컨테이너, VM 기본 하드웨어에서 격리된 환경 내에 애플리케이션을 배치하는 방법

차이점
격리된 환경을 얼마나 격리를 시키는지의 차이

도커 컨테이너에서 돌아가는 애플리케이션은 컨테이너가 제공하는 격리 기능 내부에
샌드박스가 있지만, 여전히 같은 호스트의 다른 컨테이너와 동일한 커널을 공유한다.
호스트 시스템에서 볼 수 있다.

가상 머신과 함께 VM 내부에서 실행되는 모든 것은 호스트 운영 체제, 하이퍼바이저와 독립되어 있다.

도커 컨테이너 격리

리눅스에서 쓰이는 Cgroup, namespaces

컨테이너와 호스트에서 실행되는 다른 프로세스 사이에 벽을 만드는
리눅스 커널 기능들이다.

C Group
CPU, 메모리, Network Bandwith, HD i/o 등
프로세스 그룹의 시스템 리소스 사용량 관리
-> 어떤 어플 사용량 너무 많으면 그 어플 같은 것을 C group에 넣어
CPU, 메모리 사용 제한 가능

namespaces
하나의 시스템에서 프로세스를 격리시킬 수 있는 가상화 기술
별개 독립된 공간 사용하는 것처럼 격리된 환경을 제공하는 경량 프로세스 가상화 기술

이미지로 컨테이너 만들기

이미지는 응용 프로그램을 실행하는데 필요한 모든 것을 포함한다.

  1. Docker 클라 docker run <이미지> 입력
  2. docker 이미지에 있는 파일 스냅샷 컨테이너 하드 디스크에 옮겨준다.
  3. 이미지에서 가지고 있는 명령어 (컨테이너가 실행될때 사용될 명령어) 이용해 어플 실행

Cgroup, namespaces 쓸수 있는 이유

컨테이너 격리 시킬 수 있는 이유는 Cgroup, namespaces 이용해서다.
저 2개는 리눅스 환경에서만 가능
docker version 명령어 입력하고 서버 정보보면
linux/amd64

확인 가능

출처
https://www.inflearn.com/course/%EB%94%B0%EB%9D%BC%ED%95%98%EB%A9%B0-%EB%B0%B0%EC%9A%B0%EB%8A%94-%EB%8F%84%EC%BB%A4-ci

0개의 댓글