1. 程式人生 > >小白學Docker之Swarm

小白學Docker之Swarm

只需要 9.1 虛擬機 config soc 應用程序 post ava not

承接上篇文章:小白學Docker之Compose,自學網站來源於https://docs.docker.com/get-started

系列文章:

  • 小白學Docker之基礎篇
  • 小白學Docker之Compose
  • 小白學Docker之Swarm

概念

Docker Swarm 和 Docker Compose 一樣,都是 Docker 官方容器編排項目,但不同的是,Docker Compose 是一個在單個服務器或主機上創建多個容器的工具,而 Docker Swarm 則可以在多個服務器或主機上創建容器集群服務,對於微服務的部署,顯然 Docker Swarm 會更加適合。

創建一個集群

Mac,Linux,Window7和8虛擬主機安裝

Mac,Linux,Window7和8需要在本地安裝虛擬機來創建虛擬主機,如果你已經配置了Docker Toolbox,那麽就已經安裝了Virtual Box,因此不需要重新安裝

創建完之後運行下面的命令就可以在本地創建虛擬主機了:

docker-machine create --driver virtualbox myvm1
docker-machine create --driver virtualbox myvm2

Windows 10虛擬主機安裝

創建共享虛擬交換機,以便各個虛擬主機能夠相互之間進行連接。

Virtual Switch(vSwitch)相當於一個虛擬的二層交換機,該交換機連接虛擬網卡和物理網卡,將虛擬機上的數據報文從物理網口轉發出去。與物理交換機一樣,vSwitch的作用就是用來轉發數據。

  1. 啟動Hyper-V管理器

技術分享圖片

  1. 進入管理頁面之後,找到右手邊的虛擬交換機管理器

技術分享圖片

  1. 打開管理器,創建虛擬交換機

技術分享圖片

  1. 進行虛擬交換機配置

技術分享圖片

之後執行下面的命令就可以創建虛擬主機了:

docker-machine create -d hyperv --hyperv-virtual-switch "myswitch" myvm1
docker-machine create -d hyperv --hyperv-virtual-switch "myswitch" myvm2 

技術分享圖片

虛擬主機列表以及IP

docker-machine ls

技術分享圖片

初始化集群並且添加節點

將myvm1這臺主機作為集群管理機,將myvm2作為工作節點加入到集群中,使用docker-machine ssh連接到虛擬機,使用docker swarm init來初始化節點。

docker-machine ssh myvm1 "docker swarm init --advertise-addr 10.5.21.30"

技術分享圖片

將myvm2加入到swarm節點

docker-machine ssh myvm2 "docker swarm join --token SWMTKN-1-3k3mev52t5hegvsgoagqhmw05eknp3gbnbe
3qnbk78lenyxmy0-21x31f58ehp323w92tqjqazv6 10.5.21.30:2377"

技術分享圖片

運行docker node ls查看集群中的節點:

docker-machine ssh myvm1 "docker node ls"

技術分享圖片

讓你的shell直接和集群主機對話

進行這個配置之後,就可以直接連接到集群主機了,以前你必須通過ssh先連接到主機執行命令,進行環境配置之後,你就可以直接使用類似docker-machine ls的命令了

Mac,Linux配置

# 1. 運行 docker-machine env myvm1
$ docker-machine env myvm1
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.99.100:2376"
export DOCKER_CERT_PATH="/Users/sam/.docker/machine/machines/myvm1"
export DOCKER_MACHINE_NAME="myvm1"
# Run this command to configure your shell:
# eval $(docker-machine env myvm1)

# 2. 運行上一個命令結果的最後一句
eval $(docker-machine env myvm1)

# 3. 使用docker-machine查看結果
$ docker-machine ls
NAME    ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER        ERRORS
myvm1   *        virtualbox   Running   tcp://192.168.99.100:2376           v17.06.2-ce   
myvm2   -        virtualbox   Running   tcp://192.168.99.101:2376           v17.06.2-ce  

Windows 10配置

> docker-machine env myvm1
docker: 'env' is not a docker command.
See 'docker --help'
PS C:\WINDOWS\system32> docker-machine env myvm1
$Env:DOCKER_TLS_VERIFY = "1"
$Env:DOCKER_HOST = "tcp://10.5.21.30:2376"
$Env:DOCKER_CERT_PATH = "C:\Users\huyh\.docker\machine\machines\myvm1"
$Env:DOCKER_MACHINE_NAME = "myvm1"
$Env:COMPOSE_CONVERT_WINDOWS_PATHS = "true"
# Run this command to configure your shell:
# & "C:\Program Files\Docker\Docker\Resources\bin\docker-machine.exe" env myvm1 | Invoke-Expression

> & "C:\Program Files\Docker\Docker\Resources\bin\docker-machine.exe" env myvm1 | Invoke-Expression

> docker-machine ls
NAME    ACTIVE   DRIVER   STATE     URL                     SWARM   DOCKER        ERRORS
myvm1   *        hyperv   Running   tcp://10.5.21.30:2376           v18.02.0-ce
myvm2   -        hyperv   Running   tcp://10.5.21.31:2376           v18.02.0-ce

技術分享圖片

在集群主機上部署應用程序

同Docker Compose裏面講到的一樣,現在你可以使用下面的命令在集群上部署你的應用了

docker stack deploy -c docker-compose.yml getstartedlab

查看集群中應用的運行情況

docker stack ps getstartedlab

技術分享圖片

在瀏覽器中運行http://10.5.21.30來查看集群的負載情況

技術分享圖片

如果你想增加實例數,只需要在docker-compose.yml中修改replicas的數量,然後直接運行docker stack deploy -c docker-compose.yml getstartedlab即可,不需要摧毀stack和容器。

關閉應用和swarm

# Take the app down with docker stack rm:
docker stack rm getstartedlab

# Take down the swarm.
docker-machine ssh myvm2 "docker swarm leave"
docker-machine ssh myvm1 "docker swarm leave --force"

離開集群主機shell

eval $(docker-machine env -u)

重啟Docker Machine

> $ docker-machine ls
NAME    ACTIVE   DRIVER       STATE     URL   SWARM   DOCKER    ERRORS
myvm1   -        virtualbox   Stopped                 Unknown
myvm2   -        virtualbox   Stopped                 Unknown

> $ docker-machine start myvm1
Starting "myvm1"...
(myvm1) Check network to re-create if needed...
(myvm1) Waiting for an IP...
Machine "myvm1" was started.
Waiting for SSH to be available...
Detecting the provisioner...
Started machines may have new IP addresses. You may need to re-run the `docker-machine env` command.

> $ docker-machine start myvm2
Starting "myvm2"...
(myvm2) Check network to re-create if needed...
(myvm2) Waiting for an IP...
Machine "myvm2" was started.
Waiting for SSH to be available...
Detecting the provisioner...
Started machines may have new IP addresses. You may need to re-run the `docker-machine env` command.

GUI圖形界面管理

使用visualizer或者portainer鏡像來啟動GUI圖形界面服務,這裏使用portainer

  1. 更改docker-compose.yml文件
version: "3"
services:
  web:
    image: rynxiao/get-started:service
    deploy:
      replicas: 5
      resources:
        limits:
          cpus: "0.1"
          memory: 50M
      restart_policy:
        condition: on-failure
    ports:
      - "80:80"
    networks:
      - webnet
  portainer:
    image: portainer/portainer
    ports:
      - "9000:9000"
    volumes: 
      - "//var/run/docker.sock:/var/run/docker.sock" 
    deploy:
      replicas: 1
      placement:
        constraints: [node.role == manager]
networks:
  webnet:
  1. 重啟服務:
docker stack deploy -c docker-compose.yml getstartedlab
  1. 在瀏覽器中輸入http://10.5.21.30:9000

技術分享圖片

參考鏈接

  • https://docs.docker.com/get-started/part4/#restarting-docker-machines
  • http://www.cnblogs.com/xishuai/p/docker-swarm.html

小白學Docker之Swarm