(Docker) 2. Docker Services

Docker Services

https://docs.docker.com/get-started 를 참고하여 진행

Compose를 설치하자. (보통 도커 설치하면 미리 깔린다.)

이번엔 어플리케이션을 로드밸런싱하고 스케일한다. 즉 컨테이너를 여러개 띄운다.

지난번엔 컨테이너를 했고 이번엔 서비스를 배운다.
이전에도 얘기했듯이 컨테이너 위에 서비스 서비스 위에 스택이 존재한다.

서비스?

분산된 앱에서는 각각을 서비스라 한다. 비디오 어플리케이션에서 데이터를 db에 저장하는 서비스, 비디오를 변환하는 서비스, 프론트엔드를 위한 서비스가 있을것이다. 서비스는 실제환경에서 쓰이는 컨테이너를 의미. 서비스는 오직 하나의 이미지만 실행한다. 서비스는 컨테이너들이 어떤 포트를 사용하고 얼마나 띄워야할지 씨피유는 얼마나 써야할지를 codify한다.

스케일링?

서비스를 스케일링하는것은 실행할 컨테이너의 갯수를 변경하는것을 의미한다.
또한 더많은 컴퓨터 자원을 서비스에 할당하는것을 의미

이는 도커에서 매우 쉽다.
docker-compose.yml 파일을 사용하면 된다.
이는 도커컨테이너가 프로덕션 환경에서 어떻게 동작해야 하는지 정의한다.

실습

docker-compose.yml을 만들고

default
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
version: "3"
services:
# 서비스의 이름은 web이다.
web:
# replace username/repo:tag with your name and image details
# 아래의 이미지를 읽어와라
image: tkdgjs1501/get-started:part2
deploy:
#다섯개의 컨테이너를 만든다.
replicas: 5
resources:
limits:
#각각의 컨테이너는 10%의 CPU를 사용하고
cpus: "0.1"
#50M를 할당한다.
memory: 50M
#무언가 잘못되었을 때 컨테이너를 다시 띄운다.
restart_policy:
condition: on-failure
#컨테이너의 호스트의 4000번 컨테이너의 80번 포트를 연결
ports:
- "4000:80"
#다섯개의 컨테이는 로드밸런스를 통해 호스트의 80번 포트를 공유해야한다. 이를 위해 네트웍을 webnet 사용
networks:
- webnet
# webnet의 정의
networks:
webnet:

를 붙여넣음

위 파일은 도커한테 어떤 행동을 해야할지 알려주는것.

docker swarm init
을 입력하자

docker stack deploy -c docker-compose.yml getstartedlab
getstartedlab 라는 앱 네임으로

docker service ls
getstartedlab_web라는게 생성되는데 앱네임 뒤에 web이 붙여진것이다.

서비스안에 돌고있는 다섯개의 컨테이너를 태스크라 부르는데 태스크는 각각의 ID가 있고 순차적으로 증가한다.

docker service ps getstartedlab_web
를 입력하여 태스크를 나열해 볼 수 있다.
task에 대한 정보들

http://localhost:4000/
를 접속할 수 있는데 접속할때마다 호스트 네임이 바뀌는것을 확인할 수 있다.
호스트네임 == 컨테이너 ID

docker container ls
컨테이너에 대한 정보들

스케일링 하기

docker-compose.yml 파일의 replicas를 수정하여 스케일링 할 수 있다.

replicas: 7
로 바꾸고
docker stack deploy -c docker-compose.yml getstartedlab
를 입력하면 업데이트를 한다.

docker service ps getstartedlab_web
를 입력하면 7개로 변경된것을 확인할 수 있다.

정리하기

docker stack rm getstartedlab
docker swarm leave –force

Share