
컨테이너의 유연성과 확장성을 위해서 Node(Docker host)들에 컨테이너를 유동적으로 나눠서 배포 및 자동화 하는 프로세스
ex) LDAP, Jenkins, Grapana/Prometheus
구조
Manager node : Cluster를 관리하고, 스케줄링, API Endpoint 등을 제공
Cluster: Node의 집합
Worker node : Container에 대한 작업만 실행
ssh로 원격 접속하여 작업하기 위해서 각 Node에 설정
# ssh
vi /etc/ssh/sshd_config
# ssh 새로 시작로 시작
systemctl restart sshd

fdisk /dev/sdb
mkdir /docker_data
mount /dev/sdb1 /docker_data/
blkid | grep sdb1
vi /etc/fstab
init 6

df -h

wget -O install_docker.sh https://raw.githubusercontent.com/Joes-s/docker-daemon/main/install_docker.sh
# 출처
https://github.com/Joes-s/docker-daemon

# 실행 권한 부여
chmod a+x install_docker.sh
# 쉘 파일로 설치
./install_docker.sh
vi /etc/docker/daemon.json
# 추가한 내용
{
"data-root":"/docker_data"
}
systemctl restart docker

vi /etc/containerd/config.toml
# 수정한 내용(주석제거후 수정)
root = "/docker_data/containerd"
systemctl restart containerd.service

docker info | grep "Root"
ctr plugins ls
ps aux | grep dockerd
systemctl daemon-reload


docker swarm init --advertise-addr 10.17.0.150 --default-addr-pool 172.17.0.0/16 --default-addr-pool-mask-length 24

docker node ls


# ingress 확인
docker network inspect ingress
# ingress가 안나오는 경우에 다시 네트워크를 만들어본다.
docker swarm leave --force
# 중복이 있는 경우 swarm을 지우고 새로운 대역인 117으로 변경했다.
docker swarm init --advertise-addr 10.17.0.150 --default-addr-pool 172.117.0.0/16 --default-addr-pool-mask-length 24

# nginx 서비스 (컨테이너를 먼저 다운 받아놓고 하면 좀 빠르다.)
docker pull nginx:latest
docker service create --name web-service --replicas 2 -p 80:80 nginx:latest
# 위에 꺼가 안될 때 152, 151번에서
docker pull nginxdemos/hello
#nginxdemos 서비스 다시 시도()
docker service create --name web-service --replicas 2 -p 80:80 nginxdemos/hello
docker service create --name web-service --replicas 2 -p 80:80 nginx:latest
# 서비스 리스트 조회
docker service ls
# 서비스 inspect
docker swarm inspect web-service
# 컨테이너 돌아가는 것 확인
docker container ps



docker node update --availability drain docker-00



docker service scale web-service=4




docker service scale web-service=2


docker service rm web-service

======================================
docker image pull httpd:2.4
docker service create --name web-server --replicas 3 -p 80:80 httpd:2.4
docker service inspect web-server

docker service ls
# 새버전으로 업데이트
docker service update --image httpd:latest web-server



# 롤백하는 방법
docker service rollback web-server
docker service inspect web-server


=======================================
# 작업 경로
root@docker-00:/docker_data/swarm_compose#
vi docker-compose.yaml
# 작성한 내용
version: '3.8'
services:
web-service:
image: nginx:latest
ports:
- "80:80"
deploy:
replicas: 3
# 151, 152
docker pull nginx:latest
# Stack 선언
docker stack deploy -c docker-compose.yaml stack01
# Stack 조회
docker stack ps stack01
# Stack 삭제
docker stack rm stack01



# 재시작
vi restart_test.yaml
# 작성한 내용
version: '3.8'
services:
test:
image: alpine
command: sh -c "sleep 5 && exit 1"
deploy:
replicas: 2
restart_policy:
condition: on-failure
delay: 3s
max_attempts: 5
window: 120s
# Stack 조회
docker stack ls
# Stack 생성
docker stack deploy -c restart_test.yaml test
# 151, 152 이미지가 있어야함
docker image pull alpine:3.23.3
# 실시간 상태 조회
watch -n 1 docker stack ps test


