容器編排Docker-Compose少不了

来源:https://www.cnblogs.com/jiagooushi/archive/2022/08/25/16624758.html
-Advertisement-
Play Games

docker-compose容器編排 為什麼使用docker-compose ​ 我們學會了使用 dockerfile 構建 docker 鏡像,看起來已經能夠滿足我們的日常需求了,無論需要什麼環境,在 dockerfile 里逐步構建,然後 build、run,就 ok 了,也滿足了我們docke ...


docker-compose容器編排

file

為什麼使用docker-compose

​ 我們學會了使用 dockerfile 構建 docker 鏡像,看起來已經能夠滿足我們的日常需求了,無論需要什麼環境,在 dockerfile 里逐步構建,然後 build、run,就 ok 了,也滿足了我們docker 隔離性、快速部署的要求,為什麼還需要docker-compose呢?

​ 我們來看一個網站開發最常見的場景:我們要有資料庫,網站應用,nginx,互相配合才是完整的環境。是的,我們完全可以以 ubuntu 為基礎鏡像,把這些一股腦全裝進去,然後運行。但是這樣有很多缺點,比如我們每次都要重新裝 mysql 而不是直接利用 mysql 官方的基礎鏡像,升級維護不方便;如果我們的應用要擴展也很難,因為每個應用都連接的自己內部的資料庫,無法共用數據;事實上,這種方式是典型的虛擬機的使用方式,不是 docker 的正確打開方式

​ docker 是輕量化的應用程式,docker 官方推薦每個 docker 容器中只運行一個進程,那麼就是說,我們需要分別為我們的應用、資料庫、nginx 創建單獨的 docker 容器,然後分別啟動它。想象一下,構建好 docker 之後,每次啟動我們的網站,都要至少 docker run 三次,是不是很繁瑣?而且此時這幾個 docker 是分散獨立的,很不方便管理。既然這幾個 docker 都是為了同一個網站服務,是不是應該把它們放到一起?這就引出了 docker-compose 項目。

什麼是docker-compose

​ docker-compose是 docker 官方的開源項目,使用 python 編寫,實現上調用了 Docker 服務的 API 進行容器管理。其官方定義為為 「定義和運行多個 Docker 容器的應用(Defining and running multi-container Docker applications)),其實就是上面所講的功能。

安裝Docker-Compose

Docker Compose是一個用來定義和運行複雜應用的Docker工具,一個使用Docker容器的應用,通常由多個容器組成。使用Docker Compose不再需要使用shell腳本來啟動容器。

​ Compose 通過一個配置文件來管理多個Docker容器,在配置文件中,所有的容器通過services來定義,然後使用docker-compose腳本來啟動,停止和重啟應用,和應用中的服務以及所有依賴服務的容器,非常適合組合使用多個容器進行開發的場景。

查找最新版的docker-compose

https://github.com/docker/compose/releases/ 地址查找最新的docker-compose版本

file

安裝docker-compose
下載最新版的docker-compose文件
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
添加可執行許可權
sudo chmod +x /usr/local/bin/docker-compose
測試安裝結果
docker-compose --version

docker-compose概述

類似 docker 的Dockerfile文件,docker-compose使用 YAML 文件對容器進行管理。

相關概念

對於 docker-compose 有兩個基本的概念:

  • 服務(service):一個應用容器,即 docker 容器,比如之前所說的mysql 容器、nginx 容器
  • 項目(project):由一組關聯的應用容器組成的一個完整業務單元,比如上面所講的由 mysql、web app、nginx 容器組成的網站。docker-compose 面向項目進行管理。
YAML 文件格式
  1. 大小寫敏感,縮進表示表示層級關係
  2. 縮進空格數不重要,相同層級左側對齊即可。(不允許使用 tab 縮進!)
  3. 由冒號分隔的鍵值對錶示對象;一組連詞線開頭的行,構成一個數組;字元串預設不使用引號
Compose和Docker相容性

Docker Engine 與docker-compose version 之間的有以下關係

compose文件格式版本 docker版本
3.4 17.09.0+
3.3 17.06.0+
3.2 17.04.0+
3.1 1.13.1+
3 1.13.0+
2.3 17.06.0+
2.2 1.13.0+
2.1 1.12.0+
2 1.10.0+
1 1.9.1.+

基本使用

接下來我們使用 docker-compose 構建我們的微服務以及mysql,並逐步講解其使用。

準備工作

在項目文件夾下創建 docker-compose.yml文件

cd /usr/local/docker-learn/ && touch docker-compose.yml && ll

file

編寫配置文件

先在 docker-compose.yml 文件里添加如下代碼,構建我們的項目

version: '2'   
services:
    mysql:
        image: mysql:5.7.33
        hostname: mysql
        container_name: mysql
        restart: always
        networks:
            - learn-docker-network
        volumes:
            - "/tmp/etc/mysql:/etc/mysql/mysql.conf.d/"
            - "/tmp/data/mysql:/var/lib/mysql"
        environment:
            MYSQL_ROOT_PASSWORD: 'root'
    nacos:
        image: nacos/nacos-server
        hostname: nacos
        container_name: nacos
        restart: always
        ports:
            - "8848:8848"
        networks:
            - learn-docker-network
        environment:
            MODE: 'standalone'
            JVM_XMS: '128m'
            JVM_XMX: '128m'
    
    learn-docker-web:
        image: manager-hongbaoyu-java.itheima.net:8443/library/learn-docker-web:1.0-SNAPSHOT
        restart: always
        networks:
            - learn-docker-network
        depends_on:
            - nacos
            - mysql
        volumes:
            - "/tmp/data/logs:/logs"
    learn-docker-storage:
        image: manager-hongbaoyu-java.itheima.net:8443/library/learn-docker-storage:1.0-SNAPSHOT
        restart: always
        networks:
            - learn-docker-network
        depends_on:
            - nacos
            - mysql
        volumes:
            - "/tmp/data/logs:/logs"
    learn-docker-gateway:
        image: manager-hongbaoyu-java.itheima.net:8443/library/learn-docker-gateway:1.0-SNAPSHOT
        restart: always
        ports:
            - "8888:8888"
        networks:
            - learn-docker-network
        depends_on:
            - nacos
            - mysql
        volumes:
            - "/tmp/data/logs:/logs"
networks:
    learn-docker-network:
        driver: bridge
運行測試

在項目的文件中執行docker-compose up -d命令就可以啟動了

docker-compose up -d

file

微服務訪問測試

通過網關地址訪問測試微服務

curl http://192.168.64.153:8888/employeapi/find/10001| python -m json.tool

file

參數解釋(手冊)

version

指定 docker-compose.yml 文件的寫法格式

docker-compose.yml的version版本號應該和docker的版本進行匹配,如果不匹配可能出現問題。

services

表示多個容器的集合

服務對象

​ docker-compose.yml管理是以服務為單位管理的,一個services下麵可以有多個服務,mysql,app都代表一個服務

image

​ image是指定服務的鏡像名稱或鏡像 ID,如果鏡像在本地不存在,Compose 將會嘗試拉取這個鏡像。

hostname

配置容器的host名稱,在容器的hosts文件中加入了映射

file

container_name

​ 配置啟動後的容器名稱和docker的--name xxx效果是一樣的

restart

restart參數能夠使我們在重啟docker時,自動啟動相關容器,和docker的--restart效果一致

Docker容器的重啟策略如下

  • no,預設策略,在容器退出時不重啟容器
  • on-failure,在容器非正常退出時(退出狀態非0),才會重啟容器
  • on-failure:3,在容器非正常退出時重啟容器,最多重啟3次
  • always,在容器退出時總是重啟容器
  • unless-stopped,在容器退出時總是重啟容器,但是不考慮在Docker守護進程啟動時就已經停止了的容器
ports

映射埠的標簽,對外暴露的埠定義,和 expose 對應,和docker的-p效果一致

depends_on

​ 這個是依賴配置的選項,意思是如果 服務啟動是如果有依賴於其他服務的,先啟動被依賴的服務,啟動完成後在啟動該服務

networks

配置容器所使用的網路

volumes

掛載一個目錄或者一個已存在的數據捲容器,和docker -v效果一致

environment

配置環境變數,和docker的 -e效果一致

常用命令

docker-compose up

用於部署一個 Compose 應用

​ 預設情況下該命令會讀取名為 docker-compose.yml 或 docker-compose.yaml 的文件

,用戶也可以使用 -f 指定其他文件名。通常情況下,會使用 -d 參數令應用在後臺啟動。

docker-compose stop

停止 Compose 應用相關的所有容器,但不會刪除它們。

​ 被停止的應用可以很容易地通過 docker-compose restart 命令重新啟動。

如果帶有服務命則停止該服務 ,否則停止所有服務

file

docker-compose rm

用於刪除已停止的 Compose 應用。

​ 它會刪除容器和網路,但是不會刪除捲和鏡像。

如果帶有服務命則刪除該服務 ,否則刪除所有服務

file

docker-compose restart

重啟已停止的 Compose 應用。

​ 如果用戶在停止該應用後對其進行了變更,那麼變更的內容不會反映在重啟後的應用中,這時需要重新部署應用使變更生效。

docker-compose ps

用於列出 Compose 應用中的各個容器。

​ 輸出內容包括當前狀態、容器運行的命令以及網路埠。

file

docker-compose down

停止並刪除運行中的 Compose 應用。

​ 它會刪除容器和網路,但是不會刪除捲和鏡像。

file

擴縮容

nacos查看集群情況

我們可以查看nacos,查看當伺服器集群的一個部署情況

file

擴容節點

我們現在對learn-docker-storage節點進行擴容

語法格式:docker-compose up -d --scale 服務名=節點數

docker-compose up -d --scale learn-docker-storage=2

file

啟動後查看nacos節點信息

file

縮容節點

和擴容一樣指定節點數量就可以的

docker-compose up -d --scale learn-docker-storage=1

file

停止後後查看nacos節點信息

file

本文由傳智教育博學谷 - 狂野架構師教研團隊發佈
如果本文對您有幫助,歡迎關註和點贊;如果您有任何建議也可留言評論或私信,您的支持是我堅持創作的動力
轉載請註明出處!


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

-Advertisement-
Play Games
更多相關文章
  • 目錄 一.OpenGL 波浪特效效果演示 1.原始圖片 2.效果演示 二.OpenGL 波浪特效源碼下載 三.猜你喜歡 零基礎 OpenGL ES 學習路線推薦 : OpenGL ES 學習目錄 >> OpenGL ES 基礎 零基礎 OpenGL ES 學習路線推薦 : OpenGL ES 學習目 ...
  • ##redis是什麼? Redis(Remote Dictionary Server ),即遠程字典服務,是一個開源的使用ANSI C語言編寫、支持網路、可基於記憶體亦可持久化的日誌型、Key-Value資料庫,並提供多種語言的API。 redis是一個key-value存儲系統。和Memcached ...
  • Java集合09 18.TreeSet 元素無序:插入順序和輸出順序不一致 可以按照一定的規則進行排序,具體排序方式取決於構造方法: TreeSet () :根據其元素的自然排序進行排序 TreeSet (Comparator comparator) :根據指定的比較器進行排序 沒有帶索引的方法,所 ...
  • 1、獲取bean實例的三種方式 1.1 id 屬性 1.1.1 jar <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <spring.version>4.3.18.RELEASE</sp ...
  • 最近寫項目發現pythoncom 導入 win32api、win32con、win32com、win32gui 等win32相關的包都會出現或多或少問題,Google一大堆不靠譜的方法試了個遍。 特此記錄一下解決辦法 ...
  • 前言 1,在一些特定的場景我們往往需要看一下介面的入參,特別是跨系統的介面調用(下發,推送),這個時候的介面入參就很重要,我們保存入參入庫,如果出問題就可以馬上定位是上游還是下游的問題(方便扯皮) 2,還有一般需要在系統中看普通日誌,還有特殊的異常(報錯)日誌,一般我們可以通過伺服器去查看相應的位置 ...
  • 泛型—— 一種可以接收數據類型的數據類型,本文將通俗講解Java泛型的優點、方法及相關細節。 一、泛型的引入 我們都知道,繼承是面向對象的三大特性之一,比如在我們向集合中添加元素的過程中add()方法里填入的是Object類,而Object又是所有類的父類,這就產生了一個問題——添加的類型無法做到統 ...
  • 在練習格式化輸出時出現錯誤TypeError: can't multiply sequence by non-int of type 'float' 為什麼會出現TypeError:不能將序列乘以’float’類型的非整數? 實際情況是,這裡隱藏著一個優先順序的問題 我們發現一般情況下我們在格式化輸出 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...