Docker 설치 / Container 기술

Docker 설치

1
2
3
4
5
# MAC
docker --version

# Ubuntu
sudo docker --version


Docker의 등장 - 컨테이너 기술 연관성

컨테이너 : 물자를 싣고 내릴 때, 선박이 입항해 있는 시간을 단축, 필요 인력 감소.

→ 컨테이너 기술을 “소프트웨어 수송, 배포”에 사용 = 리눅스 컨테이너(lxc)

→ 애플리케이션을 쉽게 컨테이너화할 수 있는 생태계 또는 커뮤니티가 없음

→ 도커(Docker)는 Docker Hub라는 소프트웨어 저장소와 함께 성장

→ 쉽게 애플리케이션을 포장, 컨테이너 방식으로 실행

⇒ 실행 환경에 구애받지 않고 애플리케이션 실행 가능


Docker?

컨테이너 방식 장점

의존성 충돌 문제 해결

개발과 배포 환경을 일치

수평 확장을 쉽게 해줌

각 서버에 새로운 내용을 배포하기 쉽게 만듦


1. 의존성 충돌 문제 해결

#의존 관계

애플리케이션을 실행하기 위해 반드시 필요한 환경이 구축되어 있어야 하는 경우, 윈도우용 프로그램을 실행하기 위해 윈도우 운영체제를 요구하는 것과 같이.

이처럼 프로그램 A의 실행에 다른 프로그램 B가 반드시 필요한 경우

“프로그램 A 는 프로그램 B에 의존 관계를 가지고 있다” 고 한다.


#의존성 충돌

워드프레스(wordpress) 프로그램이 php 프로그램에 대해 의존 관계를 가질 때,

동일 컴퓨터의 drupal 프로그램도 php 프로그램과 의존 관계를 가지고,

서로 다른 버전을 요구하는 경우에는 한 컴퓨터에 여러 버전의 동일 애플리케이션이 설치되지 않음.

→ wordpress 가 요구하는 버전의 php 7

→ drupal 8.1 가 요구하는 버전의 php 6

php의 의존 관계를 가진 두 애플리케이션 중 하나는 제대로 실행될 수 없는 경우

“의존성이 충돌한다” 고 한다.


#컨테이너 기술

컨테이너 기술은 의존성 충돌 문제를 해결한다. 컨테이너 기술은 애플리케이션을 컨테이너 내에 구성한다.

⇒ 컨테이너에서 실행 중인 애플리케이션은 어떤 의존성을 공유하지 않고, 각자의 고유한 의존성을 포함하고 있다.

⇒ 각 컨테이너가 실행 환경이 격리되어 있기 때문에 가능.


#컨테이너 기술 격리 / 소유

한 컴퓨터 안에 여러대의 컨테이너가 존재, 이를 통해 애플리케이션 실행 환경 격리.

컨테이너가 격리하는 자원, 독립적으로 소유하는 자원들은

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

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. 각 서버에 새로운 내용을 배포 용이

글로벌 웹 서비스는 이용자가 많아 트래픽 양도 많다. 서비스 제공자들은 이러한 트래픽 분산을 위해 프록시 서버를 운영하며, 프록시 서버는 여러 동일한 검색 서버 중 한 군데를 이용할 수 있도록 돕는다.

이러한 서버 = 리버스 프록시의 한 종류인 “로드 밸런서” 라고 함.

[리버스 프록시 구조]

컨테이너 기술의 실행 환경의 일치 장점은 많은 트래픽으로 인한 서버 증설에 이용 된다. 동일한 애플리케이션 구성을 바탕으로 새로운 서버에 해당 애플리케이션을 컨테이너로 실행, 로드 밸런서에 이 서버를 추가 시켜준다.

이를 응용하여 새 버전의 애플리케이션을 여러 서버 중 몇 대에 테스트 운영하는 방법도 가능하다. 새 버전에서 발생할 문제들을 미리 확인 가능하여 사전에 해결.


→ 오케스트레이션 도구 : 오케스트레이터를 활용하여 테스트하는 도구 = 컨테이너 기술 사용