데이터센터프로그래밍13

13-Docker Swarm(1)

🔴 Docker Swarm (1)

  • 복수의 container가 있더라도 cli를 통해 통제할 수 있다.
  • machine, container를 여러개 띄어도 모두 통제할 수 있다는 것을 동일하지만, 이 모든것을 손으로 수작업(타이핑)하는 방법은 힘들다.
  • 그러므로, 자동화된 방법을 사용하는 것이 Docker Swarm이다.
  • Docker Swarm을 하기 위해서는 docker & docker-machine이 설치되어 있어야 한다.

🔴 Docker Swarm (2)

  • 여러개의 node들 위에서 도커 컨테이너들을 띄우는 것이다.
  • 머신들 위에서 Docker Swarm을 사용하여 수많은 컨테이너들이 동작한다.
  • Orchestration에는 manager가 있는데, 이는 yml 파일을 확보하며, yml 파일에 맞춰서 이미지 별로 컨테이너를 띄우는 worker들을 제어하는 모델이다.

🔴 Docker makes a single virtual system

  • 실행하고자 하는 어플리케이션을 수많은 서비스 이미지들을 넣고, yml으로 configration을 해서 yml 파일을 command rise interface로 뿌리면, 수많은 컨테이너로 분할이 된다.
  • 도커머신을 통해 원격에 있는 컴퓨터들을 관리할 수 있고
  • Docker Swarm은 원격 node를 관리하는 그 이상으로 그 위에서 실행되는 서비스와 컨테이너들츨 관리하기 위한 용도로 사용할 수 있다.
  • 따라서, 도커머신으로 node를 확보하고, 실질적인 서비스는 docker compose yml 파일로 만들어서 아래의 그림과 같이 수행한다.

🔴 Orchestrator

  • Container Orchestration Basic
    : yml 파일의 내용을 수많대의 컴퓨터를 띄워주고, 네트워킹의 편리함을 제공한다.
    : automatic 즉, 자동화라는 편리함 때문에 사용하는 것이다.
    ▶ 쿠버네티스는 Orchestration이고, Orchestration을 하는 대상은 도커컨테이너이다.

🔴 실습 (1)

# Docker Toolbox 설치 후 IP를 못 얻어오는 경우
$ docker-machine rm default 
$ docker-machine create --driver virtualbox default
# Create docker machines
docker-machine create --driver virtualbox manager
docker-machine create --driver virtualbox worker1
docker-machine create --driver virtualbox worker2
# check docker machines
docker-machine ls
docker-machine ip manager
docker-machine worker1
docker-machine worker2
docker-machine ssh manager
docker-machine ssh worker1
docker-machine ssh worker2
# define manager node(1)
docker-machine ssh {manager name} \ docker swarm init--advertise-addr {manager ip}
docker-machine ssh manager \
docker swarm init --advertise-addr ###.###.##.###

🤜 docker swarm join --token번호 반드시 기억하기

🔴 실습 (2)

# swarm node management by manager
docker-machine ssh manager \ docker node --help
docker-machine ssh manager \ docker node --ls
# docker swarm joining at worker machine
docker-machine ssh {worker name} \ docker swarm join ---token <token> <manager ip>:####

🔴 Docker stack

  • Swarm은 이 튜토리얼의 이전 단계에서했던 것처럼 개별 컨테이너를 만들지 않는다.
  • 모든 Swarm 객체는 stack files이라는 manifisets에서 설명 될 수 있다.
  • 즉, 실행하고자 하는 yaml 파일을 swarm에 만들고자 하는 어플리케이션을 포함시킬 것이다.

🔴 Task deployment (1)

# create docker-compose.yml
version: "3.7"
services:
# 웹서버가 하나가 이미지로 들어가 있음
 webserver:
 # 이미지는 nginx 최신 버전임
    image: nginx:latest
    deploy:
    # 4개의 컨테이너로 띄워달라는 의미
      replicas: 4
      # placement는 규칙임
      placement:
      # manager인 경우, 웹서버 일을 하지 않도록 명령
        constraints: [node.role != manager]
    ports:
     -8080:80

🔴 Task deployment (2)

# Copy docker-compose.yml into manager (yml 파일 주기)
docker-machine scp docker-compose.yml manager:~
# Deploy application stack through manager (일해~)
docker-machine ssh manager \
docker stack deploy -c docker-compose.yml helloswarm
# Check stack deployment status
docker-machine ssh manager \ docker stack ls

🐧 docker machinescp란?

  • 자신이 작업하는 local host에서 machine으로 파일을 copy하는 것

🔴 Task monitoring

docker service ls
docker service ps helloswarm
docker service ps helloswarm_webserver

🔴 Task release

# deployed stack release
docker-machine ssh manager \
docker stack rm helloswarm

🔴 Release Worker Nodes

# worker node leave a joined swarm
docker-machine ssh {worker name} \ docker swarm leave
# start
docker-machine ssh worker1 \ docker swarm leave
docker-machine ssh worker2 \ docker swarm leave

🔴 Remove docker machines

docker-machine stop
docker-machine rm

좋은 웹페이지 즐겨찾기