홈네트워크에 2021년 DS720+ 추가했다.
운영하는 NAS가 두대나 생기고 그 기기들의 역활을 정하다보니 docker swarm을 시도해보기로했다.
진행하면서 궁금했던 점 or 자료 정리
swarm 란?
도커에서 공식적으로 만든 오케스트레이션 툴이다.
오케스트레이션 툴? 여러 호스트 서버의 컨테이너들을 배포 및 관리를 위한 툴
배포 및 관리 뿐만 아니라 다양한 기능을 포함하고있다.
- 컨테이너 자동 배치 및 복제
- 로드밸런싱
- 장애 모니터링
- 클러스터 외부 노출
- 컨테이너 확장 축소 (스케일업)
- docker services 간 네트워크 노출
오케스트레이션 다른 툴
- kubernetes 쿠버네티스 (k8s)
swarm 설정은 공식 홈페이지에서 살펴보는 것이 좋다 생각합니다.
Getting started with swarm mode | Docker Documentation
swarm manager, worker 호스트서버 사양은 어떻게 해야할까?
나는 각기 다른 사양의 머신을 가지고있다. 서버로서 사용할 수 있는 것들은
- MacBook pro 2018 15 / i7 RAM32GB
- DS720+
- DS218+
- Raspberry pi 4 RAM8GB
그렇다면 manager는 좋은 사양으로 해야할까?
이 것이 제일 궁금했다.
처음 설정할때 재대로 하고싶다는 생각 때문이었다.
아직 찾지 못했다. 정보 공유 코멘트 부탁드려요ㅎㅎ 🙏
docker-compose.yaml 🤝 docker swarm
나는 지금까지 docker-compose로 모든 서비스를 정의해왔다. 그럼 docker-compose로 어떻게 swarm에 배포를 해야할까?
docker stack deploy -c docker-compose.yaml {stack name}
위와 같은 방법으로 할 수 있다.
문제점 docker stack은 docker-compose.yaml의 env를 가져올 수 없다!
docker-compose.yaml
안에 env_file로 정의한 .env
파일의 내용을 가져올 수 없었다.
그래서 살펴보니 공식적으로 지원하지 않는다고
https://github.com/moby/moby/issues/29133#issuecomment-278198683
docker stack deploy -c <(docker-compose config) stackname
나는 위와같이 해서 해결했다.
위에서 docker-compose -f 컴포즈파일지정
과 stack 이름만 변경해서 사용하면된다. 이렇게되면 .env
파일이 적용된 config를 토대로 만들어진다.
특정 머신에 서비스 배포하기
특정 머신, 특정 호스트, 매니저 호스트 등등 특정 조건을 토대로 서비스를 배포하게 설정할 수 있다.
version: "3.8"
services:
whoami:
image: "test"
deploy:
placement:
constraints:
- node.hostname == ${HOSTNAME}
Code language: JavaScript (javascript)
docker-compose.yaml
과 다르게 deploy라는 부분안에서 설정하는게 기존 docker와 다른점이다.
위 예시에서 constraints node.hostname 설정은 특정 호스트에 배포하겠다는 뜻이다.
호스트네임은 docker node ls
를 통해서 알 수 있다.