-
Docker 컨테이너 방식의 장점Docker 2023. 3. 31. 16:00
컨테이너
OS나 디렉토리, IP 주소 등과 같은 시스템 자원을 각 애플리케이션이 점유하고 있는 것처럼 보일 수 있다.
컨테이너 방식 장점
1. 의존성 충돌 문제 해결
2. 개발과 배포 환경의 일치
3. 쉬운 수평 확장
4. 각 서버에 새로운 내용을 배포하기 쉬움
의존성 충돌 문제 해결
프로그램(A) 실행에 다른 프로그램(B)이 반드시 필요한 경우 -> "프로그램 A는 프로그램 B에 의존 관계를 가지고 있다"
A프로그램이 B라는 프로그램에 대해 의존 관계를 가질 때, 특정 B 버전의 프로그램을 요구하는 경우가 생길 수 있다. 그러나 B프로그램을 반드시 필요로 하는 C프로그램을 실행시켜야 하는데 다른 버전의 B프로그램을 필요할 경우 A와 C프로그램을 동시에 실행시킬 수 없다. -> "의존성 충돌"
-> 컨테이너 기술은 애플리케이션을 컨테이너 내에 구성한다. 컨테이너 내에서 실행 중인 프로그램은 의존성을 공유하지 않고 각자 고유의 의존성을 가지고 있다. (의존성 충돌이 생기지 않음)
< 컨테이너 격리 >
1. 프로세스
- 특정 컨테이너에서 작동하는 프로세스는 기본적으로 해당 컨테이너 내에서만 액세스 가능하다.
- 컨테이너 내에서 실행되는 프로세스는 다른 컨테이너의 프로세스에 영향을 줄 수 없다.
**프로세스: 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램
2. 네트워크
- 기본으로 컨테이너 하나에 하나의 IP주소가 할당
**IP주소: 인터넷상에 있는 컴퓨터의 고유한 주소
3. 파일 시스템
- 컨테이너 안에서 사용되는 파일 시스템은 구획화 되어 있다. 그래서 해당 컨테이너에서의 명령이나 파일 등의 액세스를 제한할 수 있다.
개발과 배포 환경의 일치
< 개발 >
웹서비스 개발의 경우 여러 개발자가 하나의 애플리케이션을 만들기 위해 비슷한 개발 환경을 구축하고자 한다. 개발 환경의 경우 배포판에 따라 전혀 다른 애플리케이션 설치 과정이 진행된다. 이 과정 중에 발생하는 사소한 실수나 사전 설치 항목의 부재는 이후 문제 해결에 많은 시간을 소모하게 된다.
-> 애플리케이션 구성 자체가 컨테이너화되면 YAML 파일 하나 + 명령어 하나로 모든 애플리케이션 실행 환경 구성이 완료
docker-compose up - OS에 상관없이 애플리케이션 실행 환경을 만들 수 있다.
- 개발을 컨테이너 위에서 진행할 경우, 모든 개발팀이 동일한 환경 하에 개발을 진행할 수 있다.
< 배포 >
웹 서비스 배포: 어떤 애플리케이션이 특정 런타임 환경 위에서 실행되고, 사용자에게 이를 제공한다. 컨테이너에 담긴 애플리케이션을 실행하는 방식으로 서비스 제공
-> Amazon Web Service의 EC2 상에 도커를 설치하거나, 또는 도커 컨테이너를 EC2 서버에서 실행할 수 있게 하는 서비스인 ECS를 이용하여 보다 쉽게 애플리케이션을 배포할 수 있다.
쉬운 수평 확장 | 각 서버에 새로운 내용을 배포하기 쉬움
트래픽 분사를 위해 프록시 서버는 여러 대의 동일한 검색 서버 중 한 군데를 이용할 수 있도록 돕는다. 이러한 서버를 로드 밸런서라고 부른다.
실행 환경의 일치: 동일한 애플리케이션 구성(이미지)을 바탕으로 새로운 서버에 해당 애플리케이션을 컨테이너로 실행하고, 로드 밸런서에 이 서버를 추가