小白學Docker之Swarm

来源:https://www.cnblogs.com/rynxiao/archive/2018/02/10/8436032.html
-Advertisement-
Play Games

承接上篇文章: "小白學Docker之Compose" ,自學網站來源於 "https://docs.docker.com/get started" 系列文章: "小白學Docker之基礎篇" "小白學Docker之Compose" "小白學Docker之Swarm" 概念 Docker Swarm ...


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

系列文章:

概念

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管理器

docker-Hyper-V

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

switch-manager

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

v-switch

  1. 進行虛擬交換機配置

v-switch-config

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

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

docker-machine-create

虛擬主機列表以及IP

docker-machine ls

docker-machine-ls

初始化集群並且添加節點

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

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

docker-swarm-int

將myvm2加入到swarm節點

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

docker-swarm-node-add

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

docker-machine ssh myvm1 "docker node ls"

docker-swarm-nodels

讓你的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-machine-env

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

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

docker stack deploy -c docker-compose.yml getstartedlab

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

docker stack ps getstartedlab

docker-swarm-deploy

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

docker-swarm-hostname

如果你想增加實例數,只需要在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

docker-gui-portainer

參考鏈接


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 當使用Foundation框架中的類來做更多程式處理工作時,需要一個更有彈性的記憶體管理機制,也就是要使用記憶體釋放池。記憶體釋放池提供了一個對象容器,每次對象發送aotuorelease消息時,對象的引用計數並不真正變化,而是向記憶體釋放池中添加一條記錄,民下對象的這種要求。直到當記憶體釋放池發送drain ...
  • 最近想要實現圖片裁剪的功能,在Github上找到了這個uCrop,star的人挺多的,便是決定入坑,結果長達一個小時的看資料+摸索,終於是在項目中實現了圖片裁剪的功能,今天便是來介紹一下uCrop的使用方法 uCrop 目錄: 配置 流程介紹 使用 配置 1.添加依賴 2.配置Androidmani ...
  • GridView是一種適配器佈局,它的繼承關係是ViewGroup-->AdapterView-->AbsListView-->GridView,他是從一個adapter中取出內容填充到GridView中的每一個子View。 GridLayout是一個佈局,它大大簡化了對複雜佈局的處理,提高了性能。 ...
  • 我們不生產內容,我們只是互聯網的內容搬運工,這是大部分不具備原創能力個人站長的心聲。雖然原創能力不夠,但是服務目標用戶群體依然要清晰、細化和長尾,做的內容對用戶是有用的,而非垃圾。 ...
  • `Lighthouse 頁面性能 PWA 可訪問性(無障礙) 最佳實踐 SEO`。Lighthouse會對各個測試項的結果打分,並給出優化建議,這些打分標準和優化建議可以視為Google的網頁最佳實踐。 使用入門 運行Lighthouse的方式有三種:在開發者工具(Devtools)的Audits, ...
  • // 對Date的擴展,將 Date 轉化為指定格式的String// 月(M)、日(d)、小時(h)、分(m)、秒(s)、季度(q) 可以用 1-2 個占位符, // 年(y)可以用 1-4 個占位符,毫秒(S)只能用 1 個占位符(是 1-3 位的數字) // 例子: // (new Date( ...
  • 自己最近研發了一套新的htmlcss教程,併進行了授課實施,視頻教程百度雲下載鏈接如下: "視頻及案例源碼下載地址" 本套教程視頻需要安裝屏幕錄像專家軟體才能觀看,屏幕錄像專家下載地址如下: "屏幕錄像專家" 本套教程的目標為讓具備初中以上學歷的任何人都可以在短時間內(20個小時)入門網頁製作。 本 ...
  • 背景:最近做了一個網站,傳單伺服器之後,每次打開都是亂碼,不對啊,我在本地測得明明是排版很整齊啊,然後發現,360用的是“相容模式”打開的,這就尷尬了,用戶一打開就是亂碼,這用戶體驗得有多差!用戶可不管你是什麼模式。我研究了一番,終於找到解決辦法。 國內的主流瀏覽器基本都是雙核瀏覽器:基於Webki ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...