Study/seSAC 금천 4기

컨테이너 애플리케이션 개발_1일차_240912

지찬씌 2024. 9. 26. 09:22

Docker

 

 

Docker 란?

: 복잡한 리눅스 앱을 컨테이너로 묶어서 실행할 수 있고 개발/테스트/서비스 환경을 하나로 통일하여 효율적으로 관리할 수 있게 하는 도구다.

 

 

1. 등장 배경

- 기술이 발전하며 PC 성능이 좋아지고, 당연히 서버의 성능도 향샹

   => 당연히 서버의 모든 리소스를 사용하지 않게 되어 놀고 있는 부분이 생기게 되었고,

         이를 활용하기 위해 가상화 기술이 등장했다.

 

- 이렇게 여분의 서버에 가상 머신을 만들어 활용하였고, 이에 더해 가상 머신에 서버 자체를 넣어 활용하도록 발전했다.

  가상화 기술로 만들어진 서버에 서버 프로그램, DB 등을 설치하여 앱 & 웹사이트를 실행하기도 했고,

  이 서버를 임대해주는 "클라우드 서비스"도 등장했다.

    => 그러나 가상 머신은 Host OS에 하나의 완전한 컴퓨터(Guest OS, 가상 머신)을 항상 만들어서 사용해야 하니,

        각종 성능 저하의 문제가 발생했다.

        why?) 이미지 않에 OS가 있기 때문에 이미지 용량 ↑,

                   오픈소스 가상화 SW는 OS 가상화에만 주력하기 때문에 배포와 관리 기능 부족

가상머신(Virtual Machine)

 

- 가상 머신의 성능 문제로 인해 리눅스 컨테이너가 등장했다.

  리눅스 컨테이너는 컨테이너 안에 가상 공간을 만들지만 실행 자체는 호스트에서 직접 수행한다.

  핵심은 가상화가 아닌 "격리"라는 점이다.

=> 이 기술은 리눅스 커널이 제공하는 기술(cgroups & namespaces)이다.

 

 

2. 특징

- 리눅스 커널 자체에서 제공하는 컨테이너 기술을 이용하여 컨테이너(이미지)를 타인과 공유한다.

 

- 이미지 생성과 배포에 특화되어 있다.

  이미지 버전 관리도 제공하고 중앙 저장소에 이미지를 올리고(Push) 받을(Pull) 수 있다.

  => GitHub와 비슷한 방식의 Docker Hub를 제공한다.

 

- 다양한 API를 제공하여 원하는 만큼 자동화가 가능하다.

 

- 도커는 guest OS를 설치하지 않고 하드웨어 가상화 계층도 없다.

컨테이너

   

 

 

3. 도커 이미지와 도커 컨테이너

- 도커 이미지는 서비스 운영에 필요한 서버 프로그램 / 소스코드, 컴파일된 실행 파일을 하나로 묶은 형태이다.

  => 도커 이미지는 원본으로 저장소에 올리고 받고, 도커 컨테이너는 이미지를 실행한 상태

       하나의 도커 이미지로 여러 개의 컨테이너를 만들 수 있다.

 

- 도커는 이미지의 변경에 있어 유니온 파일 시스템 형식을 채용하였다. 

유니온 파일 시스템이랑 기존의 저장된 이미지에서 바뀐 부분만 이미지로 생성하고 컨테이너로 실행할 때는 기존 베이스 이미지와 바뀐 이미지를 합쳐서 실행한다. 

 

 

 

 

4. Immutable Infrastructure

: 가상화가 발전하면서 클라우드 환경으로 변화되었고, 클릭 몇 번으로 가상 서버를 생성 및 삭제가 가능하게 되면서 서버의 대수가 많아지게 되면 사람이 일일이 셋팅하기 어려운 정도가 되었다. 이에 따라 Immutable Infrastructure 이라는 개념이 등장했다. 

 

  1) 개념 및 특징

   - Host OS와 서비스 운영환경을 분리하여 "한 번 설정한 운영 환경은 변경하지 않는다." 라는 개념이다.

 

   - 서비스 운영 환경을 이미지로 생성하고 서버에 배포하여 실행하고,

     서비스가 업데이트되면 기존의 이미지를 버리고 새로 생성하여 배포한다.

      => 기존의 서비스 운영 환경에서는 서비스 업데이트 시 소스 코드를 변경하는 방식으로 업데이트 하였다.

Immutable Infrastructure의 개념

 

 

 

5. 도커의 장점

1. 편안한 관리 2. 확장
- 이미지 관리만 하면 OK!
- 중앙 관리를 통한 체계적인 배포와 관리 가능
- 이미지 생성에 버전 관리 시스템을 활용
- 이미지로 서버를 찍어내기 쉬움
- 클라우드 플랫폼의 Auto Scailing으로 쉬운 서비스 확장
3. 테스트 4. 가볍다
- 이미지를 실행하기만 하면 서비스 운영 환경과 동일한 환경 구성 가능
- 테스트 간편
- OS와 서비스 환경을 분리하기 때문에 가볍고 어디서든 실행 가능한 환경 제공이 가능

 

 

 

결론적으로 " 도커는 Immutable Infrastructure를 구현한 프로젝트" 라고 할 수 있다.

 

 

 

 

 

도커의 구성요소

 

 

 

docker container run 명령어 = pull + create + start 명령어 전부 실행

 

 

 

 

 


추가 설명 및 용어 설명

 

 

컨테이너 기술이란?

: 간단하게 말해 가상화(Virtualization) 기술이지만 기존의 가상화보다 훨씬 가벼운 기술이다.

 

 

 

리눅스 커널, cgroups, namespaces

 

 

 

Docker 이미지 컨테이너
Java Class Instance
Computer 프로그램 프로세스

 

 

 

도커의 이미지 설명

 

 

 

쿠버네틱스

= 오케스트레이션이 전제

= 컨테이너 실행 & 관리 + 클러스터링 필요

= 클러스터링을 위해서는 여러개의 서버가 전제