Docker

seongmin·2022년 12월 6일
0

Docker

목록 보기
1/3
post-thumbnail

Docker

실행 환경에 구애받지 않고 애플리케이션을 실행할 수 있다!

왜 Docker 인가?

컨테이너 기술은 의존성이 충돌하는 문제를 해결한다. 컨테이너 기술은 애플리케이션을 컨테이너 내에 구성한다. 즉, 컨테이너에서 실행 중인 애플리케이션은 어떠한 의존성도 공유하지 않고, 각자 고유의 의존성을 포함하고 있다는 이야기다.

컨테이너는 무엇을 격리하는가?

  1. 프로세스

    • 특정 컨테이너에서 작동하는 프로세스는 기본적으로 그 컨테이너 안에서만 액세스할 수 있다.

    • 컨테이너 안에서 실행되는 프로세스는 다른 컨테이너의 프로세스에게 영향을 줄 수 없다.

  2. 네트워크

    • 기본으로 컨테이너 하나에 하나의 IP 주소가 할당되어 있다.
  3. 파일 시스템

    • 컨테이너 안에서 사용되는 파일 시스템은 구획화되어 있다. 그래서 해당 컨테이너에서의 명령이나 파일 등의 액세스를 제한할 수 있다.

장점

의존성 충돌 문제를 해결해 준다.

  1. 개발과 배포 환경을 일치시킨다.
  2. 수평 확장을 쉽게 해준다.
  3. 각 서버에 새로운 내용을 배포하기 쉽게 만들어준다.

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


google.com 과 같은 글로벌 웹 서비스는 수많은 사람들이 접속을 한다. 이처럼 수많은 사람들이 검색 서버라는 단 하나의 컴퓨터에 접속하는 것이 아니다.

서비스 제공자들은 이러한 트래픽 분산을 위해 프록시 서버를 운영하며, 프록시 서버는 여러 대의 동일한 검색 서버 중 한 군데를 이용할 수 있도록 돕는다. (이러한 서버를 리버스 프록시의 한 종류인 '로드 밸런서'라고 부른다)

컨테이너 기술의 가장 큰 장점은 실행 환경의 일치다. 더 많은 트래픽으로 인한 서버 증설에 컨테이너 기술은 아주 활발하게 이용되고 있다. 동일한 애플리케이션 구성(이미지)을 바탕으로 새로운 서버에 해당 애플리케이션을 컨테이너로 실행하고, 로드 밸런서에 이 서버를 추가하기만 하면 된다. (심지어 AWS는 서버를 만들고 삭제하는 일을 자동으로 해준다)

이러한 기술을 응용하여, 새로운 버전의 애플리케이션을 여러 서버 중 몇 대에만 운영하여 테스트하는 방법도 가능하다. 이를 통해 새 버전의 애플리케이션에서 발생할 수 있는 문제들을 미리 확인하고, 이러한 문제가 사용자 전체에게 영향을 끼치지 않도록 만들 수도 있다.

핵심 키워드

  • 컨테이너

컨테이너는 애플리케이션이 의존성, 네트워크 환경, 파일 시스템에 구애받지 않고, 도커라는 기술 위에 실행될 수 있도록 만든 애플리케이션 상자다.

  • 이미지

실행되는 모든 컨테이너는 이미지로부터 생성된다. 이미지는 애플리케이션 및 애플리케이션 구성을 함께 담아놓은 템플릿으로, 이를 이용해 즉시 컨테이너를 만들 수 있다.

이미지를 이용해 여러 개의 컨테이너를 생성할 수 있다. 이를 이용해 애플리케이션의 수평 확장이 가능하다.

이미지는 기본 이미지(base image)로부터 (마치 git을 사용하는 것처럼) 변경 사항을 추가/커밋해서 또 다른 이미지를 만들 수도 있다.

예를 들어 스프링부트 기반의 애플리케이션을 이미지로 만들고 싶은 경우, 스프링부트 초기 세팅 이미지를 기본 이미지로 삼고 내가 만든 애플리케이션을 추가해 넣고, 이미지화할 수 있다.

  • 레지스트리

이미지는 레지스트리에 저장된다. 대표적인 이미지 레지스트리로는 Docker Hub, Amazon ECR이 있다. 도커 CLI에서 이미지를 이용해 컨테이너를 생성할 때, 호스트 컴퓨터에 이미지가 존재하지 않는다면, 기본 레지스트리로부터 다운로드 받게 된다.

0개의 댓글