Monolithic App VS Microservices
본격적으로 docker compose에 대해 설명하기에 앞서 Monolithic App과 Microservices 두 가지 소프트웨어 모델을 서로 비교해 보도록 하겠다.
Monolithic App (모놀리식 애플리케이션)
: 모든 기능이 단일 프로그램 안에 구현된 애플리케이션
모놀리식 애플리케이션의 특징은 다음과 같다.
- 비현실적, 비효율, 매우 낮은 생산성
- app의 크기가 커지고, app의 일부분만 업데이트 해도 전체 app이 재배포 되어야 함
- bug가 발생하면 전체 app에 영향을 미침
- 새로운 기술을 채택하기 어려움
==> 통합된 구조로 인해 많은 단점을 갖고 있기 때문에 소프트웨어공학적으로 좋지 않은 모델이다.
이러한 단점을 해소시키기 위해 등장한 것이 Microservices 애플리케이션 모델이다.
Microservices (마이크로서비스)
: 서로 독립적인 기능을 하는 단일 서비스(프로세스)들이 한 덩어리로 묶인 구조의 애플리케이션
마이크로서비스의 특징은 다음과 같다.
- 각 단일 서비스가 서로 loosely coupled
- 마이크로서비스들 사이에서는 HTTP 통신 프로토콜 등을 통한 데이터 교환이 이루어짐 (프로그램 속에서 인자를 전달하는 방법을 사용하지 않기 때문에 오버헤드가 적다)
- 각 서비스들은 bug 관점에서도 상호 독립적이라 bug 발생 시에도 전체적으로 애플리케이션에 영향을 끼치지 않는다.
==> 모놀리식 애플리케이션의 단점들을 해소해준다.
Docker compose
Docker compose란, 다수의 도커 컨테이너들을 규정하고 실행하고 관리하는 자동화 도구로,
단일 기능을 수행하는 여러가지 컨테이너들로 이루어진 서비스를 편리하게 구축 실행할 수 있도록 해주는 기술이다.
컨테이너화 기법을 사용할 때, 한 개의 컨테이너는 하나의 기능만 제공하는 것이 원칙이다.
따라서 일반적으로 dockerfile로 이미지를 만드는 것은 결국 단일 기능을 수행하는 단일 컨테이너를 만드는 것이 된다.
다수의 컨테이너를 만들고 이것들을 연동시켜 동작하도록 배포할때 docker-compose를 사용한다.
Docker compose 실습
[ docker-compose 설치 ]
https://docs.docker.com/compose/install/ 로 접속 후
EC2기계에서 실습을 진행하기 때문에 Linux 탭으로 간 뒤 명령어를 복붙해준다.
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
*설치 전에 apt-get update로 패키지 업데이트 먼저 해주자
EC2기계에 설치한 것이기 때문에 관련 명령어를 실행하면 권한이 없다고 뜰 것이다.
설치한 뒤에는 권한을 주기 위해 sudo chmod +x /usr/local/bin/docker-compose 를 입력해서 docker-compose와 관련된 모든 권한을 부여해준다.
docker-compose --version으로 설치 확인
docker compose 파일은 yaml 파일 형식으로 만들어준다.
*yaml (yet another(ain't) markup language)
: key : value의 set으로 이루어진 파일 형식이고 확장자로 .yml을 입력해주면 된다.
vim docker-compose.yml
-> docker-compose 파일을 생성한 뒤 예시로 아래의 내용을 입력해 주었다.
docker-compose.yml 파일에서는 들여쓰기가 매우 중요하다. key: value에서 :과 value 사이 한 칸의 공백이 반드시 있어야 하고, 부모-자식 관계를 표현하기 위해 반드시 4칸씩 들여쓰기를 해줘야 한다.
- version에서는 사용 yml 버전을 명시
- 사용될 컨테이너는 해당 예시에서는 docker에서 제공해주는 기본 컨테이너 이미지인 hello-world 하나만 명시해놓았는데, 실제로 docker-compose를 의미있게 사용하려면 이 services의 value로 여러 컨테이너를 지정해 주면 된다.
- hello-world의 내부에는 가장 최신 이미지를 사용하는 것으로 설정
docker-compose.yml 파일 작성 뒤
docker-compose up -d 명령어로 docker-compose를 실행해준다.
'Docker Container' 카테고리의 다른 글
[Docker] Docker swarm (0) | 2022.04.17 |
---|---|
[Docker] Docker Volume (도커 볼륨)? (0) | 2022.04.13 |
[Docker] Dockerfile (도커파일) (0) | 2022.04.12 |
[Docker] 도커(Docker)? (0) | 2022.04.01 |
[Conatiner] 컨테이너(Container)? (0) | 2022.04.01 |