320x100
320x100

도커 컴포즈

: 여러 개의 컨테이너를 동시에 실행하고 관리하는 툴

: 여러 컨테이너로 구성된 애플리케이션을 관리

: 주로 단일 호스트 환경에서 사용

 

 

 

도커 스웜

: 클러스터를 구축하여 여러 개의 컨테이너를 관리하는 툴

: manager 노드와 worker 노드로 나누어 컨테이너를 관리

: 주로 멀티 호스트 환경에서 사용

: 호스트에 대한 컨테이너 배치 및 서로 다른 호스트의 컨테이너간 통신 등 조율

 

 

 

※ 도커 컴포즈 설치 

: 도커 컴포즈 깃허브 (https://github.com/docker/compose)에서 설치

=> README 참조 (최신버전 확인)

 

ㆍ도커 컴포즈 설치

: curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

 

ㆍ실행권한 부여

: chmod +x /usr/local/bin/docker-compose

 

ㆍ도커 컴포즈 버전 확인

: docker-compose --version

 

 

 

 

# 도커 컴포즈 버전 (필수)
version: '3.8'

# 서비스 선언 (필수)
services:
# 실행할 이미지 / 포트 및 내부 네트워크 등
 main:
  image: 2mukee/mh_main_image:1.39
  ports:
   - 443:17260
  networks:
   - mh_network
  # 의존성 (db가 실행된 후 main이 실행)
  depends_on:
   - db

 db:
  image: 2mukee/mh_db_image:1.1
  ports:
   - 27107:27107
  networks:
   - mh_network

 api:
  image: 2mukee/mh_api_image:1.00
  networks:
   - mh_network
  depends_on:
   - main

# 네트워크 선언 (선택사항) / 서비스들을 하나의 네트워크로 묶기 위함
# docker network create --gateway 172.22.0.1 --subnet 172.22.0.0/16 mh_network
networks:
 mh_network:
  external: true

 

도커 컴포즈 파일 예시

: 파일명은 반드시 docker-compose.yml로 해야함

: version의 경우 버전마다 문법이 다르니 반드시 도커엔진의 버전을 확인 후 기재

=> 참조 (https://docs.docker.com/compose/compose-file/compose-file-v3/)

 

ㆍ컴포즈 내 서비스들을 하나로 묶기 위한 네트워크 브릿지 생성

: docker network create --driver=bridge --gateway 172.22.0.1 --subnet 172.22.0.0/16 mh_network

: docker network create --driver=bridge --gateway 172.xx.0.1 --subnet 172.xx.0.0/16 <네트워크명>

 

ㆍ도커 컴포즈 실행 (docker-compose.yml이 있는 디렉터리에서 실행)

: docker-compose up --build -d 

 

ㆍ도커 컴포즈 종료

: docker-compose down

 

 

 

 

도커 스웜으로 도커 컴포즈 실행

ㆍ네트워크 브릿지 변경

: docker network rm mh_network

: docker network create --scope=swarm --driver=overlay --gateway 172.22.0.1 --subnet 172.22.0.0/16 mh_network

=> network scope에 반드시 swarm이 있어야함

 

ㆍ스택 배포

: docker stack deploy -c <yml파일> <스택이름>

: yml파일의 이름은 ~~~.yml 형식

: docker swarm init 를 통해 스웜모드를 시작한 후 실행 가능

: -c 옵션은 --compose-file이라는 의미

: 스택 이름에는 .이 들어가서는 안됨

 

ㆍ스택 확인

: docker ps

: docker service ls

 

 

 

 

version: '3.8'

services:
 main:
  image: 2mukee/mh_main_image:1.41
  ports:
   - 443:17260
  depends_on:
   - db

 db:
  image: 2mukee/mh_db_image:1.11
  ports:
   - 27107:27107
   - 27106:27106

 api:
  image: 2mukee/mh_api_image:1.12
  depends_on:
   - main
   - db

 

고정된 네트워크로 컨테이너 접속하기

: 도커 컴포즈 version 3의 경우 yml 파일에 명시된 서비스명으로 해당 컨테이너에 접속 가능

: 따로 networks 설정을 하거나 네트워크 인터페이스를 생성하지 않고 기본 네트워크 만으로 생성가능

: 위 파일 작성 후 docker stack deploy -c docker-compose.yml <스택명>만 해줘도 정상 작동

: mongodb 연동시 링크를 mongodb://db:27107 라고 설정해야함

 

 

 

※ 도커 스택과 도커 컴포즈의 차이

ㆍDocker Compose

: 컨테이너를 정의 하는 것

: docker-compose 명령이 실행되는 순간에만 컨테이너를 관리

: 지속적인 모니터링 기능이 없어 컨테이너가 5분안에 예기치 않게 종료 될 시 컨테이너를 재시작할 수 없음 

 

ㆍDocker Stack

: Service를 정의하는 것 (최상위 단위

: Service라는 개념은 docker version 1.12 이후 도입된 개념

: 도커 스웜을 통해 관리 되는 개념

: 컨테이너의 상태 이상 발생시 조치 가능 (모니터링 지원)

: compose file version 3.0 이상부터 지원

 

 

 

오류해결법

※ container_name: Setting the container name is not supported.
: 도커 컴포즈 파일의 container-name 항목 삭제

※ Docker stack deploy support is limited to networks with scope=swarm
: 기존 network 인터페이스를 삭제하고 swarm으로 변경

: docker network create --scope=swarm --driver=bridge --gateway 172.xx.0.1 --subnet 172.xx.0.0/16 <네트워크명>


※ Error response from daemon: rpc error: code = InvalidArgument desc = name must be valid as a DNS name component
: 스택이름으로 인한 에러
: 스택이름에 . 넣지 말 것

 

 

 

 

Refference

 

Docker #5. 여러 대의 도커 호스트를 다뤄보기

이번 실습은 여러 호스트를 다루면서 컨테이너를 배치하는 방법에 대해서 다뤄보는 튜토리얼이다. 이번 튜토리얼에서는 도커 스웜(docker swarm)을 사용한다. 도커 스웜은 여러 도커 호스트를 클러

devowen.com

 

42 inception 과제 기초 가이드 - 도커 컴포즈로 실제 서비스를 올려보자

42 서울 inception 과제는 docker-compose를 사용하여 여러 도커 파일들을 컨테이너로 올려야한다. ft_server라는 과제가 있었지만 지금은 사라졌다. Dockerfile 하나로 컨테이너를 올려서 서비스를 관리하는

epicarts.tistory.com

 

유혹하는 개발하기

Python, Django, 데이터 분석, 알고리즘 등 매일 공부한 내용을 기록합니다.

roseline124.github.io

 

도커 시작하기 10 : 도커 스웜 - 컴포즈 파일과 스택

컴포즈 파일과 스택 컴포즈 파일을 이용하면 서비스를 보다 쉽게 만들고 업데이트할 수 있다. 다음 컴포즈 파일을 보자. version: "3.6" services: web: image: madvirus/simplenode:0.1 ports: - "5000:5000" dep..

javacan.tistory.com

 

[Docker] docker-compose docker stack 차이

Docker를 셋팅하다보면 Docker와 Docker Compose를 고민하게되고, docker-compose를 파다보면, docker-compose와 동일한 파일을 사용하는 것 같은 docker stack을 발견하게 된다. 그래서 오늘은 docker-compose와..

log-laboratory.tistory.com

 

 

 

300x250
728x90

'Container > Docker Swarm' 카테고리의 다른 글

도커 스웜 기초  (0) 2021.09.16