지난 포스팅에서 도커 스웜의 필요성을 정리했었다.
지금까지 한 내용을 요약해보면
- 개별적인 이미지들을 하나씩 컨테이너로 수동으로 만들어 주고 컨테이너끼리 연결해보았다.
- 컨테이너 설정을 모아둘 수 있는 docker-compose를 이용해서 한 번에 필요한 모든 컨테이너를 가동시켰다.
이제 docker swarm을 시작하고 지금까지 만들었던 컨테이너들을 service로 격상시켜서 사용해 볼 것이다.
도커 스웜 준비
$ git clone https://github.com/hyun98/Docker_Practice.git
먼저 git clone 후 docker-compose.yml 파일을 수정해야한다.
service로 격상시켜서 사용하려면 docker-compose에서 이미지를 빌드시켜서 사용하는게 아니라 이미 만들어져 있는 이미지를 사용해야 한다.
그래서 djangotest 먼저 만들어야 한다..!
$ docker build -t djangoimg -f localhost.Dockerfile .
항상 맨 마지막에 dockerfile의 위치를 알려주는 . 을 까먹지 말자!
이미지를 빌드했다면 docker-compose.yml 파일을 열어보자
위 부분을 아래와 같이 새로 만들 이미지로 설정해준다.
mariadb 이미지 설정부분과 동일하다.
도커 스웜 시작
$ docker swarm init
터미널에 코드를 입력하자.
위와 거의 똑같은 글자들이 나올것이다
현재 노드(서버)가 매니저 노드가 되었고, worker 노드를 추가하려면 worker노드에서 docker swarm을 init한 후
docker swarm join --token <manager node token> 커맨드를 입력하라고 한다. 나중에 서버의 용량이 부족해지면 노드를 추가해서 쉽게 사용할 수 있게된다.
도커 스택
지난 포스팅에서 적었던 글을 다시 가져왔다.
stack스택 : 서비스의 묶음 단위. 스택이라는 공간 내부에 웹서버 컨테이너, db컨테이너등을 구축한다. 하나의 스택으로 묶인 컨테이너들은 기본적으로 같은 overlay 네트워크에 속하게 된다.
일단 docker-compose.yml을 통해서 스택과 서비스를 만들어 보자!
$ docker stack deploy -c .\docker-compose.yml djangostack
// docker stack deploy --compose-file docker-compose.yml {stack이름}
stack에 해당되는 모든 서비스는 {stack이름}_ 으로 시작한다
명령을 실행하면 docker 네트워크가 먼저 생성되고 mariadb, djangotest 서비스가 생성된다.
docker stack ls
현재 docker에 있는 모든 stack을 보여준다.
해당 stack에 몇 개의 service가 있는지, Orchestration 툴은 어떤것을 사용하고 있는지 나타난다.
docker service ls
현재 가동중인 모든 service를 보여준다. 상태에 대한 정보도 확인할 수 있다.
도커 service의 장점
여기까지 보면 docker-compose up -d 와 별 차이점을 못 느낄 것이다.
service가 container들을 직접 실행하는 것에 비해 가지는 장점이자 가장 큰 차이점은 image파일의 업데이트, 연결된 network 및 volume등의 구성을 service를 중단할 필요없이 수정할 수 있다는 점이다.
그리고 service는 갑자기 알수없는 오류로 인해서 컨테이너 하나를 못쓰게 되면 즉시 새로운 컨테이너를 만들어서 구동시키게 된다.
다음 포스팅에서 service의 replica에 대해서 알아보고, stack update를 다룰 예정이다.
'DevOps > Docker' 카테고리의 다른 글
[Docker] 컨테이너 기능별, 포트별 분리 (feat. nginx) (0) | 2021.11.22 |
---|---|
[Docker] certbot 컨테이너를 사용해 SSL 인증서 발급받기 (0) | 2021.11.14 |
[Docker] Docker Swarm에 대해서 (0) | 2021.08.18 |
[Docker] docker-compose로 편하게 개발환경 구성하기 (0) | 2021.08.10 |
[Docker] Docker 관련 tip #1 (0) | 2021.08.10 |