1. 개요

<Docker 가상 환경 구축 입문>의 <Chapter 9-11. 컴포즈 파일을 이용한 서비스 생성>을 읽고 정리한 내용입니다.


2. Compose 파일을 이용한 서비스 생성 (Wordpress 서비스 생성 예제)

  • docker service create 명령어에 세세한 설정을 지정하여 실행하지 않고, 별도의 설정 파일인 docker-compose.yml을 작성하여 서비스를 생성할 수 있음.
  • docker-compose.yml
    version: '3.4'
    services:
      wordpress:
        image: wordpress
        ports:
          - 8080:80
        environment:
          WORDPRESS_DB_PASSWORD: samplewp
        deploy:
          replicas: 2
          placement: 
            constraints:
              - node.role == worker
        depends_on:
          - mysql
      mysql:
        image: mysql:5.7
        environment:
          MYSQL_ROOT_PASSWORD: samplewp
        volumes:
          - mysql_vol:/var/lib/mysql
        deploy:
          replicas: 1
          placement:
            constraints:
              - node.hostname == manager1
    volumes:
      mysql_vol:
    
    • depends_on 항목에서 WordPress는 mysql 서비스에 의존적이라고 명시하였으므로, mysql이 먼저 기동됨. 
    • 기존의 docker-compose.yml 파일과 비슷하지만, deploy 부분에 Swarm과 관련된 설정을 기재함.
    • 레플리카 수를 지정하거나, 어떤 노드에서 실행할 지 제한할 수 있음.
  • docker stack deploy 명령어 실행
    # docker stack deploy --compose-file <compose file name> <stack name>
    $ docker stack deploy --compose-file docker-compose.yml wp
    $ docker service ls
    ID                  NAME                MODE                REPLICAS            IMAGE               PORTS
    ls6lglbddk2i        wp_mysql            replicated          1/1                 mysql:5.7           
    i691r4z9vjs4        wp_wordpress        replicated          2/2                 wordpress:latest    *:8080->80/tcp
    
  • 만약 서비스가 올라오지 않고, 레플리카 수가 0에 멈춰있다면 docker service ps <NAME> 명령어로 현재 상태 및 서비스 기동 불가의 원인을 확인할 수 있음.
  • Docker에서 스택이란 의존 관계를 가진 여러개의 서비스 그룹을 정의한 것으로 위 예제의 wordpress와 mysql의 관계가 스택이라고 할 수 있음.
  • 스택 이름은 각 서비스의 접두사로 붙게 되니 참고.
  • docker stack 명령어를 통한 서비스 확인 및 삭제
    $ docker stack ls
    NAME                SERVICES            ORCHESTRATOR
    wp                  2                   Swarm
    
    $ docker stack remove wp
    Removing service wp_mysql
    Removing service wp_wordpress
    Removing network wp_default
    
    $ docker stack ls
    NAME                SERVICES            ORCHESTRATOR