ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Docker 3부 서비스
    programing 2017. 12. 9. 08:57

      서비스 정보


    분산 응용 프로그램에서 응용 프로그램의 다른 부분을 "서비스"라고합니다. 예를 들어 비디오 공유 사이트를 상상할 경우 데이터베이스에 응용 프로그램 데이터를 저장하는 서비스인데요. 사용자 업로드와 프런트 엔드를 위한 서비스 등이 포함됩니다.


    서비스는 실제로 "프로덕션 컨테이너"입니다. 서비스는 하나의 이미지만 실행하지만 이미지를 실행하는 방법을 체계화합니다. 즉 어떤 포트를 사용해야 하는지, 얼마나 많은 컨테이너 복제본을 실행해야 서비스에 필요한 용량이 있는지, 서비스를 확장하면 해당 소프트웨어를 실행하는 컨테이너 인스턴스 수가 변경되어 프로세스의 서비스에 더 많은 컴퓨팅 리소스가 할당됩니다.


    다행히도 Docker 플랫폼으로 서비스를 정의, 실행 및 확장하는 것은 매우 쉽습니다 docker-compose.yml. 파일을 작성하는 것 뿐입니다 .


      첫 번째 docker-compose.yml파일


    docker-compose.yml파일은 도커에서 실행하는 방법을 정의하는 YAML 파일입니다.


    docker-compose.yml

    docker-compose.yml을원하는 파일을이 파일로 저장하십시오 . 미리 2부에서 만들었던 이미지에서 레지스트리에 추가하고, 이 업데이트 .yml로 대체하여 username/repo:tag 이미지의 세부 사항을 작성합니다.


    Docker 2부 앱 빌드 및 실행


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    version: "3"
    services:
      web:
        # replace username/repo:tag with your name and image details
        image: username/repo:tag
        deploy:
          replicas: 5
          resources:
            limits:
              cpus: "0.1"
              memory: 50M
          restart_policy:
            condition: on-failure
        ports:
          - "80:80"
        networks:
          - webnet
    networks:
      webnet:
    cs


    이 docker-compose.yml파일은 Docker에게 다음을 수행하도록 지시합니다.


    - 2부에서 업로드 한 이미지 레지스트리에서 실행합니다.


    - 해당 이미지의 인스턴스 5개를 호출해서 각 이미지 가 CPU의 최대 10% (모든 코어에 포함돼 있음) 및 RAM 50MB를 사용하도록 제한하는 호출 된 서비스로 실행합니다 .


    - 컨테이너가 실패하면 즉시 다시 시작하세요.


    - 호스트의 포트 80을 포트 80에 매핑하세요.


    - web로드 밸런싱 네트워크를 통해 포트 80을 공유하도록 명령합니다. 내부적으로 컨테이너 자체는 web임시 포트에서 포트 80으로 송출합니다 .


    - webnet기본 설정(로드 균형 조정 된 오버레이 네트워크)으로 네트워크를 정의합니다 .


      새로운 로드 밸런싱 응용 프로그램 실행


    docker stack deploy명령을 사용하기 전에 먼저 다음을 실행합니다.

    1
    $ docker swarm init
    cs



    getstartedlab을 이제 실행 해 봅니다. 앱에 이름을 지정해야 합니다. 여기서 다음과 같이 설정됩니다 

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


    단일 서비스 스택은 배포 된 이미지의 컨테이너 인스턴스 5개를 하나의 호스트에서 실행합니다.

    애플리케이션에서 하나의 서비스에 대한 서비스 ID를 얻습니다.

    1
    $ docker service ls
    cs


    web앱의 출력이 앱 이름 앞에 붙습니다. 이 예제에서와 같이 이름을 지정하면 이름이됩니다 getstartedlab_web. 서비스 ID는 복제본 수, 이미지 이름 및 노출 된 포트와 함께 나열됩니다.


    서비스에서 실행되는 단일 컨테이너를 task라고합니다 . docker-compose.yml 작업에는 replicas정의 된 번호까지 숫자가 증가하는 고유 한 ID가 제공 됩니다. 서비스 작업을 나열해 보겠습니다.

    1
    $ docker service ps getstartedlab_web
    cs


    서비스에 의해 필터링 되지는 않지만 시스템의 모든 컨테이너를 나열하면 작업도 표시됩니다.

    1
    $ docker container ls -q
    cs


    curl -4 http://localhost번에 여러 번 실행 하거나 브라우저에서 해당 URL로 이동하여 새로 고침을 여러번 누릅니다.

    어느 쪽이든 컨테이너 ID가 변경되어 로드밸런싱을 보여줍니다. 각 요청마다 5가지 작업 중 하나가 라운드 로빈 방식으로 응답하도록 선택됩니다. 컨테이너 ID는 이전 명령 ( docker container ls -q) 의 결과와 일치합니다.


      앱 크기 조정


    replicas값을 docker-compose.yml변경하고 변경 사항을 저장하고 docker stack deploy명령을 다시 실행하여 앱의 크기를 조절할 수 있습니다 .

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

    Docker은 적절한 업데이트를 수행하므로 스택을 먼저 떼어 내거나 컨테이너를 제거 할 필요가 없습니다.


    이제 재실행 docker container ls -q해서 배포 된 인스턴스가 재구성되었는지 확인하세요. 복제본을 확장하면 더 많은 태스크가 생겨서 더 많은 컨테이너가 시작됩니다.


      앱을 끄고 삭제하는 방법


    다음과 같이 앱을 다운시킵니다 docker stack rm.

    1
    $ docker stack rm getstartedlab
    cs

    swarm 다운
    1
    $ docker swarm leave --force
    cs

    Docker를 사용하여 앱을 실행하고 확장 할 수 있습니다. 프로덕션 환경에서 컨테이너를 실행하는 방법을 배우는데 큰 걸음을 옮겼습니다. 다음으로,이 응용 프로그램을 Docker 시스템 클러스터에서 보나 피드 스웜으로 실행하는 방법을 알아보겠습니다.

      요점정리 및 코드



    docker run을 간단히 말하면 입력 작업은 간단 하지만 프로덕션에서 컨테이너를 실제로 구현하면 서비스로 실행됩니다. 서비스는 Compose 파일에서 컨테이너의 동작을 성문화하며,이 파일을 사용하여 앱을 확장, 제한 및 재배포 할 수 있습니다. 서비스 변경은 서비스를 시작한 동일한 명령 docker stack deploy을 사용해서 실행하면 그대로 적용 할 수 있습니다.

    이 단계에서 찾을 수 있는 명령은 다음과 같습니다.

    1
    2
    3
    4
    5
    6
    7
    8
    docker stack ls                                            # 스택 또는 애플리케이션 나열
    docker stack deploy -<composefile> <appname>  # 지정된 Composefile을 실행합니다.
    docker service ls                 # 앱과 연결된 실행 중인 서비스 나열
    docker service ps <service>                  # 애플리케이션과 관련된 태스크 나열
    docker inspect <task or container>                   # 작업 또는 container 검사
    docker container ls -q                                      # 컨테이너 Id 리스트
    docker stack rm <appname>                             # 애플리케이션을 삭제합니다.
    docker swarm leave --force      # 매니저로부터 단일 노드 swarm을 .
    cs

    ▲참조: https://docs.docker.com/get-started/part3/

    'programing' 카테고리의 다른 글

    Docker 4부 스웜(Swarm)  (0) 2017.12.13
    Xshell 소개 및 다운로드  (0) 2017.12.12
    Docker 2부 앱 빌드 및 실행  (0) 2017.12.08
    Docker 시작하기 1부  (0) 2017.12.07
    Docker 설치 링크  (0) 2017.12.06
Designed by Tistory.