Installing a Docker Swarm cluster inside VirtualBox with Docker Machin…

1 Abstract

이 문서에서는 VirtualBox에 Docker Swarm, 간단한 도커 컨테이너 오케스트레이터를 실험 할 수있는 설정에 대해 설명합니다.

이를 통해 실제 컴퓨터에 도커를 설치하지 않고 오케스트레이션 장면을 재생할 수 있습니다.

또한 실험실의 호스트에 도커를 설치하지 않으려는 경우 이러한 환경을 유용하게 사용할 수 있습니다. 권한이없는 사용자를 위해 Linux 호스트에 docker 엔진을 설치하려면 기본 구성으로 인해 학습자가 쉽게 루트 권한을 얻을 수 있으므로주의가 필요합니다 (Docker 보안 관련 문서 참조).

이것은 데비안 GNU / 리눅스 시스템에서 테스트되었지만 대부분의 주요 OS에서 포팅 된 Docker Machine, docker 클라이언트 및 VirtualBox에 의존하기 때문에 Windows 또는 Mac OSX 시스템에서 비슷하게 작동 할 것으로 기대합니다 .

내 시스템에서 발생하는 실행의 흔적을 아래에 제공하여 결과를 비교하고 문제 발생시 의미있는 차이점을 발견 할 수 있도록했습니다. 그러나 일부 추적은 org-mode의 babel 버그로 인해 현재로서는 올바르지 않습니다. 죄송합니다.

2 Install Docker Machine

Docker Machine을 사용하여 VirtualBox에서 가상 시스템을 프로비저닝하여 Docker Swarm 클러스터에 전원을 공급할 시스템의 클러스터를 시뮬레이션합니다.

그러나 우리는 도커 클라이언트도 사용할 것입니다.

2.1 Install Docker CE

이것은 다른 버전에서도 작동 할 수 있으며 여기의 지시 사항은 데비안 시스템에 적용됩니다. YMMV.

Docker CE (Community Edition)는 Docker의 "late"버전입니다 (데비안 패키지는 오래된 버전이거나 누락 된 패키지입니다).

https://docs.docker.com/engine/installation/linux/debian/에서 제공되는 지침을 수행합니다.

2.1.1 Uninstall previous installations of Docker (if needed)

공식적인 데비안 패키지에서 Docker를 이미 테스트했을 경우를 대비해서 선택적인 단계입니다.

sudo apt-get remove docker docker-engine
ou
sudo apt-get remove docker.io

2.1.2 Install Docker CE

이것은 데비안 또는 우분투 시스템에서 작동해야하지만, 아키텍처의 차이에주의하십시오 (시스템은 64 비트입니다 ...).

sudo apt-get install \
     apt-transport-https \
     ca-certificates \
     curl \
     gnupg2 \
     software-properties-common
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/debian \
   $(lsb_release -cs) \
   stable"
sudo apt-get update
sudo apt-get install docker-ce

2.1.3 Testing the local installation

모든 것이 로컬에서 작동하면 (즉, 호스트에서 작동하는 docker 데몬으로) 다음과 같이 작동합니다.

docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world

[1A[2K
78445dd45222: Pulling fs layer 
[1B[1A[2K
78445dd45222: Downloading    971 B/971 B
[1B[1A[2K
78445dd45222: Download complete 
[1B[1A[2K
78445dd45222: Extracting    971 B/971 B
[1B[1A[2K
78445dd45222: Extracting    971 B/971 B
[1B[1A[2K
78445dd45222: Pull complete 
[1BDigest: sha256:c5515758d4c5e1e838e9cd307f6c6a0d620b5e07e6f927b07d05f6d12a1ac8d7
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://cloud.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/engine/userguide/

2.2 Install Docker Machine

Docker Machine은 Docker 클러스터의 실행 노드 (컴퓨터)를 VirtualBox Virtual Machines (VM)로 프로비저닝합니다. 이를 통해 우리는 (2) 도커 노드로 구성된 가상 미니 클러스터를 구축 할 수 있습니다.

현재 디렉토리 내에서 실행 가능한 도커 - 머신 실행 파일을 사용할 것입니다 (/ usr / local / bin /을 오염시킬 필요가 없습니다).

wget -q https://github.com/docker/machine/releases/download/v0.10.0/docker-machine-`uname -s`-`uname -m`
chmod +x docker-machine-Linux-x86_64

그것이 작동하는지 확인하십시오 :

./docker-machine-Linux-x86_64 version
docker-machine-Linux-x86_64 version 0.10.0, build 76ed2a6

2.2.1 Test Docker Machine

우리는 그것이 VirtualBox와 함께 작동하는지 테스트 할 것입니다. 우리는 여기서 VirtualBox를 설치하는 과정을 다루지 않습니다. 다음은 VirtualBox의 기본 설치와 함께 작동합니다 (문제를보고하십시오)

./docker-machine-Linux-x86_64 create --driver virtualbox default
Running pre-create checks...
(default) Default Boot2Docker ISO is out-of-date, downloading the latest release...
(default) Latest release for github.com/boot2docker/boot2docker is v17.05.0-ce
(default) Downloading /home/olivier/.docker/machine/cache/boot2docker.iso from https://github.com/boot2docker/boot2docker/releases/download/v17.05.0-ce/boot2docker.iso...
....10%....20%....30%....40%....50%....60%....70%....80%....90%....100%
Creating machine...
(default) Copying /home/olivier/.docker/machine/cache/boot2docker.iso to /home/olivier/.docker/machine/machines/default/boot2docker.iso...
(default) Creating VirtualBox VM...
(default) Creating SSH key...
(default) Starting the VM...
(default) Check network to re-create if needed...
(default) Waiting for an IP...
Waiting for machine to be running, this may take a few minutes...
Detecting operating system of created instance...
Waiting for SSH to be available...
Detecting the provisioner...
Provisioning with boot2docker...
Copying certs to the local machine directory...
Copying certs to the remote machine...
Setting Docker configuration on the remote daemon...
Checking connection to Docker...
Docker is up and running!
To see how to connect your Docker Client to the Docker Engine running on this virtual machine, run: ./docker-machine-Linux-x86_64 env default

머쉰이 있는지 확인하십시오. VirtualBox GUI를 실행하여 실행 중인지 확인할 수도 있습니다.

./docker-machine-Linux-x86_64 ls
NAME      ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER        ERRORS
default   -        virtualbox   Running   tcp://192.168.99.100:2376           v17.05.0-ce

이제는 호스트 대신 해당 VM 노드에서 도커를 실행하는 데 사용해야하는 환경 변수를 설정해야합니다.

다음 변수 값을 확인하십시오.

./docker-machine-Linux-x86_64 env default

여기서 다른 출력을보아야합니다 (org-mode 버그).

export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.99.100:2376"
export DOCKER_CERT_PATH="/home/olivier/.docker/machine/machines/default"
export DOCKER_MACHINE_NAME="default"
Run this command to configure your shell:
eval $(./docker-machine-Linux-x86_64 env default)

그리고 당신에게 주어진 평가에 대한 조언을 따르십시오.

eval $(./docker-machine-Linux-x86_64 env default)

이제 안전하게 테스트 할 수 있습니다.

docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world

[1A[2K
78445dd45222: Pulling fs layer 
[1B[1A[2K
78445dd45222: Downloading    971 B/971 B
[1B[1A[2K
78445dd45222: Verifying Checksum 
[1B[1A[2K
78445dd45222: Download complete 
[1B[1A[2K
78445dd45222: Extracting    971 B/971 B
[1B[1A[2K
78445dd45222: Extracting    971 B/971 B
[1B[1A[2K
78445dd45222: Pull complete 
[1BDigest: sha256:c5515758d4c5e1e838e9cd307f6c6a0d620b5e07e6f927b07d05f6d12a1ac8d7
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://cloud.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/engine/userguide/

차이는 없지만 실행은 VM 내부에서 발생했습니다. 이것은 모두 사용자에게 투명해야합니다. 물론 성능은 동일하지 않습니다.

2.2.2 Troubleshooting

호스트에 엄격한 방화벽을 설정 한 경우 VM 연결 문제가 발생할 수 있습니다.

Docker Machine은 docker-machine이 SSH (기본값은 docker-machine ssh)를 통해 연결할 수있는 VirtualBox에서 VM을 인스턴스화 할 수 있지만 docker 클라이언트는 VM의 포트 2376을 통해 docker 데몬과 통신 할 수 없습니다.

다음과 같은 명령을 시도 할 수 있습니다.

iptables -A INPUT -p tcp --dport 2376 -j ACCEPT

Swarm 모드 (아래 참조)를 사용하려면 트래픽을 포트 3376으로 전달해야합니다.

3 Configuring a Swarm cluster on VirtualBox nodes.

이제 Docker Machine이 VirtualBox에 노드를 성공적으로 배포 할 수있게되었으므로 여러 가지 VM을 클러스터 노드로 사용하여 Docker Swarm 클러스터를 테스트합니다.

Docker Machine을 사용하여 집단 클러스터 제공에 대한 지침을 따릅니다. (더 최근의 지침이있을 수 있지만 작성 당시에는 효과가있었습니다.)

먼저 클러스터라고 불리는 클러스터에 참여하지 않는 독립형 노드를 만듭니다 (이 단계가 필요하지는 않습니다. 개선을 제안하십시오).

./docker-machine-Linux-x86_64 create -d virtualbox local
$ Running pre-create checks...
[::1]:53: read: connection refused
Creating machine...
[::1]:53: read: connection refused
(local) Copying /home/olivier/.docker/machine/cache/boot2docker.iso to /home/olivier/.docker/machine/machines/local/boot2docker.iso...
(local) Creating VirtualBox VM...
(local) Creating SSH key...
(local) Starting the VM...
(local) Check network to re-create if needed...
(local) Waiting for an IP...
Waiting for machine to be running, this may take a few minutes...
Detecting operating system of created instance...
Waiting for SSH to be available...
Detecting the provisioner...
Provisioning with boot2docker...
Copying certs to the local machine directory...
Copying certs to the remote machine...
Setting Docker configuration on the remote daemon...
Checking connection to Docker...
Docker is up and running!
To see how to connect your Docker Client to the Docker Engine running on this virtual machine, run: ./docker-machine-Linux-x86_64 env local

이제 호스트의 docker 데몬 대신 VirtualBox 게스트 내부에서 컨테이너를 실행하기위한 환경을 설정합니다. 이전과 비슷한 지침 :

./docker-machine-Linux-x86_64 env local
echo
eval "$(./docker-machine-Linux-x86_64 env local)"
echo
env | grep -i docker
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.99.100:2376"
export DOCKER_CERT_PATH="/home/olivier/.docker/machine/machines/local"
export DOCKER_MACHINE_NAME="local"
Run this command to configure your shell:
eval $(./docker-machine-Linux-x86_64 env local)

$
DOCKER_TLS_VERIFY=1
DOCKER_MACHINE_NAME=local
DOCKER_CERT_PATH=/home/olivier/.docker/machine/machines/local
DOCKER_HOST=tcp://192.168.99.100:2376

이제 Docker Swarm "discovery service"(Swarm 클러스터를 시작하는 다른 방법이있을 수 있음)를 통해 "발견 토큰"이라고도하는 Swarm ID를 생성 할 시간입니다. 이는 (로컬 노드 내부의) 떼제 컨테이너를 "실행"함으로써 수행됩니다.

docker run swarm create
Unable to find image 'swarm:latest' locally
latest: Pulling from library/swarm

[1A[2K
ebe0176dcf9a: Pulling fs layer 
[1B
[1A[2K
19f771faa982: Pulling fs layer 
[1B
[1A[2K
902eeedf931a: Pulling fs layer 
[1B[1A[2K
902eeedf931a: Downloading    125 B/125 B
[1B[1A[2K
902eeedf931a: Verifying Checksum 
[1B[1A[2K
902eeedf931a: Download complete 
[1B[2A[2K
19f771faa982: Downloading 16.38 kB/157.8 kB
[2B[2A[2K
19f771faa982: Downloading 157.8 kB/157.8 kB
[2B[2A[2K
19f771faa982: Verifying Checksum 
[2B[2A[2K
19f771faa982: Download complete 
[2B[3A[2K
ebe0176dcf9a: Downloading 49.15 kB/4.309 MB
[3B[3A[2K
ebe0176dcf9a: Downloading 457.9 kB/4.309 MB
[3B[3A[2K
ebe0176dcf9a: Downloading 949.4 kB/4.309 MB
[3B[3A[2K
ebe0176dcf9a: Downloading 1.392 MB/4.309 MB
[3B[3A[2K
ebe0176dcf9a: Downloading 1.883 MB/4.309 MB
[3B[3A[2K
ebe0176dcf9a: Downloading 2.473 MB/4.309 MB
[3B[3A[2K
ebe0176dcf9a: Downloading 3.014 MB/4.309 MB
[3B[3A[2K
ebe0176dcf9a: Downloading 3.505 MB/4.309 MB
[3B[3A[2K
ebe0176dcf9a: Downloading 4.046 MB/4.309 MB
[3B[3A[2K
ebe0176dcf9a: Verifying Checksum 
[3B[3A[2K
ebe0176dcf9a: Download complete 
[3B[3A[2K
ebe0176dcf9a: Extracting 65.54 kB/4.309 MB
[3B[3A[2K
ebe0176dcf9a: Extracting 2.163 MB/4.309 MB
[3B[3A[2K
ebe0176dcf9a: Extracting  4.26 MB/4.309 MB
[3B[3A[2K
ebe0176dcf9a: Extracting 4.309 MB/4.309 MB
[3B[3A[2K
ebe0176dcf9a: Extracting 4.309 MB/4.309 MB
[3B[3A[2K
ebe0176dcf9a: Pull complete 
[3B[2A[2K
19f771faa982: Extracting 32.77 kB/157.8 kB
[2B[2A[2K
19f771faa982: Extracting 157.8 kB/157.8 kB
[2B[2A[2K
19f771faa982: Extracting 157.8 kB/157.8 kB
[2B[2A[2K
19f771faa982: Pull complete 
[2B[1A[2K
902eeedf931a: Extracting    125 B/125 B
[1B[1A[2K
902eeedf931a: Extracting    125 B/125 B
[1B[1A[2K
902eeedf931a: Pull complete 
[1BDigest: sha256:815fc8fd4617d866e1256999c2c0a55cc8f377f3dade26c3edde3f0543a70c04
Status: Downloaded newer image for swarm:latest
0360ff24c3119a7e1cadd439db981233

마지막 줄에 표시된 토큰을 복사하여 환경 변수 ($ discotoken)로 저장하십시오.

export discotoken=0360ff24c3119a7e1cadd439db981233

이제 Swarm 클러스터 (swarm-manager 머신)에 첫 번째 (마스터) 노드를 추가하고 저장된 토큰 (--swarm-discovery 토큰 : // $ discotoken)을 재사용합니다.

./docker-machine-Linux-x86_64 create     -d virtualbox     --swarm     --swarm-master     --swarm-discovery token://$discotoken     swarm-manager
$ Running pre-create checks...
Creating machine...
(swarm-manager) Copying /home/olivier/.docker/machine/cache/boot2docker.iso to /home/olivier/.docker/machine/machines/swarm-manager/boot2docker.iso...
(swarm-manager) Creating VirtualBox VM...
(swarm-manager) Creating SSH key...
(swarm-manager) Starting the VM...
(swarm-manager) Check network to re-create if needed...
(swarm-manager) Waiting for an IP...
Waiting for machine to be running, this may take a few minutes...
Detecting operating system of created instance...
Waiting for SSH to be available...
Detecting the provisioner...
Provisioning with boot2docker...
Copying certs to the local machine directory...
Copying certs to the remote machine...
Setting Docker configuration on the remote daemon...
Configuring swarm...
Checking connection to Docker...
Docker is up and running!
To see how to connect your Docker Client to the Docker Engine running on this virtual machine, run: ./docker-machine-Linux-x86_64 env swarm-manager

그런 다음 다른 노드 (node-01)를 추가합니다.

./docker-machine-Linux-x86_64 create \
    -d virtualbox \
    --swarm \
    --swarm-discovery token://$discotoken \
    node-01
$ > > > > Running pre-create checks...
Creating machine...
(node-01) Copying /home/olivier/.docker/machine/cache/boot2docker.iso to /home/olivier/.docker/machine/machines/node-01/boot2docker.iso...
(node-01) Creating VirtualBox VM...
(node-01) Creating SSH key...
(node-01) Starting the VM...
(node-01) Check network to re-create if needed...
(node-01) Waiting for an IP...
Waiting for machine to be running, this may take a few minutes...
Detecting operating system of created instance...
Waiting for SSH to be available...
Detecting the provisioner...
Provisioning with boot2docker...
Copying certs to the local machine directory...
Copying certs to the remote machine...
Setting Docker configuration on the remote daemon...
Configuring swarm...
Checking connection to Docker...
Docker is up and running!
To see how to connect your Docker Client to the Docker Engine running on this virtual machine, run: ./docker-machine-Linux-x86_64 env node-01

이제 사용 가능한 컴퓨터를 확인해 봅시다.

./docker-machine-Linux-x86_64 ls
NAME            ACTIVE   DRIVER       STATE     URL                         SWARM                    DOCKER        ERRORS
local           *        virtualbox   Running   tcp://192.168.99.100:2376                            v17.05.0-ce   
node-01         -        virtualbox   Running   tcp://192.168.99.102:2376   swarm-manager            v17.05.0-ce   
swarm-manager   -        virtualbox   Running   tcp://192.168.99.101:2376   swarm-manager (master)   v17.05.0-ce

방금 생성 된 Swarm 클러스터를 통한 배포가 가능하도록 환경을 설정할 수 있습니다.

./docker-machine-Linux-x86_64 env --swarm swarm-manager
echo
eval "$(./docker-machine-Linux-x86_64 env --swarm swarm-manager)"
echo
env | grep -i docker
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.99.101:3376"
export DOCKER_CERT_PATH="/home/olivier/.docker/machine/machines/swarm-manager"
export DOCKER_MACHINE_NAME="swarm-manager"
Run this command to configure your shell:
eval $(./docker-machine-Linux-x86_64 env --swarm swarm-manager)

$
DOCKER_TLS_VERIFY=1
DOCKER_MACHINE_NAME=swarm-manager
DOCKER_CERT_PATH=/home/olivier/.docker/machine/machines/swarm-manager
DOCKER_HOST=tcp://192.168.99.101:3376

그런 다음 해당 클러스터의 특성을 확인하십시오 (클러스터에 2 개의 노드가 나타나기 전에 약간 기다려야 할 수도 있음).

docker info
echo
docker ps -a


Containers: 3
 Running: 3
 Paused: 0
 Stopped: 0
Images: 2
Server Version: swarm/1.2.6
Role: primary
Strategy: spread
Filters: health, port, containerslots, dependency, affinity, constraint, whitelist
Nodes: 2
 node-01: 192.168.99.102:2376
  └ ID: UEQP:ZLT5:TAY6:AB5F:KCAY:M6UD:IJN3:XS25:UHLS:M7FX:EQ5J:LDRC
  └ Status: Healthy
  └ Containers: 1 (1 Running, 0 Paused, 0 Stopped)
  └ Reserved CPUs: 0 / 1
  └ Reserved Memory: 0 B / 1.021 GiB
  └ Labels: kernelversion=4.4.66-boot2docker, operatingsystem=Boot2Docker 17.05.0-ce (TCL 7.2); HEAD : 5ed2840 - Fri May  5 21:04:09 UTC 2017, provider=virtualbox, storagedriver=aufs
  └ UpdatedAt: 2017-05-12T08:17:52Z
  └ ServerVersion: 17.05.0-ce
 swarm-manager: 192.168.99.101:2376
  └ ID: E233:ZWMB:ZEBR:CP5Y:NZZU:FK4R:LJBR:MC4M:POLZ:2JNM:4WOC:BXFL
  └ Status: Healthy
  └ Containers: 2 (2 Running, 0 Paused, 0 Stopped)
  └ Reserved CPUs: 0 / 1
  └ Reserved Memory: 0 B / 1.021 GiB
  └ Labels: kernelversion=4.4.66-boot2docker, operatingsystem=Boot2Docker 17.05.0-ce (TCL 7.2); HEAD : 5ed2840 - Fri May  5 21:04:09 UTC 2017, provider=virtualbox, storagedriver=aufs
  └ UpdatedAt: 2017-05-12T08:18:32Z
  └ ServerVersion: 17.05.0-ce
Plugins: 
 Volume: 
 Network: 
Swarm: 
 NodeID: 
 Is Manager: false
 Node Address: 
Kernel Version: 4.4.66-boot2docker
Operating System: linux
Architecture: amd64
CPUs: 2
Total Memory: 2.042 GiB
Name: 8633e84fff15
Docker Root Dir: 
Debug Mode (client): false
Debug Mode (server): false
WARNING: No kernel memory limit support
Experimental: false
Live Restore Enabled: false

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                     NAMES
5881290b472c        swarm:latest        "/swarm join --adv..."   2 minutes ago       Up 2 minutes        2375/tcp                                  node-01/swarm-agent
c648e8b7e7b6        swarm:latest        "/swarm join --adv..."   5 minutes ago       Up 5 minutes        2375/tcp                                  swarm-manager/swarm-agent
3376/tcp   swarm-manager/swarm-agent-master

이제 클러스터에 컨테이너를 안전하게 배포 할 수 있습니다.

docker run hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://cloud.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/engine/userguide/

3.1 Special case for users with homes over NFS

연구실 컴퓨터는 NFS를 통해 사용자 주택을 마운트합니다. 즉, 사용자의 Docker 디렉토리는 Docker Machine에서 노드 저장을 위해 사용하는 ~ / .docker / machine /을 포함하여 실제로 컴퓨터간에 공유됩니다.

Docker Machine에 의한 노드 인스턴스는 기본 dir 대신에 호스트의 로컬 파일 시스템에서 더 잘 수행 될 수 있습니다. 기본 dir은 기본 boot2docker.iso 파일을 NFS를 통해 여러 번 저장합니다. 마찬가지로 노드의 .vmdk 저장소가 NFS에있는 경우 공간 및 성능 문제가 발생할 수 있습니다.

또한 동일한 사용자와 병렬로 여러 컴퓨터에서 동일한 명령을 동시에 시도하지 않도록주의하십시오. 그렇지 않으면 docker-machine은 다른 VirtualBox 가상화 프로그램에서 실행되는 다른 노드를 구분할 수는 없지만 동일한 가상 노드를 지정합니다.

즉, 기본 디스크 $ HOME / .docker / machine을 사용하지 않도록 로컬 디스크의 값 (/ tmp 어쩌면?)에 MACHINE_STORAGE_PATH를 전역으로 설정할 수 있습니다. 또는 docker-machine 명령에 --storage-path / -s 옵션을 제공 할 수도 있습니다.

4 Bonus step: Install Portainer monitoring

Portainer라고하는 Swarm 클러스터를 모니터링 할 수 있도록 웹 대시 보드를 설치합니다.

4.1 Install client certificates in the Swarm manager node

클러스터에서 마스터 도커 노드의 IP 주소를 확인합니다 (swarm-manager).

./docker-machine-Linux-x86_64 ip swarm-manager
192.168.99.101

그것을 env에 저장하십시오. 변수 ($ managerip).

export managerip=192.168.99.101

cert를 사용하여 TLS를 통해 클러스터의 Docker API에 성공적으로 연결할 수 있는지 테스트 할 수 있습니다.

curl "https://$managerip:3376/images/json" --cert $DOCKER_CERT_PATH/cert.pem --key $DOCKER_CERT_PATH/key.pem --cacert $DOCKER_CERT_PATH/ca.pem
$ [{"Containers":-1,"Created":1484706726,"Id":"sha256:36b1e23becabc0b27c5787712dce019982c048665fd9e7e6cb032a46bcac510d","Labels":{},"ParentId":"","RepoDigests":["swarm@sha256:815fc8fd4617d866e1256999c2c0a55cc8f377f3dade26c3edde3f0543a70c04"],"RepoTags":["swarm:latest"],"SharedSize":-1,"Size":15852351,"VirtualSize":15852351},{"Containers":-1,"Created":1484347856,"Id":"sha256:48b5124b2768d2b917edcb640435044a97967015485e812545546cbed5cf0233","Labels":{},"ParentId":"","RepoDigests":["hello-world@sha256:c5515758d4c5e1e838e9cd307f6c6a0d620b5e07e6f927b07d05f6d12a1ac8d7"],"RepoTags":["hello-world:latest"],"SharedSize":-1,"Size":1840,"VirtualSize":1840}]

이제 인증서를 복사하고 파일을 마스터 노드에 연결합니다.

./docker-machine-Linux-x86_64 ssh swarm-manager rm -fr /home/docker/client-certs
./docker-machine-Linux-x86_64 ssh swarm-manager mkdir /home/docker/client-certs
./docker-machine-Linux-x86_64 scp $DOCKER_CERT_PATH/cert.pem swarm-manager:client-certs/cert.pem
./docker-machine-Linux-x86_64 scp $DOCKER_CERT_PATH/key.pem swarm-manager:client-certs/key.pem
./docker-machine-Linux-x86_64 scp $DOCKER_CERT_PATH/ca.pem swarm-manager:client-certs/ca.pem
$ $ 
cert.pem                                        0%    0     0.0KB/s   --:-- ETA
cert.pem                                      100% 1078     3.4MB/s   00:00
key.pem                                         0%    0     0.0KB/s   --:-- ETA
key.pem                                       100% 1679     1.3MB/s   00:00
ca.pem                                          0%    0     0.0KB/s   --:-- ETA
ca.pem                                        100% 1038     2.7MB/s   00:00

이제 클러스터에 대한 연결이 TLS를 통해 마스터 노드의 내부에서 실제로 작동하는지 확인합니다.

./docker-machine-Linux-x86_64 ssh swarm-manager docker --tlsverify --tlscacert=/home/docker/client-certs/ca.pem --tlscert=/home/docker/client-certs/cert.pem --tlskey=/home/docker/client-certs/key.pem -H "tcp://$managerip:3376" info
$ Containers: 5
 Running: 3
 Paused: 0
 Stopped: 2
Images: 4
Server Version: swarm/1.2.6
Role: primary
Strategy: spread
Filters: health, port, containerslots, dependency, affinity, constraint, whitelist
Nodes: 2
 node-01: 192.168.99.102:2376
  └ ID: UEQP:ZLT5:TAY6:AB5F:KCAY:M6UD:IJN3:XS25:UHLS:M7FX:EQ5J:LDRC
  └ Status: Healthy
  └ Containers: 2 (1 Running, 0 Paused, 1 Stopped)
  └ Reserved CPUs: 0 / 1
  └ Reserved Memory: 0 B / 1.021 GiB
  └ Labels: kernelversion=4.4.66-boot2docker, operatingsystem=Boot2Docker 17.05.0-ce (TCL 7.2); HEAD : 5ed2840 - Fri May  5 21:04:09 UTC 2017, provider=virtualbox, storagedriver=aufs
  └ UpdatedAt: 2017-05-12T08:27:30Z
  └ ServerVersion: 17.05.0-ce
 swarm-manager: 192.168.99.101:2376
  └ ID: E233:ZWMB:ZEBR:CP5Y:NZZU:FK4R:LJBR:MC4M:POLZ:2JNM:4WOC:BXFL
  └ Status: Healthy
  └ Containers: 3 (2 Running, 0 Paused, 1 Stopped)
  └ Reserved CPUs: 0 / 1
  └ Reserved Memory: 0 B / 1.021 GiB
  └ Labels: kernelversion=4.4.66-boot2docker, operatingsystem=Boot2Docker 17.05.0-ce (TCL 7.2); HEAD : 5ed2840 - Fri May  5 21:04:09 UTC 2017, provider=virtualbox, storagedriver=aufs
  └ UpdatedAt: 2017-05-12T08:27:53Z
  └ ServerVersion: 17.05.0-ce
Plugins: 
 Volume: 
 Network: 
Swarm: 
 NodeID: 
 Is Manager: false
 Node Address: 
Kernel Version: 4.4.66-boot2docker
Operating System: linux
Architecture: amd64
CPUs: 2
Total Memory: 2.042GiB
Name: 8633e84fff15
Docker Root Dir: 
Debug Mode (client): false
Debug Mode (server): false
Experimental: false
Live Restore Enabled: false

WARNING: No kernel memory limit support

이제 마스터 노드에 Portainer 컨테이너를 배포하여 전체 클러스터를 모니터링 할 수 있습니다.

./docker-machine-Linux-x86_64 ssh swarm-manager docker run -d -p 9000:9000 -v /home/docker/client-certs/:/client-certs portainer/portainer -H tcp://$managerip:3376 --tlsverify --tlscacert=/client-certs/ca.pem --tlscert=/client-certs/cert.pem --tlskey=/client-certs/key.pem
$ Unable to find image 'portainer/portainer:latest' locally
latest: Pulling from portainer/portainer
a3ed95caeb02: Pulling fs layer
802d894958a2: Pulling fs layer
a64eb441970e: Pulling fs layer
802d894958a2: Verifying Checksum
802d894958a2: Download complete
a3ed95caeb02: Verifying Checksum
a3ed95caeb02: Download complete
a3ed95caeb02: Pull complete
802d894958a2: Pull complete
a64eb441970e: Verifying Checksum
a64eb441970e: Download complete
a64eb441970e: Pull complete
Digest: sha256:40bf7e42c9cd4b95ab70b9eca8c9b772e7ef65e78fa094ccb6f745e117b5237c
Status: Downloaded newer image for portainer/portainer:latest
b8ae2beee71adb371339f3824e7df044ae4ca2e2def5d4124dc403ffdcb0a537

그리고 모든 것이 작동하면 다음과 같은 결과를 얻습니다.

docker ps
CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS              PORTS                           NAMES
9000/tcp   swarm-manager/nostalgic_keller

이제 원하는 브라우저에서 http://$managerip:9000/에 연결할 수 있으며 관리자 비밀번호를 생성 한 후에는 Swarm 가상 클러스터를 모니터링 할 수 있습니다.

Portainer의 웹 인터페이스는 왼쪽 열에 Swarm 항목을 표시해야하며 이것이 작동한다는 것을 증명합니다.

5 Cleanup

./docker-machine-Linux-x86_64 kill node-01
./docker-machine-Linux-x86_64 rm -f node-01
./docker-machine-Linux-x86_64 kill swarm-manager
./docker-machine-Linux-x86_64 rm -f swarm-manager
./docker-machine-Linux-x86_64 kill local
./docker-machine-Linux-x86_64 rm -f local
./docker-machine-Linux-x86_64 kill default
./docker-machine-Linux-x86_64 rm -f default
Killing "node-01"...
Machine "node-01" was killed.
About to remove node-01
WARNING: This action will delete both local reference and remote instance.
Successfully removed node-01
Killing "swarm-manager"...
Machine "swarm-manager" was killed.
About to remove swarm-manager
WARNING: This action will delete both local reference and remote instance.
Successfully removed swarm-manager

6 About this document

이 문서는 Org-Mode를 사용하여 Literate DevOps 접근 방식을 사용하여 작성되었습니다.

최신 출처 : https://gitlab.com/olberger/experiments/tree/master

7 Todo

  1. 2 개의 문서의 병합 결과 인 기본값과 로컬 병합 : 정당화 없음
  2. 지역이 다른 것으로 대체 될 수 있는지 여부를 확인하십시오.
  3. org 모드 바벨 수정
  4. 배치 등을 보여주는 클러스터 테스트 문서화


각주 :
1. "공식적인"패키지의 개념은 당신의 관점과 관련이 있습니다. 필자는 데비안 개발자로서 공식 데비안 패키지를 debian.org의 데비안 프로젝트가 제공하는 패키지로 간주합니다. 다른 사람들은 Docker Inc (또는 신뢰할 수있는 제 3 자)가 dpkg (.deb 형식)로 설치하여 데비안과 호환되도록 공식 (도커) 패키지를 제공한다고 생각할 수 있습니다.
2.소스 저장소에 대한 포인터는이 문서 정보를 참조하십시오.


Comments

글이 없습니다.
글이 없습니다.
반응형 구글광고 등
State
  • 현재 접속자 7 명
  • 오늘 방문자 16 명
  • 어제 방문자 189 명
  • 최대 방문자 420 명
  • 전체 방문자 105,027 명
  • 전체 게시물 333 개
  • 전체 댓글수 2 개
  • 전체 회원수 31 명
Facebook Twitter GooglePlus KakaoStory NaverBand