Docker / Container
Docker 설치 / Container 기술
Docker 설치
- MacOs
- Ubuntu - Docker Engine / Docker Compose 설치
1 | # MAC |
Docker의 등장 - 컨테이너 기술 연관성
컨테이너 : 물자를 싣고 내릴 때, 선박이 입항해 있는 시간을 단축, 필요 인력 감소.
→ 컨테이너 기술을 “소프트웨어 수송, 배포”에 사용 = 리눅스 컨테이너(lxc)
→ 애플리케이션을 쉽게 컨테이너화할 수 있는 생태계 또는 커뮤니티가 없음
→ 도커(Docker)는 Docker Hub라는 소프트웨어 저장소와 함께 성장
→ 쉽게 애플리케이션을 포장, 컨테이너 방식으로 실행
⇒ 실행 환경에 구애받지 않고 애플리케이션 실행 가능
Docker?
컨테이너 방식 장점
의존성 충돌 문제 해결
개발과 배포 환경을 일치
수평 확장을 쉽게 해줌
각 서버에 새로운 내용을 배포하기 쉽게 만듦
1. 의존성 충돌 문제 해결
#의존 관계
애플리케이션을 실행하기 위해 반드시 필요한 환경이 구축되어 있어야 하는 경우, 윈도우용 프로그램을 실행하기 위해 윈도우 운영체제를 요구하는 것과 같이.
이처럼 프로그램 A의 실행에 다른 프로그램 B가 반드시 필요한 경우를
“프로그램 A 는 프로그램 B에 의존 관계를 가지고 있다” 고 한다.
#의존성 충돌
워드프레스(wordpress) 프로그램이 php 프로그램에 대해 의존 관계를 가질 때,
동일 컴퓨터의 drupal 프로그램도 php 프로그램과 의존 관계를 가지고,
서로 다른 버전을 요구하는 경우에는 한 컴퓨터에 여러 버전의 동일 애플리케이션이 설치되지 않음.
→ wordpress 가 요구하는 버전의 php 7
→ drupal 8.1 가 요구하는 버전의 php 6
php의 의존 관계를 가진 두 애플리케이션 중 하나는 제대로 실행될 수 없는 경우를
“의존성이 충돌한다” 고 한다.
#컨테이너 기술
컨테이너 기술은 의존성 충돌 문제를 해결한다. 컨테이너 기술은 애플리케이션을 컨테이너 내에 구성한다.
⇒ 컨테이너에서 실행 중인 애플리케이션은 어떤 의존성을 공유하지 않고, 각자의 고유한 의존성을 포함하고 있다.
⇒ 각 컨테이너가 실행 환경이 격리되어 있기 때문에 가능.
#컨테이너 기술 격리 / 소유
한 컴퓨터 안에 여러대의 컨테이너가 존재, 이를 통해 애플리케이션 실행 환경 격리.
컨테이너가 격리하는 자원, 독립적으로 소유하는 자원들은
- 프로세스의 구획화
- 특정 컨테이너에서 작동하는 프로세스는 해당 컨테이너 안에서만 액세스 가능하다.
- 컨테이너 안에서 실행되는 프로세스는 타 컨테이너의 프로세스에 영향을 줄 수 없다.
- 네트워크의 구획화
- 기본적으로 컨테이너 하나 당 하나의 IP 주소 할당한다.
- 파일 시스템의 구획화
- 컨테이너 안에서 사용되는 파일 시스템은 구획화되어 있어 해당 컨테이너에서의 명령, 파일 등의 액세스를 제한할 수 있다.
2. 개발과 배포 환경을 일치 시킴
하나의 프로젝트를 위해 여러 개발자가 비슷한 개발 환경을 구축하려고 할 때, 발생할 수 있는 여러가지 문제와 복잡성을 줄여준다.
도커는 어떠한 운영체제든 상관없이 같은 명령어로 프로그램을 설치하고 실행시킬 수 있다.
[ex. PostgresSQL 설치]
docker run —name postgres -e POSTGRES_PASSWORD=mysecret -d postgres
⇒ 애플리케이션 구성 자체가 컨테이너화되면 (Docker Compose 툴 사용) YAML 파일 + 명령어로 모든 애플리케이션 실행 환경 구성 가능
docker-compose up
- OS 상관없이 같은 애플리케이션 실행 환경을 구축
- 개발을 컨테이너 위에서 진행할 때, 동일한 환경으로 개발 진행 가능
배포 시 발생 이슈
Amazon Web Service의 EC2 상에 도커를 설치, 혹은 도커 컨테이너를 EC2 서버에서 실행할 수 있게 하는 ECS 서비스를 이용하여 애플리케이션을 쉽게 배포.
⇒ AWS ECS는 애플리케이션을 도커 컨테어너째로 배포할 수 있게 해줌.
3. 수평 확장 / 4. 각 서버에 새로운 내용을 배포 용이
글로벌 웹 서비스는 이용자가 많아 트래픽 양도 많다. 서비스 제공자들은 이러한 트래픽 분산을 위해 프록시 서버를 운영하며, 프록시 서버는 여러 동일한 검색 서버 중 한 군데를 이용할 수 있도록 돕는다.
→ 이러한 서버 = 리버스 프록시의 한 종류인 “로드 밸런서” 라고 함.
[리버스 프록시 구조]
컨테이너 기술의 실행 환경의 일치 장점은 많은 트래픽으로 인한 서버 증설에 이용 된다. 동일한 애플리케이션 구성을 바탕으로 새로운 서버에 해당 애플리케이션을 컨테이너로 실행, 로드 밸런서에 이 서버를 추가 시켜준다.
이를 응용하여 새 버전의 애플리케이션을 여러 서버 중 몇 대에 테스트 운영하는 방법도 가능하다. 새 버전에서 발생할 문제들을 미리 확인 가능하여 사전에 해결.
→ 오케스트레이션 도구 : 오케스트레이터를 활용하여 테스트하는 도구 = 컨테이너 기술 사용