개발환경

[CH. 1 컨테이너 가상화 이해] 컨테이너 기술이란?

개발자 배찌 2025. 2. 9. 02:06
728x90

컨테이너가 무엇인가?

- 애플리케이션을 언제든 실행 가능하도록 만든 것

- 그 컨테이너의 인프라를 만드는 이미지가 중요함

- 도커파일의 인프라를 제작을 하고 코딩을 한것을 IAC라고 하는데, 이를 빌드하면 이미지가 됨

- 이미지들을 하나의 런타임환경으로 패키징한 논리적 공간

- micro VM

- 운영체제 수준의 가상화 제공

- 운영체제 수준이지만, 커널이 없음.

  도커컨테이너는 플랫폼임. os 에 있는 커널을 도커컨테이너가 공유해서 쓰는 기술임..

- 독립성을 갖기 때문에 다른 컨테언에 영향을 주지 않는 stateless 환경 제공

- 운영체제 수준의 가상화를 제공하는것임. 독립된 os.. 다른 컨테이너에 영향을 주지 않는 stateless 환경

- 격리된 운영체제 ? 방화벽 ?  port, ip..

- 기본적으로 포트를 열어주지 않으면 컨테이너에 포트를 통해서 트래픽을 전달하는 방법이 막혀있음. 

  그런 부분을 어떻게 운영을 할건지?  -> 도커 컴맨드.. 도커 CLI 를 통해서 익스포지하는(포트를 열어주는 작업).. 필요

  당연히 그 내부에서는 그 포트가 열릴 수 있도록 애플리케이션이 그걸 잡고 있어야 겠죠?

- 컨테이너는 프로세스이다...아주 경량의 작은 os를 담고있는 프로세스임.

  패키징한 논리적 공간이다.

- 서버구성, os설치, 네트워크, 개발도구구성 등 반복적이고 불편한 작업에 시간을 낭비하지 않고 개발자는 애플리케이션 개발 그 자체에 집중할 수 있게 된다.

 

컨테이너 특징은?

- 컨테이너는 우리가 개발한 최소한의 Image를 통해 실행되므로 경량이다.

- 도커파일을 만들어서 빌드하여 이미지를 생성

- 이미지를 만들기 전에, 어떤 os 와 구성요소에 따라서 경량이냐 헤비이냐 달라짐.

  base image  : 도커hub 에서 제공 

- 도커에서는 한번에 여러개의 컨테이너를 돌릴 수 있는  docker compose라는 오케스트레이션 도구를 제공한다.

- 개인환경이던 클라우드환경이던 어떤 os, 어떤 환경에서도 동작 가능한 이식성을 보유하고 있다.

- 지속적 서버 관리 비용을 절감

- 개발팀과 운영팀의 업무분리로 각자의 업무와 관리에 집중할 수 있다. - > devops worklow 구성에 최적

 

표준적으로는

컨테이너는 도커, 오케스트레이션도구는 쿠버네티스!!

 

컨테이너는 어떤 타입으로 생성되나요?

- 컨테이너 종류 : 시스템 컨테이너 / 애플리케이션 컨테이너 (**도커의 핵심) / 라우터 컨테이너

- 시스템 컨테이너

   우분투와 같은 배포판 리눅스 Image를 통해 배포되는 컨테이너 ( 옛날에 많이 쓰던 버전)

   또다른 vm 의 형태. 내부에 다양한 애플리케이션 및 라이브러리 도구를 설치, 실행 가능..

- 애플리케이션 컨테이너

   단일 애플리케이션 실행을 위해 해당 서비스를 패키징 하고, 실행하도록 설계된 컨테이너

   대표적으로 docker container runtime, Rocket 등이 있음.

- 시스템 컨테이너와 애플리케이션 컨테이너 구분방법

   컨테이너 내부의 주인으로 판단.

   보통 host의 PID (process ID)의 1번은 시스템 D이다. 

   시스템 컨테이너의 1번도 시스템D..

   애플리케이션 컨테이너중에 Nginx container, Python container, MySQL container 도 자체 pid 1번을 가짐..

 

Docker는 무엇인가요?

 - 여러 계층의  Application을 container로 분리, 연결하여 실행하는 MS 프로젝트에 유용하다

 - Application의 Infra(runtime)은 Image를 통해 제공하고, Public or Prviate하게 공유 가능

 - Github과 유사한 방식(open share)으로 Docker hub에서 제공함

   Github와 Docker hub 는 연동되어있음.. github에서 modify 하게되면 docker hub 에 자동으로반영되는데

   이 기능을 오토메이드 빌드 기능임. -> 무료계정에서는 사용안됨

 - 이렇게 제공된 Image를 기반으로 Application 서비스를 제공, 이를 컨테이너화 할 수 있다.

 

정리!!!

공유 받은 이미지들을 기반으로 서비스를 제공하고, 

사용자들이 사용할 수 있는 컨테이너로서 제공함. 사용자는 그 주소를 이용해서 애플리케이션을 사용하는 방식임

 

도커컨테이너는 이런 과정을 거친다.

 - 인프라가 필요함. 우리가 원하는 인프라를 넣으려면 도커파일에 원하는 셋팅값(라이브러리, 환경설정, 패키지 등)을 등록하는 작업을 함 (코드로 등록 ). 이것을 빌드를 하면 이미지가 됨.. 패키징이 만들어짐

 - 패키징 만든것을 run 으로 로컬에서 테스트 후 registry 에 push 함 (image 공유)

 - pull 내려받은 이미지를 가지고 run 테스트를 통한 컨테이너 배포.. application 배포