컨테이너 방식의 장점
➡️ 의존성 충돌 문제를 해결해 준다
개발과 배포 환경을 일치시킨다
수평 확장을 쉽게 해 준다
각 서버에 새로운 내용을 배포하기 쉽게 만들어준다
어떤 애플리케이션은, 해당 애플리케이션을 실행하기 위해 반드시 어떤 환경이 구축되어 있어야 함
[이미지] 윈도에서 어떤 애플리케이션을 설치하다 보면,. NET Framework를 설치해야 한다는 문구를 종종 볼 수 있음.
> 어떤 프로그램(A) 실행에 다른 프로그램(B)이 반드시 필요한 경우, "프로그램 A는 프로그램 B에 의존 관계를 가지고 있다"라고 한다
> 예를 들어, 워드프레스(wordpress)라는 프로그램이, php라는 프로그램에 대해 의존 관계를 가질 때에, 특정 php 버전을 요구하는 경우가 생길 수 있음
> 동일한 컴퓨터에 php를 반드시 필요로 하는 drupal이라는 프로그램을 실행시켜야 하는데, 만일 drupal이 php 7 버전이 아닌 6 버전을 사용할 때에만 제대로 작동한다고 가정.
> 일반적으로 한 컴퓨터에 여러 버전의 동일한 애플리케이션이 설치되지 않으므로, 이 경우에는 php의 의존 관계를 가지고 있는 다른 두 애플리케이션 중에 하나는 제대로 된 실행을 보장할 수 없음.
> "의존성이 충돌한다"라고 말함
컨테이너 기술은 바로 이 문제를 해결
> 컨테이너 기술은 애플리케이션을 컨테이너 내에 구성
> 컨테이너에서 실행 중인 애플리케이션은 어떠한 의존성도 공유하지 않고, 각자 고유의 의존성을 포함
프로세스
- 특정 컨테이너에서 작동하는 프로세스는 기본적으로 그 컨테이너 안에서만 액세스
- 컨테이너 안에서 실행되는 프로세스는 다른 컨테이너의 프로세스에게 영향을 줄 수 없음
네트워크
- 기본으로 컨테이너 하나에 하나의 IP 주소가 할당되어 있습니다.
파일 시스템
- 컨테이너 안에서 사용되는 파일 시스템은 구획화되어 있습니다. 그래서 해당 컨테이너에서의 명령이나 파일 등의 액세스를 제한할 수 있습니다.
개발팀의 문제
> Node.js나 Python 등을 이용하여 웹 서비스를 개발하는 개발팀을 상상
> 여러 개발자가 하나의 애플리케이션을 만들기 위해, 보통 비슷한 개발 환경을 구축
> 특정 버전 이상의 Node.js, 특정 버전의 MySQL 등을 개발자 각자가 본인의 운영체제에 설치
> 보통의 경우 그 과정이 빠르게 진행되지 않음
> 애플리케이션을 실행시키기 위해 OS나 Node.js나 Python과 같은 런타임 환경의 버전을 얼추 비슷하게 맞춰야 하는 것은 물론
> 시스템 환경 변수를 애플리케이션에 맞게 구성해야 제대로 작동하는 경우도 종종 볼 수 있음
= > 도커는 이러한 문제를 해결해 줌
만약 도커가 실행 중이라면, 어떤 운영체제든 상관없이 postgreSQL을 설치하고 실행할 수 있음
docker run --name postgres -e POSTGRES_PASSWORD=mysecret -d postgres
► 애플리케이션 구성 자체가 컨테이너화되면 (이때 보통 Docker Compose라는 툴을 이용합니다) YAML 파일 하나 + 명령어 하나로 모든 애플리케이션 실행 환경 구성이 완료
docker-compose up
따라서 도커는 다음 문제를 해결 가능
- OS에 상관없이 즉시 애플리케이션 실행 환경을 만들 수 있습니다.
- 개발을 컨테이너 위에서 진행할 경우, 모든 개발팀이 동일한 환경 하에 개발을 진행할 수 있습니다.
배포 시의 문제
> 웹 서비스의 배포란 "어떤 애플리케이션이 특정 런타임 환경 위에서 실행, 사용자에게 이를 제공한다"
> 이제는 컨테이너에 담긴 애플리케이션을 실행하는 방식으로 서비스를 제공
> Amazon Web Service의 EC2 상에 도커를 설치하거나, 또는 좀 더 편리하게 도커 컨테이너를 EC2 서버에서 실행할 수 있게 하는 서비스인 ECS를 이용하여 보다 쉽게 애플리케이션을 배포
> 글로벌 웹 서비스는 전 세계인들이 사용하므로 그 트래픽 많음
> 서비스 제공자들은 이러한 트래픽 분산을 위해 프락시 서버를 운영
> 프록시 서버는 여러 대의 동일한 검색 서버 중 한 군데를 이용
► 이러한 서버를 리버스 프록시의 한 종류인 '로드 밸런서'라고 부름
◼︎ 컨테이너 기술의 가장 큰 장점은 실행 환경의 일치
> 컨테이너에 OS를 올리지 않는데, Docker Hub에 존재하는 각종 OS 이미지는 무엇인가요?
> 잘 알려진 리눅스 배포판인 우분투, CentOS 등은 결국 동일한 리눅스 커널 위에서 만들어진 것
> 각자가 고유의 디렉터리 구조, 패키지 시스템(apt, yum), 쉘(bash, zsh) 등을 사용
> OS 이미지는 컨테이너 내 애플리케이션 구성의 편의를 위해 존재하는 이미지
> 우분투, CentOS 이미지를 사용한다고 해도 결코 컨테이너에 커널 수준의 OS가 올라가지 않음
하이퍼바이저는 VM을 생성하고 구동하는 소프트웨어를 의미 > VMware, VirtualBox
'DevOps BootCamp > 도커' 카테고리의 다른 글
컨테이너 - 볼륨과 환경 변수 (1) | 2023.04.13 |
---|---|
도커 푸시하기 (0) | 2023.04.13 |
두 개의 도커 이미지 다루기 (0) | 2023.04.12 |
도커 컨테이너 차트 시트 (0) | 2023.04.10 |
도커 - 기본 원리 (0) | 2023.04.08 |