1. 서버 오케스트레이션
여러 서버와 여러 서비스를 편리하게 관리해주는 작업
스케줄링, 클러스터링, 서비스 디스커버리, 로깅, 모니터링
오케스트레이션 툴
- kubernetes
- mesos
- ecs
- docker swarm
- 로드밸런싱
분산을 위해 가상 IP를 통해 여러 서버에 접속하도록 분배하는 기능
- 클러스팅
여러 개의 컴퓨터를 병렬로 연결해서 하나의 컴퓨터처럼 사용
- 라운드 로빈 스케줄링
프로세스들 사이에 우선순위를 두지 않고 순서대로 cpu 할당
2. 도커 스웜
스웜 - 클러스터
노드 - 서버의 단위
- docker compose
하나의 애플리케이션으로 구동되는 경우 각각 컨테이너를 관리하기 힘듬
-> 여러개의 컨테이너를 효율적으로 관리
웹서버 컨테이너 + 디비 컨테이너
웹 + 웹 + 디비
- docker stack
분산처리의 최상위 계층종속성을 공유하는 연관된 서비스의 그룹
단일 스택은 전체 응용 프로그램의 기능을 정의하고 오캐스트레이션 할 수 있음
swarm 을 시작하고 stack 으로 compose를 등록하면 swarm 등록된 컴퓨터에 분산시켜 compose를 실행
-docker machine
내부적으로 VM 사용클라우드를 포함한 원격지에 docker node를 구성
가상 호스트에 docker 엔진을 설치하고 docker machine 명령으로 호스트를 생성과 관리할 수 있는 도구
다양한 리눅스 환경애서 여러개의 원격 docker호스트를 프로비저닝 할 수 있다.
docker swarm init
분산 처리를 시작함 ( 인프라만 구축)
docker service
분산 처리에서 서비스할 것들 ( 실제 서비스 구축)
11/8
도커 스웜으로 로드밸런싱 할 때 DB를 어케해야할지 모르겠음 고민중임
docker-compose로 연결해야되는데 그게 잘 안도니ㅗ다.
해결 -> web 쪽에 depends_on 을 넣어줘야함
docker build . -t ehddnjs0728/t:1.0
docker stack deploy -c docker-compose.yml test
docker stack rm test
version: "3"
services:
web:
# replace username/repo:tag with your name and image details
image: ehddnjs0728/portfolio:1.5
#container_name: server
#build: ./files
deploy:
replicas: 2
resources:
limits:
cpus: "0.1"
memory: 50M
restart_policy:
condition: on-failure
ports:
- "80:80"
environment:
- DB_HOST=mongo
- DB=test
links:
- mongo
depends_on:
- mongo
networks:
- webnet
mongo:
image: mongo # alpine 이미지는 용량이 적어 사용하기 좋다.
ports:
- "27017:27017"
volumes:
- ./mongo:/data/db
deploy:
placement:
constraints: [node.role == manager]
restart_policy:
condition: on-failure
networks:
- webnet
visualizer:
image: dockersamples/visualizer:stable
ports:
- "8080:8080"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
deploy:
placement:
constraints: [node.role == manager]
networks:
- webnet
networks:
webnet: