Docker

[Docker] Swarm 서비스 실습 (서비스 관련 명령어)

nang. 2020. 3. 31. 00:49
반응형
SMALL

Swarm Service

  • 서비스
    • 컨테이너 하나 이상의 묶음 단위가 서비스
    • ** 서비스(service) 용어 **
      • docker-compose 파일 & swarm에서의 service
        • 컨테이너들이 모이면 서비스
        • 생성하고자 하는 컨테이너 항목들
        • service 아래 항목들은 하나하나의 컨테이너임
        • 멀티호스트인데 서비스가 별로 많지 않을 때 사용
      • Kubernetes에서의 service
        • 호스트가 여러개일 때 각각의 호스트 네트워크를 묶어주는 것
        • 멀티호스트인데 서비스가 많을 때 사용

13.1 관련 명령어

service 나 stack은 스웜 상태에서만 사용 가능

(스웜 형성된 컨테이너 안에 들어가서만 사용 가능하다는 뜻)

  • 서비스 목록 확인
$ docker service ls
  • 스택 목록 확인
$ docker stack ls
  • 스웜 클러스터 형성 확인
$ docker node ls
  • 스웜 상태 확인
$ docker info
Swarm: active
## active 인 것 확인

13.2 서비스(service) 만들기

  • 매니저에서 docker service create
    • 서비스도 하나의 컨테이너지
      • 컨테이너 하나면 그것도 서비스니까 .. got it?
매니저
$ docker service create --replicas 1 --publish 8000:8080 --name myregistry registry:5000/registry:latest
mzu6e4ogzfpg0netk41i48n0v
overall progress: 1 out of 1 tasks
1/1: running   [==================================================>]
verify: Service converged
$
  • --replicas 1
    • 서비스도 복제가 가능하기에 이 옵션이 존재
      • 동시에 여러 개의 서비스가 작동되게 가능하다는 것
    • 1개 더 복제하겠다.
  • --publish
    • 외부 도커에서 접근 가능하게 포트를 지정할거라는 뜻
    • 외부 도커 8000으로 요청이 들어오면 8080으로 토스
  • --name
    • 서비스의 이름 지정
  • 이미지
    • registry 컨테이너에 등록해 둔 이미지 사용

13.3 실습

이미지 gihyodocker/echo:latest

  • localhost:5050/example/echo:latest 이름으로 tag 생성
  • 도커 레지스트리 registry:5050에 추가(push)
  • manager에서 service 생성
    • replicas > 1개
    • name > echo

13.3.1 이미지 내려받기

윈도우 스웜 폴더에서
$ docker pull gihyodocker/echo:latest

13.3.2 태그 생성

$ docker tag gihyodocker/echo:latest localhost:5050/example/echo:latest

13.3.3 도커 레지스트리(dind)에 이미지 올리기

$ docker push localhost:5050/example/echo:latest

13.3.4 웹브라우저 확인

  • localhost:5050

13.3.5 서비스 만들기

  • 매니저에 접속 후
    • 주의! dind 에서는 localhost 접근 불가
      • dind 끼리 접근해야 함 (registry:5050)
매니저
$ docker service create --replicas 1 --publish 80:8080 --name echo registry:5050/example/echo:latest

13.3.6 서비스 확인

  • 서비스 잘 만들어졌는지 확인
$ docker service ls

13.3.7 웹브라우저 확인

  • localhost:8000

그림 넣기

** 서비스 삭제하기

$ docker service rm <서비스ID>

13.4 컨테이너 프로세스 정보

명령어 별 나오는 정보가 다름

  • 현재 접속 중인 컨테이너를 감싸고 있는 컨테이너(dind)의 정보
    • NODE
      • bbba929897c1
        • 즉, echo 컨테이너를 감싸고 있는 dind 컨테이너의 ID
$ docker service ps <컨테이너이름>
dind - echo
$ docker service ps echo
ID                  NAME                IMAGE                               NODE                DESIRED STATE       CURRENT STATE           ERROR               PORTS
xdpebdciv7sk        echo.1              registry:5000/example/echo:latest   bbba929897c1        Running             Running 6 minutes ago
  • 현재 접속 중인 컨테이너(echo)의 정보
    • CONTAINER ID
      • 45f7f3857a7c
        • 즉, echo 컨테이너의 ID
dind - echo
$ docker ps
CONTAINER ID        IMAGE                               COMMAND                  CREATED             STATUS              PORTS               NAMES
45f7f3857a7c        registry:5000/example/echo:latest   "go run /echo/main.go"   9 minutes ago       Up 9 minutes                            echo.1.xdpebdciv7sknrwhwynptxo1m

13.5 서비스 확장 & 축소

  • 서비스 확장 시키기
매니저
$ docker service scale <서비스이름>=<개수>
$ docker service scale echo=3
## create 할 때 --replicas 1 이였던 걸 3으로 변경하게 됨
ID                  NAME                MODE                REPLICAS            IMAGE                               PORTS
yfdstgo1025w        echo                replicated          3/3                 registry:5000/example/echo:latest   *:80->8080/tcp
## 3/3 확인

$ docker service ps echo
ID                  NAME                IMAGE                               NODE                DESIRED STATE       CURRENT STATE                ERROR               PORTS
xdpebdciv7sk        echo.1              registry:5000/example/echo:latest   bbba929897c1        Running             Running 25 minutes ago
ju00s41jpzdz        echo.2              registry:5000/example/echo:latest   bbba929897c1        Running             Running about a minute ago
igyy2xmfx40h        echo.3              registry:5000/example/echo:latest   bbba929897c1        Running             Running about a minute ago
  • echo 컨테이너를 감싸고 있는 dind 컨테이너는 랜덤 배정
    • 위 상황에서는 모두 bbba929897c1 (매니저) 컨테이너에 설치되었다는 뜻

  • 서비스 축소 시키기
    • 그냥 숫자 줄이면 됨
$ docker service scale echo=2

13.6 서비스 종료

$ docker service rm <서비스명>
  • 서비스명
    • docker service ls 해서 나온 이름

13.7 서비스 안 컨테이너 이름

(1) 서비스 만들 때 붙인 이름

(2) 서비스 아래 컨테이너 이름

(3) 여러 개면 숫자

(1)_(2).(3)

  • todo_nginx.1
반응형
LIST