Docker Scale Out
1. 도커 설치
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum -y install docker-ce docker-ce-cli containerd.io docker-compose-plugin
systemctl enable --now docker
cat << EOF > app.py
import time
import redis
from flask import Flask
app = Flask(__name__)
cache = redis.Redis(host='redis', port=6379)
def get_hit_count():
retries = 5
while True:
try:
return cache.incr('hits')
except redis.exceptions.ConnectionError as exc:
if retries == 0:
raise exc
retries -= 1
time.sleep(0.5)
@app.route('/')
def hello():
count = get_hit_count()
return 'Hello World! I have been seen {} times.\n'.format(count)
EOF
cat << EOF > requirements.txt
flask
redis
EOF
cat << EOF > Dockerfile
# syntax=docker/dockerfile:1
FROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP=app.py
ENV FLASK_RUN_HOST=0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
EXPOSE 5000
COPY . .
CMD ["flask", "run"]
EOF
cat << EOF > docker-compose.yml
version: "3.3"
services:
web:
build: .
ports:
- "5000:5000"
redis:
image: "redis:alpine"
EOF
docker compose up
- 백그라운드 실행
docker compose up -d
- 다음 실습을 위해 down
docker compose down
2. 도커 스케일 아웃
curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose up
docker-compose scale redis=3
docker-compose ps
# docker compose -d --scale redis=3
- 중지
docker-compose stop
- 시작
docker-compose start
- 잠깐 중지, 재실행
docker-compose pause
docker-compose unpause
3. DB 올리기> - yml 파일 등록
cat << EOF > docker-compose.yml
version: "3.9"
services:
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
depends_on:
- db
image: wordpress:latest
volumes:
- wordpress_data:/var/www/html
ports:
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_DB_NAME: wordpress
volumes:
db_data: {}
wordpress_data: {}
EOF
Docker Swarm
- 도커 + 클러스터링
1. 5개의 클라이언트에 도커 설치
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum -y install docker-ce docker-ce-cli containerd.io docker-compose-plugin
systemctl enable --now docker
- 3번은 매니저 노드
- 4,5,6,7 워크노드
2. 도커 swarm 초기화
docker swarm init --advertise-addr 192.168.108.3
3. 방화벽 오픈
firewall-cmd --permanent --add-port=2377/tcp
firewall-cmd --permanent --add-port=7946/tcp
firewall-cmd --permanent --add-port=7946/udp
firewall-cmd --permanent --add-port=4789/udp
firewall-cmd --reload
4. 각 4,5,6,7 클라이언트에 토큰 입력 (토큰 명령어는 swarm 초기화 시 나온다)
docker swarm join --token SWMTKN-1-4a13944wyg2ruzu8bagztfizba4pvcxsqieb33fjng516pgrsg-4xg4wsr5hd9c67o74o6q47xls 192.168.108.3:2377
- 토큰 입력 전
- 토큰 입력 후
5. 이미지 다운 : 3번에서 진행
docker service create --name lb_test --replicas 4 -p 80:80 \
worldvit/swarmlbc:latest
- Manager Node
docker service ls
docker service ps lb_test
docker service scale lb_test=8 # 스케일 업
- 각 4,5,6,7 클라이언트에서 접근
firewall-cmd --list-service
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
curl http://192.168.108.3:80
- 삭제
docker service rm lb_test
<Rolling Update>
- 컨테이너가 실행되어있는 상태에서 버전업데이트, 이름, 이미지 변경이 중단없이 가능하다
docker service create --replicas 2 --name web --update-delay 10s nginx:1.14
docker service ps web
docker service update --image nginx:1.15 web
728x90
'클라우드 > Docker' 카테고리의 다른 글
No.79 - Docker3 : 도커개념 (0) | 2022.09.15 |
---|---|
No.78 - Docker2 : 도커개념 (0) | 2022.09.14 |
No.77 - Docker1 : 개요 및 설치 (0) | 2022.09.13 |