Docker swarm으로 서비스 시작 & 커서 설정 시도

10600 단어 Dockerswarm
(참고) Docker engine 버전은 1.12입니다.

개요


swarm에서nginx 서비스를 실행하는 동시에
입찰을 시험해 보다.

명령 목록


명령하다
컨텐트
docker service create
새 서비스 시작
docker service scale
기존 서비스의 범위를 좁히다
docker service ls
swarm 그룹에서 실행되는 서비스 목록을 표시합니다
docker service ps
서비스에 포함된 작업(컨테이너) 목록 표시
docker service rm
서비스 삭제
이번에 주로 사용된 지령은 전반부의 두 개가 있다.

새 서비스 시작


새 서비스 시작 (nginx 서비스)
docker service create -p 80:80 --name="nginx_sample" --replicas=3 nginx
swarm 노드의 TCP 80(HTTP) 및 nginxSample 서비스의 TCP 80(HTTP)을 연결합니다.
nginx 이미지도 TCP 443호(HTTPS)를 사용할 수 있지만 이번에는 샘플을 위해 설정하지 않았다.

시작 중 확인


시작 중인 서비스 상태
docker service ls
ID            NAME          REPLICAS  IMAGE  COMMAND
8ejer8lok06o  nginx_sample  0/3       nginx
리플리카 값이 0/3이어서 컨테이너를 아직 가동하지 않았다.
시작 중인 서비스 작업(컨테이너) 상태
docker service ps nginx_sample
ID                         NAME            IMAGE  NODE        DESIRED STATE  CURRENT STATE             ERROR
6tns1opze4dtzjdq7la1rgpvj  nginx_sample.1  nginx  ubuntu-001  Running        Preparing 25 seconds ago  
ei2hww2pdqo4rd114d6sl0tvn  nginx_sample.2  nginx  ubuntu-002  Running        Preparing 25 seconds ago  
b9tvhzi6ln5hcjhnsia6y5uyp  nginx_sample.3  nginx  ubuntu-003  Running        Preparing 25 seconds ago
DESIRED STATE는 런닝이고, CURRENT STATE는 Preptaring이기 때문이다.
아직 시동이 걸리지 않았다.
자세한 내용은 서비스 이름으로 확인할 수 있습니다.
서비스에 대한 자세한 정보 가져오기 (inspect)
docker service inspect nginx_sample
[
    {
        "ID": "1uzck4r361lxi8u3zyaqa6zhf",
        "Version": {
            "Index": 91
        },
        "CreatedAt": "2016-08-13T14:47:54.266023526Z",    # 作成が指示された時刻
        "UpdatedAt": "2016-08-13T14:47:54.269125202Z", # 更新は行っていないのでCreatedAtに等しい
        "Spec": {
            "Name": "nginx_sample",
            "TaskTemplate": {
                "ContainerSpec": {
                    "Image": "nginx"
                },
                "Resources": {
                    "Limits": {},
                    "Reservations": {}
                },
                "RestartPolicy": {
                    "Condition": "any",
                    "MaxAttempts": 0
                },
                "Placement": {}
            },
            "Mode": {
                "Replicated": {
                    "Replicas": 3                                    # 指定したレプリカ数
                }
            },
            "UpdateConfig": {
                "Parallelism": 1,
                "FailureAction": "pause"
            },
            "EndpointSpec": {
                "Mode": "vip",
                "Ports": [
                    {
                        "Protocol": "tcp",
                        "TargetPort": 80,
                        "PublishedPort": 80
                    }
                ]
            }
        },
        "Endpoint": {
            "Spec": {
                "Mode": "vip",
                "Ports": [
                    {
                        "Protocol": "tcp",
                        "TargetPort": 80,
                        "PublishedPort": 80
                    }
                ]
            },
            "Ports": [                   # 指定したポートがオープンされている
                {
                    "Protocol": "tcp",
                    "TargetPort": 80,
                    "PublishedPort": 80
                }
            ],
            "VirtualIPs": [
                {
                    "NetworkID": "27szphefusnj2bdpq0itpfpat",
                    "Addr": "10.255.0.6/16"
                }
            ]
        },
        "UpdateStatus": {
            "StartedAt": "0001-01-01T00:00:00Z",       #サービスが起動中の場合、ここが空に等しいような値になっている
            "CompletedAt": "0001-01-01T00:00:00Z"
        }
    }
]

주의점


Docker Hub과 같은 네트워크에서 이미지를 가져오려면
각 노드가 동시에 인터넷에 접속하기 때문에 네트워크 데이터에 주의해야 한다.

부팅 후 확인


세 개의 Docker 호스트 중 어느 것을 방문하든nginx의 시작 화면을 표시합니다.

서비스가 시작된 상태
docker service ls
ID            NAME          REPLICAS  IMAGE  COMMAND
1uzck4r361lx  nginx_sample  3/3       nginx
REPLICAS는 3/3이며, 묶음에서 지정한 대로 3개의nginx 용기를 시작합니다.
서비스 내 작업(컨테이너)이 시작된 상태
docker service ps nginx_sample
ID                         NAME            IMAGE  NODE        DESIRED STATE  CURRENT STATE          ERROR
dcdngo5ibombyjuqysst4y3gf  nginx_sample.1  nginx  ubuntu-003  Running        Running 8 minutes ago  
bg39i6hrqksfle0xypkpnoouz  nginx_sample.2  nginx  ubuntu-002  Running        Running 8 minutes ago  
4nutgpvioz91oyubtjb9lgzq6  nginx_sample.3  nginx  ubuntu-001  Running        Running 8 minutes ago
노드마다 하나씩nginx 용기를 시작합니다.

시작 후 전체 이미지



서비스 비율 변경


컨테이너 3대가 필요 없다는 것을 알아차렸기 때문에 먼저 입찰을 정했다.
설명은 컨테이너나 노드에서 액세스할 수 있습니다.
서비스 커서 (3개 용기->1개 용기)
docker service scale nginx_sample=1 
nginx_sample scaled to 1
복사본(REPLICA) 수를 3에서 1로 변경합니다.

줌 결과 확인


ls를 통해 확인
docker service ls
ID            NAME          REPLICAS  IMAGE  COMMAND
1uzck4r361lx  nginx_sample  1/1       nginx 
REPLICA의 값은 1/1입니다.
ps를 통해 확인
docker service ps nginx_sample
ID                         NAME            IMAGE  NODE        DESIRED STATE  CURRENT STATE           ERROR
dcdngo5ibombyjuqysst4y3gf  nginx_sample.1  nginx  ubuntu-003  Shutdown       Shutdown 2 minutes ago  
bg39i6hrqksfle0xypkpnoouz  nginx_sample.2  nginx  ubuntu-002  Shutdown       Shutdown 2 minutes ago  
4nutgpvioz91oyubtjb9lgzq6  nginx_sample.3  nginx  ubuntu-001  Running        Running 15 hours ago
ubuntu-002(192.168.1.26), ubuntu-003(192.168.1.29)에서 운행하던 컨테이너가 정지됐다.
nginx의 컨테이너 사태는 ubuntu-001(192.168.1.27)이지만
ubuntu-002/ubuntu-003에 접근하는 어느 것이든nginx 컨테이너로 연결됩니다.
이는 Ingress가 네트워크를 덮어쓰는 덕분입니다.



확대/축소된 전체 이미지



총결산

  • swarm에 서비스를 설정하고 swarm 밖에서 서비스를 방문할 수 있습니다.(-p 80:80)
  • swarm에서 서비스를 구성하는 작업이 최소한 하나 이상 작동하면 각 노드를 통해 접근할 수 있다.(Ingress 덮어쓰기 네트워크)
  • swarm에서 명령을 사용하여 서비스를 축소할 수 있습니다.
  • 좋은 웹페이지 즐겨찾기