Docker Compose(容器編排)——9

目錄

  1. 什么是 Docker Compose
  2. 生活案例
  3. 為什么要 Docker Compose
  4. Docker Compose 的安裝
  5. Docker Compose 的功能
  6. Docker Compose 使用場景
  7. Docker Compose 文件(docker-compose.yml)
    1. 文件語法版本
    2. 文件基本結構及常見指令
  8. Docker Compose 命令清單
    1. 命令清單如下
    2. 命令格式
    3. 常見選項說明
    4. 常見命令說明
  9. 操作案例
  10. 綜合案例
    1. Docker Compose 部署自定義服務
    2. Docker Compose 部署 WordPress
  11. 常見問題
    1. up、 run 和 start 之間有什么區別
    2. 如何在同一主機上運行 Compose 文件的多個副本
    3. 可以控制服務啟動順序嗎?

1.什么是 Docker Compose

docker-compose 是 Docker 官方的開源項目,使用 python 編寫,實現上調用了Docker 服務的 API 進行容器管理及編排,其官方定義為定義和運行多個 Docker 容器的應用。
docker-compose 中有兩個非常重要的概念:

  • 服務 ( service ):一個應用的容器,實際上可以包括若干運行相同鏡像的容器實例。
  • 項目( project ):由一組關聯的應用容器組成的一個完整業務單元,在 dockercompose.yml 文件中定義, 整個 docker-compose.yml 定義一個項目。

Compose 的默認管理對象是項目,通過子命令對項目中的一組容器進行便捷地生命周期管理。
通過 compose 可以方便的管理多個服務。

2.生活案例

docker compose 就像航母一樣,有艦載機、防空導彈,艦載機、導彈呢就是一個個容器。

3.為什么要 Docker Compose

  • Docker 是一個輕量化的應用程序, Docker 官方推薦每個 Docker 容器中只運行一個進程。
  • 如果一個應用需要涉及到 MySQL、 nginx 等環境, 那么我們需要分別為應用、數據庫和 nginx 創建單獨的 docker 容器,然后分別啟動容器。
  • 想象一下,當我們構建好 Docker 之后,每次啟動應用,都至少需要 docker run三次, 或者寫一些腳本來實現, 這樣會比較繁瑣。
  • 另外,這些 docker 容器都是分散獨立的,也不方便鏡像管理。那既然這些 docker容器 都是為了同一個應用服務,我們就應該把它們放到一起,這就引出了 dockercompose 來解決這類型的問題。
    ?

4.Docker Compose 的安裝

安裝 docker 的時候,我們默認已經安裝了 docker-compose,安裝的組件包名稱為docker-compose-plugin,此處不再贅述

5.Docker Compose 的功能

Compose 使用的步驟:

  • 使用 docker-compose.yml 定義構成應用程序的服務,這樣它們可以在隔離環境中一起運行。
  • 最后,執行 docker compose up 命令來啟動并運行整個應用程序。

核心功能

Compose 具有管理應用程序整個生命周期的命令:

  • 啟動,停止和重建服務
  • 查看正在運行的服務的狀態
  • 流式傳輸運行服務的日志輸出
  • 在服務上運行一次性命令
    ?

6.Docker Compose 使用場景

單主機部署

快速搭建一個單節點開發或者測試環境,方便使用。

不同環境隔離

通過指定 project 來運行不同的環境,實現隔離的目的。
?

7.Docker Compose 文件(docker-compose.yml)

文件語法版本

目前官方支持三個大版本, 即 Version 1、 Version 2 及 Version 3, 其中 Version 1 已經被廢棄掉了。當前最新的版本是 3.8,它支持的 Docker Engine 版本不得低于 19.03.0。 本文章主要基于 3.8 版本的 Compose file 語法進行講解,其他版本介紹參見

Compose file versions and upgrading | Docker Docs

文件基本結構及常見指令


?常見字段格式語法

image

指定容器運行的鏡像。以下格式都可以:

command

覆蓋容器啟動的默認命令。
?

entrypoint

覆蓋容器默認的 entrypoint。


?

也可以是以下格式:

environment

添加環境變量。您可以使用數組或字典、任何布爾值,布爾值需要用引號引起來,以確保 YML 解析器不會將其轉換為 True 或 False。


?

networks

指定容器運行的網絡:配置容器網絡

?配置網絡驅動和子網信息

volumes

將主機的數據卷或者文件掛載到容器里。


?

ports

指定端口映射。以下格式都可以:

expose

暴露端口,但不映射到宿主機,只被連接的服務訪問。僅可以指定內部端口為參數:


?

build

指定為構建鏡像上下文路徑:例如 webapp 服務,指定為從上下文路徑 ./dir/Dockerfile 所構建的鏡像:


?

或者,作為具有在上下文指定的路徑的對象,以及可選的 Dockerfile 和 args:

  • context:上下文路徑。
  • dockerfile:指定構建鏡像的 Dockerfile 文件名。
  • args:添加構建參數,這是只能在構建過程中訪問的環境變量。
  • labels:設置構建鏡像的標簽。

depends_on

設置依賴關系。

  • docker compose up :以依賴性順序啟動服務。在以下示例中,先啟動 db 和redis ,才會啟動 web。
  • docker compose up SERVICE :自動包含 SERVICE 的依賴項。在以下示例中,docker compose up web 還將創建并啟動 db 和 redis。
  • docker compose stop :按依賴關系順序停止服務。在以下示例中, web 在 db 和redis 之前停止。

?

可以指定條件, healthy 需要配置 healthcheck 來完成

health check 樣例

env_file

從文件添加環境變量。可以是單個值或列表的多個值。

也可以是列表格式

8.Docker Compose 命令清單

命令清單如下

命令格式

對于 Compose 來說,大部分命令的對象既可以是項目本身,也可以指定為項目中的服務或者容器。如果沒有特別的說明,命令對象將是項目,這意味著項目中所有的服務都會受到命令影響。
docker-compose 命令的基本的使用格式為

常見選項說明
  • -f, --file 指定使用的 Compose 模板文件,默認為 docker-compose.yml,可以多次指定
  • -p, --project-name 指定項目名稱,默認將使用所在目錄名稱作為項目名
    ?
常見命令說明

up

該命令的作用十分強大,它會嘗試自動完成包括構建鏡像、(重新)創建服務、啟動服
務并關聯服務相關容器的一系列操作,可以直接通過該命令來啟動一個項目。

  • -d 在后臺運行服務容器, 推薦在生產環境下使用該選項
  • --force-recreate 強制重新創建容器,不能與 --no-recreate 同時使用
  • --no-recreate 如果容器已經存在了,則不重新創建,不能與 --forcerecreate 同時使用
    ?

down

停止所有容器,并刪除容器和網絡

-v, --volumes 刪除容器同時刪除目錄映射

run

該命令可以在指定服務容器上執行相關的命令

  • -d 后臺運行容器
  • --name NAME 為容器指定一個名字
  • --entrypoint CMD 覆蓋默認的容器啟動指令
  • -e KEY=VAL 設置環境變量值,可多次使用選項來設置多個環境變量
  • -u, --user="" 指定運行容器的用戶名或者 uid
  • --rm 運行命令后自動刪除容器
  • -p, --publish=[] 映射容器端口到本地主機
    ?

9.操作案例

創建 compose 目錄

進入 base 目錄,創建 docker-compose.yml 文件

輸入一下內容

輸入 docker config 會做檢查

我們修改錯誤信息,將版本轉為字符串,再次檢查

?

創建首頁目錄,編輯首頁內容

啟動服務

通過頁面訪問

?

停止服務

啟動服務

刪除服務

?

10.綜合案例

Docker Compose 部署自定義服務

我們編寫一個簡單的案例, nginx 反向代理到我們的一個 springboot 微服務,微服務訪問我們的 msyql 數據庫查詢用戶信息.

設計數據非常簡單的一個表信息,寫入兩條數據,文件為 init.sql

創建一個 springboot 應用,配置 maven 項目

添加啟動類

配置數據庫信息,注意本地測試的時候紅色部分調整為 ip 地址,而我們實際的服務使用的 mysql 的一個服務名稱。


?

配置用戶控制器,簡單配置,不再去涉及 mapper 那些內容通過 jdbc 直接完成操作

編譯打包

進入打包的目錄,本地測試正常啟動

本地測試正常訪問

編寫 docker-compose.yml

創建工程目錄和卷目錄

將 nginx 的反向代理配置 bit.conf 放入到./nginx/conf.d,其中內容為

將數據庫初始化文件 init.sql 放入到./mysql/init 目錄

將應用 jar 包放入到./app 目錄

啟動項目


?

瀏覽器訪問 nginx,可以看到用戶信息正常返回

Docker Compose 部署 WordPress

什么是 WordPress

WordPress 是使用 PHP 語言開發的博客平臺,用戶可以在支持 PHP 和 MySQL 數據庫的服務器上架設屬于自己的網站。也可以把 WordPress 當作一個內容管理系統(CMS)來使用。WordPress 是一款個人博客系統,并逐步演化成一款內容管理系統軟件,它是使用PHP 語言和 MySQL 數據庫開發的,用戶可以在支持 PHP 和 MySQL 數據庫的服務器上使用自己的博客。
WordPress 有許多第三方開發的免費模板,安裝方式簡單易用。不過要做一個自己的模板,則需要你有一定的專業知識。比如你至少要懂的標準通用標記語言下的一個應用 HTML 代碼、 CSS、 PHP 等相關知識。WordPress 官方支持中文版,同時有愛好者開發的第三方中文語言包,如 wopus 中文語言包。 WordPress 擁有成千上萬個各式插件和不計其數的主題模板樣式。

編寫 Docker Compose


運行站點



訪問 web 頁面

配置參數,點擊安裝

登錄

刪除,釋放空間

11.常見問題

up、 run 和 start 之間有什么區別

通常,你想要 docker compose up. 用于 up 啟動或重新啟動 docker-compose.yml.在默認的“附加”模式下,會看到來自所有容器的所有日志。在“分離”模式 ( -d) 中,啟動容器后 Compose 退出,但容器繼續在后臺運行。該 docker compose run 命令用于運行“一次性”或“臨時”任務。它需要您要運行的服務名稱,并且只為正在運行的服務所依賴的服務啟動容器。用于 run 運行測試或執行管理任務,例如從數據卷容器中刪除或添加數據。該 run 命令的作用類似于 dockerrun -ti 它打開容器的交互式終端并返回與容器中進程的退出狀態匹配的退出狀態。docker compose start 命令僅對重新啟動先前創建但已停止的容器有用。它從不創建新容器。
?

如何在同一主機上運行 Compose 文件的多個副本

Compose 使用項目名稱為項目的所有容器和其他資源創建唯一標識符。要運行項目的多個副本,請使用-p 命令行選項 或 COMPOSE_PROJECT_NAME 環境變量設置自定義項目名稱。

可以控制服務啟動順序嗎?

可以控制啟動順序,通過依賴指定,并且可以配合 healthcheck 等健康檢查成功以后再啟動

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/212933.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/212933.shtml
英文地址,請注明出處:http://en.pswp.cn/news/212933.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

垃圾回收器CMS和G1的區別

CMS和G1的區別 區別一: 使用范圍不一樣 CMS收集器是老年代的收集器,可以配合新生代的Serial和ParNew收集器一起使用 G1收集器收集范圍是老年代和新生代。不需要結合其他收集器使用 區別二: STW的時間 CMS收集器以最小的停頓時間為目標的收…

C++11(下)

可變參數模板 C11的新特性可變參數模板能夠創建可以接受可變參數的函數模板和類模板. 相比C98/03, 類模版和函數模版中只能含固定數量的模版參數, 可變模版參數無疑是一個巨大的改進, 然而由于可變模版參數比較抽象, 使用起來需要一定的技巧, 所以這塊還是比較晦澀的.掌握一些基…

Vue 3項目的運行過程

概述: 使用Vite構建Vue 3項目后,當執行yarn dev命令啟動服務時,項目就會運行起來,該項目會通過src\main.js文件將src\App.vue組件渲染到index.html文件的指定區域。 文件介紹: src\App.vue文件 Vue 3項目是由各種組件…

遞歸實現指數型枚舉

title: 遞歸實現指數型枚舉 date: 2023-12-10 19:29:20 tags: 遞歸 catgories: 算法進階指南 —> 傳送門 題目大意 從 1 ~ n n n 這 n n n 個整數隨機選取任意多個,輸出所有可能的選擇方案 思路 這等價于每個整數可以選或者不選,所有的方案總數共有…

Spring Boot的日志

打印日志 打印日志的步驟: ? 在程序中得到日志對象. ? 使用日志對象輸出要打印的內容 在程序中得到日志對象 在程序中獲取日志對象需要使用日志工廠LoggerFactory,代碼如下: package com.example.demo;import org.slf4j.Logger; import org.slf4j.LoggerFactory;public c…

STM32——繼電器

繼電器工作原理 單片機供電 VCC GND 接單片機, VCC 需要接 3.3V , 5V 不行! 最大負載電路交流 250V/10A ,直流 30V/10A 引腳 IN 接收到 低電平 時,開關閉合。

Go Fyne 入門

Fyne是一個用于創建原生應用程序的UI工具包,它簡單易用,并且支持跨平臺。以下是一個簡單的Fyne教程,幫助你入門: 1. 安裝Fyne 首先,確保你已經安裝了Go語言。然后,在終端中運行以下命令來安裝Fyne&#x…

android-xml語法

xml解析器 Android的XML文件語法是由Android系統中的解析器解析的。具體來說,Android使用了一個名為"Android Asset Packaging Tool (AAPT)"的工具來解析和處理XML文件。AAPT負責將XML文件編譯為二進制格式,并在構建過程中將其打包到Android應…

第2節:Vue3 模板語法

Vue3 的模板語法主要包括以下幾個部分&#xff1a; 插值表達式&#xff1a;使用雙大括號 {{ }} 包裹變量&#xff0c;可以直接在模板中顯示變量的值。 <div>{{ message }}</div>指令&#xff1a;以 v- 開頭&#xff0c;后面跟一個自定義的名字&#xff0c;用于操…

從Centos-7升級到Centos-Stream-8

如果在正式環境升級&#xff0c;請做好數據備份以及重要配置備份&#xff01;因為升級會造一部分應用被卸載。 注意&#xff1a;升級前請備份好數據&#xff0c;升級可能會導致ssh的root用戶無法登陸、網卡名稱發生改變、引導丟失無法開機等問題。 1.安裝epel源 yum -y install…

【Spring教程20】Spring框架實戰:AOP(面對切面編程)知識總結

歡迎大家回到《Java教程之Spring30天快速入門》&#xff0c;本教程所有示例均基于Maven實現&#xff0c;如果您對Maven還很陌生&#xff0c;請移步本人的博文《如何在windows11下安裝Maven并配置以及 IDEA配置Maven環境》&#xff0c;本文的上一篇為《利用 AOP通知獲取數據代碼…

軟件測試(接口測試業務場景測試)

軟件測試 手動測試 測試用例8大要素 編號用例名稱&#xff08;標題&#xff09;模塊優先級預制條件測試數據操作步驟預期結果 接口測試&#xff08;模擬http請求&#xff09; 接口用例設計 防止漏測方便分配工具&#xff0c;評估工作量和時間接口測試測試點 功能 單接口業…

華為OD機試真題-字符串變換最小字符串-2023年OD統一考試(C卷)

題目描述: 給定一個字符串s,最多只能進行一次變換,返回變換后能得到的最小字符串(按照字典序進行比較)。變換規則:交換字符串中任意兩個不同位置的字符。 輸入描述:一串小寫字母組成的字符串s 輸出描述:按照要求進行變換得到的最小字符串 補充說明:s是都是小寫字符組成…

一臺是阿里云,一臺是騰訊云,一臺是華為云,一臺是百度云等多種公有云混合安裝K8S集群

1. 修改主機名稱和添加hosts #永久修改主機名 hostnamectl set-hostname master && bash #在master01上操作&#xff0c;阿里云服務器 hostnamectl set-hostname worker1 && bash #在node01上操作&#xff0c;阿里騰訊云服務器 hostnamectl set-ho…

利用Microsoft Visual Studio Installer Projects打包安裝包

利用Microsoft Visual Studio Installer Projects打包安裝包 具體步驟步驟1&#xff1a;安裝擴展步驟2&#xff1a;創建 Setup 項目步驟3&#xff1a;設置屬性步驟4&#xff1a;添加輸出步驟5&#xff1a;添加文件步驟6&#xff1a;添加桌面快捷方式步驟7&#xff1a;添加菜單快…

【Table/SQL Api】Flink Table/SQL Api表轉流讀取MySQL

引入依賴 jdbc依賴 flink-connector-jdbc mysql-jdbc-driver 操作mysql數據庫 <!-- Flink-Connector-Jdbc --><dependency><groupId>org.apache.flink</groupId><artifactId>flink-connector-jdbc_${scala.binary.version}</artifactId>…

Ubuntu上安裝 Git

在 Ubuntu 上安裝 Git 可以通過包管理器 apt 進行。以下是在 Ubuntu 上安裝 Git 的步驟&#xff1a; 打開終端。你可以按 Ctrl Alt T 組合鍵來打開終端。 運行以下命令以確保你的系統的軟件包列表是最新的&#xff1a; sudo apt update 安裝 Git&#xff1a; sudo apt inst…

RT-DERT改進策略:AKConv即插即用,輕松漲點

摘要 提出了一種算法&#xff0c;用于生成任意尺寸卷積核的初始采樣坐標。與常規卷積核相比&#xff0c;提出的AKConv實現了不規則卷積核的函數來提取特征&#xff0c;為各種變化目標提供具有任意采樣形狀和尺寸的卷積核&#xff0c;彌補了常規卷積的不足。在COCO2017和VisDro…

Anaconda文件目錄(打開默認路徑)更改

Anaconda 文件默認目錄更改 每次打開 Anaconda 都在C盤怎么辦&#xff0c;如何改為D盤或是其他盤符位置&#xff1f; 可以進行下述操作。 1. 單次修改路徑 單次修改路徑&#xff1a;在 exe 文件(Anaconda Prompt (Anaconda_py))中寫入下面代碼&#xff1a; jupyter notebook …

STM32 標準外設SPL庫、硬件抽象層HAL庫、低層LL庫區別?

1、STM32 之一 HAL庫、標準外設庫、LL庫_ZCShou的博客-CSDN博客_ll庫&#xff08;仔細閱讀&#xff09; 2、STM32標準外設庫、 HAL庫、LL庫 - King先生 - 博客園 3、STM32 之 HAL庫_戈 揚的博客&#xff08;仔細閱讀&#xff09; 4、STM32 LL 為什么比 HAL 高效&#xff1…