ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Docker 5부 스택(Stacks)
    programing 2017. 12. 17. 09:04


      소개


    스택은 종속성을 공유하는 상호 연관된 서비스의 그룹이며 함께 조정 및 조정될 수 있습니다. 단일 스택은 전체 응용 프로그램의 기능을 정의하고 조정할 수 있습니다 (매우 복잡한 응용 프로그램이 여러 스택을 사용할 수도 있음).


    좋은 소식은, Compose 파일을 만들고 사용할 때 3부에서 기술적으로 스택을 사용하고 있다는 것, docker stack deploy입니다. 그러나 이는 단일 호스트에서 실행되는 단일 서비스 스택이었습니다. 이는 일반적으로 프로덕션 환경에서 발생하지 않습니다. 여기서는 배운 것을 받아들이고 여러 서비스를 서로 관련 시키며 여러 시스템에서 실행합니다.


      새 서비스 추가 및 재배포


    docker-compose.yml파일 에 서비스를 추가하는 것은 쉽습니다 . 먼저, 우리의 스웜 컨테이너를 어떻게 스케쥴 하는지를 볼 수있는 무료 시각화 서비스를 추가합니다.


    1. docker-compose.yml편집기에서 열어 내용을 다음과 같이 바꿉니다. username/repo:tag이미지 세부 정보 로 바꾸세요.


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    version: "3"
    services:
      web:
        # replace username/repo:tag with your name and image details
        image: username/repo:tag
        deploy:
          replicas: 5
          restart_policy:
            condition: on-failure
          resources:
            limits:
              cpus: "0.1"
              memory: 50M
        ports:
          - "80:80"
        networks:
          - webnet
      visualizer:
        image: dockersamples/visualizer:stable
        ports:
          - "8080:8080"
        volumes:
          - "/var/run/docker.sock:/var/run/docker.sock"
        deploy:
          placement:
            constraints: [node.role == manager]
        networks:
          - webnet
    networks:
      webnet:
    cs


    여기에 새로운 유일하게 할 수있는 피어 서비스입니다 web, 이름 visualizer. A : 당신은 여기에 두 가지 새로운 것들을 볼 수 있습니다. volumes도커에 대한 호스트의 소켓 파일에 대한 비주얼 액세스를 제공 키 및 placement키, 이 서비스는 오직 스웜 관리자에서 실행 보장 - 결코 노동자. Docker가 만든 오픈 소스 프로젝트를 기반으로 작성된 이 컨테이너 는 다이어그램의 덩치에서 실행되는 Docker 서비스를 표시하기 때문입니다.


    2. Shell이 myvm1 작동 할 수 있도록 구성되었는지 확인하세요. 

    실행 docker-machine ls시스템을 나열하고 당신이 연결되어 있는지 확인하기 위해 myvm1그 옆에 별표 (*)로 표시된 바와 같이 필요한 경우, 다시 실행 docker-machine env myvm1한 다음 주어진 명령을 실행하여 쉘을 구성하세요.


    맥 또는 리눅스 명령은 다음과 같습니다.

    1
    eval $(docker-machine env myvm1)
    cs


    윈도우 명령은 다음과 같습니다.

    1
    & "C:\Program Files\Docker\Docker\Resources\bin\docker-machine.exe" env myvm1 | Invoke-Expression
    cs


    3. docker stack deploy관리자 에게 명령을 다시 실행하면 업데이트가 필요한 서비스가 업데이트됩니다.

    1
    2
    3
    $ docker stack deploy -c docker-compose.yml getstartedlab
    Updating service getstartedlab_web (id: angi1bf5e4to03qu9f93trnxm)
    Creating service getstartedlab_visualizer (id: l9mnwkeq2jiononb5ihz9u7a4)
    cs


    4. 시각화 프로그램을 통해서 확인할 수 있습니다.

    visualizer포트 8080에서 실행 되는 작성 파일을 보았습니다. docker-machine ls. 실행해서 노드 중 하나의 IP 주소를 가져옵니다. 포트 8080의 IP 주소로 가면 Visualizer가 실행되는 것을 볼 수 있습니다.

    visualizer예상대로 관리자 의 단일 복사본 이 실행 중이며 5개의 인스턴스가 web웜 전체에 퍼져 있습니다. 다음을 실행하여이 시각화를 확인할 수 있습니다.

    1
    $ docker stack ps <stack>
    cs


    비주얼 라이저는 스택에 포함 된 모든 앱에서 실행할 수있는 독립 실행 형 서비스입니다. 그것은 다른 것에 의존하지 않습니다. 


      데이터 유지


    앱 데이터를 저장하기위한 Redis 데이터베이스를 추가하기 위해 동일한 워크 플로를 한 번 더 살펴 보겠습니다.


    1. 새로운 docker-compose.yml파일을 저장하면 마지막으로 Redis 서비스가 추가됩니다. username/repo:tag이미지 세부 정보로 바꿔주세요.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    version: "3"
    services:
      web:
        # replace username/repo:tag with your name and image details
        image: username/repo:tag
        deploy:
          replicas: 5
          restart_policy:
            condition: on-failure
          resources:
            limits:
              cpus: "0.1"
              memory: 50M
        ports:
          - "80:80"
        networks:
          - webnet
      visualizer:
        image: dockersamples/visualizer:stable
        ports:
          - "8080:8080"
        volumes:
          - "/var/run/docker.sock:/var/run/docker.sock"
        deploy:
          placement:
            constraints: [node.role == manager]
        networks:
          - webnet
      redis:
        image: redis
        ports:
          - "6379:6379"
        volumes:
          - /home/docker/data:/data
        deploy:
          placement:
            constraints: [node.role == manager]
        command: redis-server --appendonly yes
        networks:
          - webnet
    networks:
      webnet:
    cs

    Redis는 Docker 라이브러리에 공식 이미지가 있으며, image는 짦은 이름 이 부여되어 있으므로 username/repo여기에 표기가 없습니다. Redis 포트 6379는 컨테이너에서 호스트로 노출되도록 Redis에 의해 사전 구성되어 있습니다. 여기에서 Compose 파일에는 호스트에서 전세계로 노출되므로 실제로 호스트의 IP 주소를 입력 할 수 있습니다. 노드를 Redis Desktop Manager로 가져 와서 Redis 인스턴스를 관리하세요.


    가장 중요한 redis점 은이 스팩의 배치 사이에 데이터를 지속 시키는 두 가지 사항이 있습니다.

    - redis 항상 매니저에서 실행되므로 항상 동일한 파일 시스템을 사용합니다.

    - redis/dataRedis가 데이터를 저장하는 컨테이너 내부에서 호스트의 파일 시스템에있는 임의의 디렉토리에 액세스합니다.


    Redis 데이터를위한 호스트의 물리적 파일 시스템에 "source of truth"을 만듭니다. 이 기능이 없으면 Redis는 /data컨테이너의 파일 시스템 내부에 데이터를 저장 합니다. 컨테이너의 파일 시스템이 재배포 된 경우에는 사라집니다.


    이 소스는 두 가지 구성 요소가 있습니다.

    - Redis 서비스에 배치 한 배치 제약 조건. 항상 동일한 호스트를 사용합니다.

    - 컨테이너가 ./data(호스트에서) 액세스 할 수있게 만든 볼륨 /data(Redis 컨테이너 내부). 컨테이너가오고가는 동안 ./data지정된 호스트에 저장된 파일 은 지속되어 연속성을 유지합니다.


    이제 드디어 새 Redis-using 스택을 배포 할 준비가되었습니다.


    2. ./data관리자에 디렉토리를 만듭니다.

    1
    $ docker-machine ssh myvm1 "mkdir ./data"
    cs


    3. myvm1 셸이 대화 할 수 있도록 구성되었는지 확인하세요.

    Run docker-machine ls 시스템을 나열하고 당신이 연결되어 있는지 확인하기 위해 myvm1를 살펴보세요.


    맥 또는 리눅스 명령은 다음과 같습니다.

    1
    eval $(docker-machine env myvm1)
    cs


    윈도우 명령은 다음과 같습니다.

    1
    & "C:\Program Files\Docker\Docker\Resources\bin\docker-machine.exe" env myvm1 | Invoke-Expression
    cs


    4. docker stack deploy을 한 번 더 실행하세요.

    1
    $ docker stack deploy -c docker-compose.yml getstartedlab
    cs

    5. 실행 docker service ls 해서 세 가지 서비스가 예상대로 실행되는지 확인합니다.

    1
    2
    3
    4
    5
    $ docker service ls
    ID                  NAME                       MODE                REPLICAS            IMAGE                             PORTS
    x7uij6xb4foj        getstartedlab_redis        replicated          1/1                 redis:latest                      *:6379->6379/tcp
    n5rvhm52ykq7        getstartedlab_visualizer   replicated          1/1                 dockersamples/visualizer:stable   *:8080->8080/tcp
    mifd433bti1d        getstartedlab_web          replicated          5/5                 orangesnap/getstarted:latest      *:80->80/tcp
    cs


    6. 노드 중 하나에서 웹 페이지를 확인하면 (예 http://192.168.99.101:) 방문자 카운터의 결과가 표시됩니다. 방문자 카운터는 현재 라이브 상태이며 Redis에 대한 정보를 저장합니다.

    또한 노드의 IP 주소에서 포트 8080의 비주얼 라이저를 확인 redis하면 web및 visualizer서비스 와 함께 실행중인 서비스가 표시됩니다.


    ▲참조: https://docs.docker.com/get-started/part5/#persist-the-data

    'programing' 카테고리의 다른 글

    구글 콘솔(Google Play console) 앱 인증서 분실시 대처 방법  (0) 2023.08.17
    UTF-8 코드  (0) 2018.01.04
    Docker 4부 스웜(Swarm)  (0) 2017.12.13
    Xshell 소개 및 다운로드  (0) 2017.12.12
    Docker 3부 서비스  (0) 2017.12.09
Designed by Tistory.