Docker-14.項目部署-DockerCompose

一.DockerCompose

大家可以看到,我們部署一個簡單的java項目,其中包含3個容器:

  • MySQL

  • Nginx

  • Java項目

而稍微復雜的項目,其中還會有各種各樣的其它中間件,需要部署的東西遠不止3個。如果還像之前那樣手動的逐一部署,就太麻煩了。而且整個項目的部署沒有體現出項目的整體性,不方便運維。

而Docker Compose就可以幫助我們實現多個相互關聯的Docker容器的快速部署。它允許用戶通過一個單獨的 docker-compose.yml 模板文件(YAML 格式)來定義一組相關聯的應用容器。

docker-compose.yml文件的基本語法可以參考官方文檔:

https://docs.docker.com/compose/compose-file/compose-file-v3/

docker-compose文件中可以定義多個相互關聯的應用容器,每一個應用容器被稱為一個服務(service)。由于service就是在定義某個應用的運行時參數,因此與docker run參數非常相似。

舉例來說,用docker run部署MySQL的命令如下:

docker run -d \--name mysql \-p 3306:3306 \-e TZ=Asia/Shanghai \-e MYSQL_ROOT_PASSWORD=123 \-v ./mysql/data:/var/lib/mysql \-v ./mysql/conf:/etc/mysql/conf.d \-v ./mysql/init:/docker-entrypoint-initdb.d \--network hmallmysql

如果用docker-compose.yml文件來定義,就是這樣:

version: "3.8"services:mysql:image: mysqlcontainer_name: mysqlports:- "3306:3306"environment:TZ: Asia/ShanghaiMYSQL_ROOT_PASSWORD: 123volumes:- "./mysql/conf:/etc/mysql/conf.d"- "./mysql/data:/var/lib/mysql"networks:- new
networks:new:name: hmall

version: '3.8"是docker compose的語法版本號,containerA是服務名(一個服務就代表了一個鏡像),其中包含了鏡像,容器名,端口信息等。

對比如下:

dockerCompose和docker run描述的信息基本是一樣的,只是語法不一樣。

下面是一個dockerCompose的命令示例:

version: "3.8"services:mysql:image: mysqlcontainer_name: mysqlports:- "3306:3306"environment:TZ: Asia/ShanghaiMYSQL_ROOT_PASSWORD: 123volumes:- "./mysql/conf:/etc/mysql/conf.d"- "./mysql/data:/var/lib/mysql"- "./mysql/init:/docker-entrypoint-initdb.d"networks:- hm-nethmall:build: context: .dockerfile: Dockerfilecontainer_name: hmallports:- "8080:8080"networks:- hm-netdepends_on:- mysqlnginx:image: nginxcontainer_name: nginxports:- "18080:18080"- "18081:18081"volumes:- "./nginx/nginx.conf:/etc/nginx/nginx.conf"- "./nginx/html:/usr/share/nginx/html"depends_on:- hmallnetworks:- hm-net
networks:hm-net:name: hmall

在構建hmall容器時,由于我們是通過jar包部署的,因此我們先要通過build構建鏡像,然后再來生成容器。這里直接使用

 hmall:build: context: .

就能完成容器的創建。

在構建網絡時,我們只需要指定一個網絡標簽,并在網絡標簽下指定要構建的網絡名稱,dockerCompose就會幫助我們自動構建網絡,并將其他指定該網絡標簽的容器自動配置到這一網絡下。

networks:hm-net:name: hmall

hm-net就是網絡標簽。網絡名為hmall。

那么如何利用dockerCompose文件完成一鍵部署呢?

使用docker compose命令即可。

-f:指定路徑,如果在當前目錄下可以不指定,省略掉。

-p:指定項目名稱,可以不指定,默認就叫root。

up:一鍵啟動,創建并啟動所有容器。

down:停止并移除所有容器。

ps:列出所有啟動容器。

logs:查看指定容器日志。

stop:停止某個容器。

start:啟動某個容器。

restart:重啟某個容器。

top:查看運行進程。

exec:進入容器內指定命令。

接下來我們使用docker compose進行一鍵部署,由于在docker compose文件中我們使用的都是相對路徑,因此我們要保證docker compose文件和mysql文件夾、nginx文件夾等在同一目錄下。

都在同一目錄下,滿足

使用docker compose up -d進行一鍵部署:

部署成功!

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

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

相關文章

Vue組件基礎解析

一、組件的核心意義 組件是Vue中實現UI復用與邏輯封裝的基礎單元,能將復雜UI拆分為獨立、可重用的部分,最終組織成嵌套的樹狀結構(類似HTML元素嵌套)。Vue組件模型支持自定義內容與邏輯封裝,也能兼容原生Web Component。 二、組件的定義方式 根據是否使用構建步驟,Vue…

第5問 對于數據分析領域,統計學要學到什么程度?

1. ?統計學在數據分析中的定位??核心作用?:統計學是數據分析的底層方法論,涵蓋數據描述、推斷預測和模型構建。?兩大分支?:?描述統計?(EDA階段):數據清洗、特征工程的基礎(如均值/分布/…

[go] 橋接模式

橋接模式 是一種結構型設計模式, 可將一個大類或一系列緊密相關的類拆分為抽象和實現兩個獨立的層次結構, 從而能在開發時分別使用。 模型說明抽象部分(Abstraction)提供高層控制邏輯,依賴于完成底層實際工作的實現對象…

GitHub的使用教程

第一章:準備工作 1.1:安裝Git并設置你的GitHub賬戶 1.1.1:注冊 GitHub 賬號: 訪問 https://github.com/ 并注冊一個新賬號。 可以使用qq郵箱進行注冊 輸入郵箱后點擊sign up for GitHub,設置密碼后進行注冊,輸入驗…

Day56 Java面向對象10 方法重寫

Day56 Java面向對象10 方法重寫 1.為什么要方法重寫 當子類不需要父類方法的全部內容 或 父類的方法無法滿足子類的需求時,就需要在子類重寫父類的方法 2.如何方法重寫 重寫必須發生在繼承關系中,只能是子類重寫父類子類重寫的方法名必須和父類方法一致,方法體可以不同子類重寫…

【C++】標準庫中用于組合多個值的數據結構pair、tuple、array...

在 C 標準庫中,有多種數據結構可用于組合多個值,每種結構都有其特定的設計目的和適用場景。以下是主要組合數據結構的分類解析: 一、核心組合數據結構 1. std::pair (C98) 用途:存儲兩個相關值(鍵值對、坐標點等&#…

深入解析C++ STL鏈表(List)模擬實現

目錄 一、需要實現的三個類及其成員函數接口 二、結點類的模擬實現 構造函數 三、迭代器類的模擬實現 1、迭代器類的作用 2、迭代器類模板參數說明 3、構造函數 4、前置運算符重載 5、后置運算符重載 6、前置 -- 運算符重載 7、后置 -- 運算符重載 8、運算符重載 …

將mysql數據庫表結構導出成DBML格式

前言 DBML(數據庫標記語言)是一種簡單易讀的 DSL 語言,用于定義數據庫結構。 因為需要分析商品模塊的表設計是否合理,所以需要圖形化表,并顯示表之前的關系。 想來想去,找到了DBML。所以就需要將數據庫結構…

玩轉tokenizer

🌟 案例 1:加載現成的 BERT 分詞器from tokenizers import Tokenizer# 加載一個預訓練的 BERT tokenizer(文件需要提前下載,比如bert-base-uncased) tokenizer Tokenizer.from_file("bert-base-uncased-tokenize…

Day53--圖論--106. 島嶼的周長(卡碼網),110. 字符串接龍(卡碼網),105. 有向圖的完全聯通(卡碼網)

Day53–圖論–106. 島嶼的周長(卡碼網),110. 字符串接龍(卡碼網),105. 有向圖的完全聯通(卡碼網) 106. 島嶼的周長(卡碼網) 方法:深搜 思路&am…

Elasticsearch 數據建模與映射(Mapping)詳解

在 Elasticsearch 中,數據建模與映射(Mapping) 是決定搜索性能、存儲效率和功能支持的核心環節。合理的映射設計能讓搜索更精準、聚合更高效、存儲更節省。 本文將全面詳解 Elasticsearch 的 數據建模原則、字段類型、動態映射、自定義分析器…

5G工業一體機汽車零部件工廠的無紙化管理

在全球數字化轉型的浪潮中,制造業對信息化、智能化的需求日益強烈。尤其是在汽車零部件領域,生產線的復雜性、質量追溯的苛刻性以及對效率的高要求,迫切需要一種高效、可靠、可擴展的管理模式。以“5G工業一體機”為核心的無紙化管理&#xf…

項目管理工具

1、概述IT 項目生命周期通常可分為啟動、規劃、執行、監控與控制、收尾五個核心階段,每個階段的目標和任務不同,所依賴的工具也各有側重。以下按階段梳理常用工具,涵蓋項目管理、協作、技術開發等多個維度。2、啟動階段:明確項目目…

Linux 進程、線程與 exec/系統調用詳解

1. wait 與 waitpid —— 子進程資源回收1.1 waitpid_t wait(int *wstatus);功能:阻塞等待,回收任意子進程的資源空間。參數:wstatus:保存子進程退出狀態的變量地址NULL:不保存退出狀態返回值:成功&#xf…

Laravel 使用ssh鏈接遠程數據庫

1.創建ssh ssh -i ./id_rsa -N -L 13306:127.0.0.1:3306 -p 22 root***對上述代碼的解釋: 命令是一個SSH隧道命令,用于將本地端口3306轉發到遠程服務器上的3306端口。以下是命令的詳細解釋:# 調用SSH客戶端。 ssh # 指定用于身份驗證的私鑰文…

Python延申內容(一)

1.技術面試題 (1)TCP與UDP的區別是什么? 答: TCP(傳輸控制協議):面向連接、可靠傳輸(數據完整有序)、流量控制、擁塞控制,適用于文件傳輸、網頁瀏覽等場景。 …

Java 9 新特性及具體應用

目錄 1. 模塊系統(Jigsaw) 2. JShell(REPL工具) 3. 集合工廠方法 4. 接口私有方法 5. Stream API 增強 6. HTTP/2 客戶端(Incubator) 7. 多版本JAR包 總結 1. 模塊系統(Jigsaw&#xff0…

第二十五天:構造函數/析構函數/拷貝構造

構造函數/析構函數/拷貝構造 1. 構造函數(Constructor) 定義與作用:構造函數是一種特殊的成員函數,其名稱與類名相同,沒有返回類型(包括 void 也沒有)。它的主要作用是在創建對象時初始化對象的…

【P14 3-6 】OpenCV Python——視頻加載、攝像頭調用、視頻基本信息獲取(寬、高、幀率、總幀數),視頻保存在指定位置

文章目錄1 讀取本地視頻1.1 絕對路徑 6種方式1.2 相對路徑 4種方式1.3 讀取本地視頻2 視頻基本信息3 調用攝像頭 并將視頻保存在指定位置P14 3-6 1 讀取本地視頻 現在要讀取本地視頻“video.mp4”, 視頻文件“video.mp4”和playVideo.py腳本文件,都在…

【DL學習筆記】常用數據集總結

一、如何找數據集 paperswithcode,但好像沒了 AutoDL Roboflow Kaggle Hungging Face 百度飛漿PP AIStudio 二、目標檢測數據集格式 常用數據集坐標格式 MSCOCO : 坐標格式(x,y,w,h&#xff…