Docker Swarm을 사용하여 Hello World 컨테이너를 다중 호스트 환경에서 시작

8066 단어 Docker

개요


Docker 공식 공개 전시 도구 중 하나인 Docker Swarm을 사용하여 여러 호스트를 뛰어넘는 Docker 환경에서 Hello World를 출력하는 컨테이너를 실행합니다

Hello World


Docker 호스트 준비


Docker 호스트 3대core-01, core-02, core-03를 준비합니다.
  • Docker Remote API2375를 모든 포트에서 사용할 수 있음
  • 모든 Docker 버전 1.4.0 이상이고 동일
  • core@core-01 ~ $ docker -v
    Docker version 1.5.0, build a8a31ef-dirty
    
    core@core-02 ~ $ docker -v
    Docker version 1.5.0, build a8a31ef-dirty
    
    core@core-03 ~ $ docker -v
    Docker version 1.5.0, build a8a31ef-dirty
    

    Swarm 설치

    swarm 이미지에 pull
    core@core-01 ~ $ docker pull swarm:latest
    
    core@core-02 ~ $ docker pull swarm:latest
    
    core@core-03 ~ $ docker pull swarm:latest
    

    클러스터 생성


    집단을 이루다.명령을 수행할 수 있는 호스트swarm create
    # at core-01
    core@core-01 ~ $ docker run --rm swarm create
    129c52f89e17cc99bbcb4126f7906d9a
    

    Swarm 에이전트 시작


    모든 호스트에서 swarm 에이전트를 시작합니다.
    # NODE_IP は swarm manager がアクセス可能ならば Public でも Private でも良い
    $ docker run \
        -d \
        swarm \
        join \
          --addr=<NODE_IP:2375> \
          token://<CLUSTER_ID>
    
    core@core-01 ~ $ docker run 
      -d \
      swarm \
      join \
        --addr=172.17.8.102:2375 \
        token://129c52f89e17cc99bbcb4126f7906d9a
    f7905da5377523b349c502c3aa2d8a66ade19896bd9da84115220d325a4deb24
    
    core@core-02 ~ $ docker run 
      -d \
      swarm \
      join \
        --addr=172.17.8.101:2375 \
        token://129c52f89e17cc99bbcb4126f7906d9a
    1f9d34a98272a4482e6923c37e045435bc9d3d61c520613007e6017a32b7d708
    
    core@core-03 ~ $ docker run 
      -d \
      swarm \
      join \
        --addr=172.17.8.103:2375 \
        token://129c52f89e17cc99bbcb4126f7906d9a
    9f95ea43ba7071e8d8cb0039c1f39439c232bed10abd035d1236f24d51ebb212
    

    Swarm 관리자 시작


    어떤 견우라도 가능하기 때문에 swarm 관리자를 만듭니다.
    $ docker run \
        -d \
        -p <SWARM_PORT>:2375 \
        swarm \
        manage \
          token://<cluster_id>
    
    core@core-01 ~ $ docker run \
      -d \
      -p 2377:2375 \
      swarm \
      manage \
        token://129c52f89e17cc99bbcb4126f7906d9a
    69f63a903c27da19a9d13f48cacce9a1d733a3bef2526eab8daaad63055b5807
    
    이렇게 해서 집단 환경이 형성되었다.

    클러스터 Docker 사용


    기존 Docker API 호환 API를 제공하므로 위에서 설명한 대로 docker 명령을 실행할 수 있습니다.
    core@core-01 ~ $ docker -H tcp://localhost:2377 info
    Containers: 4
    Nodes: 3
     core-03: 172.17.8.103:2375
      └ Containers: 1
      └ Reserved CPUs: 0 / 1
      └ Reserved Memory: 0 B / 998 MiB
     core-01: 172.17.8.101:2375
      └ Containers: 2
      └ Reserved CPUs: 0 / 1
      └ Reserved Memory: 0 B / 998 MiB
     core-02: 172.17.8.102:2375
      └ Containers: 1
      └ Reserved CPUs: 0 / 1
      └ Reserved Memory: 0 B / 998 MiB
    
    Hello World
    # クラスタ内のどこかで hello world コンテナを走らせる
    core@core-01 ~ $ docker -H tcp://localhost:2377 run -i busybox:latest echo hello world
    hello world
    
    전체 클러스터ps
    core@core-01 ~ $ docker -H tcp://localhost:2377 ps -a
    CONTAINER ID        IMAGE                       COMMAND                CREATED             STATUS                              PORTS                         NAMES
    a116c414076e        busybox:buildroot-2014.02   "echo hello world"     15 seconds ago      Exited (0) Less than a second ago                                 core-03/condescending_hopper
    69f63a903c27        swarm:latest                "/swarm manage token   5 minutes ago       Up 5 minutes                        172.17.8.101:2377->2375/tcp   core-01/grave_turing
    9f95ea43ba70        swarm:latest                "/swarm join --addr=   9 minutes ago       Up 9 minutes                        2375/tcp                      core-03/trusting_colden
    1f9d34a98272        swarm:latest                "/swarm join --addr=   9 minutes ago       Up 9 minutes                        2375/tcp                      core-02/focused_goodall
    f7905da53775        swarm:latest                "/swarm join --addr=   12 minutes ago      Up 11 minutes                       2375/tcp                      core-01/grave_wozniak
    
    그룹에서 Hello World 용기 삭제
    core@core-01 ~ $ docker -H tcp://localhost:2377 rm a116c414076e
    
    Hello World와 지속적으로 출력되는 컨테이너를 시험적으로 운행해 보다
    core@core-01 ~ $ docker -H tcp://localhost:2377 run \
      -d \
      --name hello \
      busybox:latest \
      /bin/sh -c "while true; do echo hello world; sleep 1; done"
    347de1fa81d97aa45451353efbd9a08e7f8f800fe4590bdeefec1d91c6c1edf5
    
    logs
    core@core-01 ~ $ docker -H tcp://localhost:2377 logs -f hello
    hello world
    hello world
    hello world
    hello world
    hello world
    
    컨테이너 이름은 그룹 내에서 유일하기 때문에 같은 이름을 가진 컨테이너를 시작하려면 오류가 발생합니다.
    core@core-01 ~ $ docker -H tcp://localhost:2377 run -d --name hello busybox:latest echo hello
    FATA[0000] Error response from daemon: Conflict, The name hello is already assigned to 347de1fa81d97aa45451353efbd9a08e7f8f800fe4590bdeefec1d91c6c1edf5. You have to delete (or rename) that container to be able to assign hello to a container again.
    
    전체 클러스터 이미지 목록견우 한 명씩 보고 싶어서 아쉬운데?
    core@core-01 ~ $ docker -H tcp://localhost:2377 images | grep busybox | sort
    busybox                                      latest                4986bf8c1536        8 weeks ago         2.43 MB
    busybox                                      latest                4986bf8c1536        8 weeks ago         2.43 MB
    
    # pull はできないもよう
    core@core-01 ~ $ docker -H tcp://localhost:2377 pull busybox
    FATA[0000] Error: Not supported in clustering mode.
    
    집단 내의 기계 목록을 봐라.
    core@core-01 ~ $ docker run --rm swarm list token://129c52f89e17cc99bbcb4126f7906d9a
    172.17.8.102:2375
    172.17.8.101:2375
    172.17.8.103:2375
    

    REF

  • 공식 문서
  • Docker Swarm 참조
  • 좋은 웹페이지 즐겨찾기