클라우드

Cloud - 배포 컨테이너

상상날개 2022. 8. 5. 15:21

1. Docker 설치

 

이전 버전 WSL의 수동 설치 단계

wsl install 명령을 사용하지 않고 이전 버전의 Windows에 WSL을 수동으로 설치하는 방법에 대한 단계별 지침입니다.

docs.microsoft.com

 

Install Docker Desktop on Windows

 

docs.docker.com

  • Close ans log out 를 클릭한다(재부팅 되니까 다른 프로그램 사용 시 주의)

  • 설치 후 터미널에서 Docker 설치 여부 및 버젼을 확인 한다 

 

2. 컨테이너

 1) 일반 컨테이너의 장점

  • 물자를 싣고 내릴 때에, 선박이 입항해 있는 시간을 단축할 수 있다
  • 물자를 싣고 내릴 때 필요한 인력(분류하는 사람, 짐 옮기는 사람, 감독하는 사람)을 감소할 수 있다

 

 2) 리눅스 컨테이너(Linux Container, lxc)

  • 컨테이너 기술을 소프트웨어 배포에 사용하기 위하여 적용한 시스템이다
  • 애플리케이션이 의존성, 네트워크 환경, 파일 시스템에 구애받지 않고, 도커라는 기술 위에 실행될 수 있도록 만든 애플리케이션 상자이다
  • 애플리케이션을 쉽게 컨테이너화할 수 있는 생태계 혹은 커뮤니티가 없었다
  • 2013년에 등장한 도커(Docker)는 Docker Hub라는 소프트웨어 저장소와 함께 빠르게 성장했다
  • 개발자들은 쉽게 애플리케이션을 포장하고, 컨테이너 방식으로 실행할 수 있게 되었다

 3) 컨테이너의 격리 요소

  • 프로세스
    - 특정 컨테이너에서 작동하는 프로세스는 기본적으로 그 컨테이너 안에서만 액세스할 수 있다
    - 컨테이너 안에서 실행되는 프로세스는 다른 컨테이너의 프로세스에게 영향을 줄 수 없다
  • 네트워크
    - 기본으로 컨테이너 하나에 하나의 IP 주소가 할당된다
  • 파일 시스템
    - 컨테이너 안에서 사용되는 파일 시스템은 구획화되어 있다
    - 해당 컨테이너에서의 명령이나 파일 등의 액세스를 제한할 수 있다

 

 

3. 컨테이너의 장점

 1) 개발 및 배포 환경의 일치

  • 애플리케이션 실행은 환경에 구애를 받는다
    - 프로그램(A) 실행에 프로그램(B)가 반드시 필요한 경우, '프로그램 A는 프로그램 B에 의존 관계를 가진다'고 한다
  • 한 개의 컴퓨터에서 여러 개의 프로그램을 실행할 경우 의존성이 각각 다르면 충돌이 발생한다

  • 컨테이너의 적용으로 실행 환경에 구애받지 않고 애플리케이션을 실행할 수 있다

 

 

  • OS에 상관없이 애플리케이션 실행 환경을 만들 수 있다
  • 개발을 컨테이너 위에서 진행할 경우 동일한 환경 하에 개발을 진행할 수 있다

 

  2) 편리한 수평 확장 및 배포의 편이성

  • 로드밸런서(Load Balancer)
    - 리버스 프록시 서버(Revers Proxy server)의 한 종류이다
    - 다수의 사용자가 동일한 서비스를 이용할 경우 많은 양의 트래픽이 발생한다
    - 서비스 제공자들은 이러한 트래픽 분산을 위해 프록시 서버를 운영한다
    - 프록시 서버는 여러 대의 동일한 검색 서버 중 여유로운 서버를 이용할 수 있도록 도와준다

  • 동일한 애플리케이션 구성(이미지)을 바탕으로 새로운 서버에 해당 애플리케이션을 컨테이너로 실행하고, 로드 밸런서에 이 서버를 추가하기만 하면 된다
    - AWS의 경우 서버를 만들고 삭제하는 일을 자동으로 해 준다

  • 새로운 버전의 애플리케이션을 여러 서버 중 몇 대에만 운영하여 테스트 할 수도 있다
    - 새로운 버전의 애플리케이션에서 발생할 수 있는 문제들을 미리 확인할 수 있다
  • 쿠버네티스와 같이 "오케스트레이션 도구"라고 부르는 것들이 이러한 일을 해주는 도구이다
    - https://www.redhat.com/ko/topics/containers/what-is-container-orchestration
 

컨테이너 오케스트레이션이란?

컨테이너 오케스트레이션은 컨테이너의 배포, 관리, 확장, 네트워킹을 자동화합니다.

www.redhat.com

 

4. 이미지(Image)

  • 실행되는 모든 컨테이너는 이미지로부터 생성된다
    - 이미지는 애플리케이션 및 애플리케이션 구성을 함께 담아놓은 템플릿이다
    - 이미지를 이용해서 컨테이너를 만들 수 있다
  • 이미지를 이용해 여러 개의 컨테이너를 생성할 수 있다
    - 애플리케이션의 수평 확장이 가능하다
  • 이미지는 기본 이미지(base image)로부터 다른 이미지를 만들 수도 있다
    - git을 사용하는 것처럼 변경 사항을 추가하고 커밋하여 이미지를 변경할 수 있다
  • 스프링부트 기반의 애플리케이션을 이미지로 만들고 싶은 경우
    - 스프링부트 초기 세팅 이미지를 기본 이미지로 하고 제작한 애플리케이션을 추가하여 이미지화할 수 있다
  • 이미지는 레지스트리에 저장된다
  • 대표적인 이미지 레지스트리에는 Docker Hub, Amazon ECR 이 있다
  • 도커 CLI에서 이미지를 이용해 컨테이너를 생성할 경우
    - 호스트 컴퓨터에 이미지가 존재하지 않으면 기본 레지스트리로부터 다운로드 받는다