06Docker-Compose和微服務部署

Docker-Compose

概述

Docker Compose通過一個單獨的docker-compose.yml模板文件來定義一組相關聯的應用容器,幫助我們實現多個相互關聯的Docker容器的快速部署

  • 一般一個docker-compose.yml對應完整的項目,項目中的服務和中間件對應不同的容器
    在這里插入圖片描述

Compose文件實質就是集成了多個docker run命令,只是語法變成通過指令定義集群中的每個容器運行時的參數信息

docker run 參數docker compose 指令說明
–namecontainer_name容器名稱
-pports端口映射
-eenvironment環境變量
-vvolumes數據卷配置
–networknetworks網絡
-d不需要指定, 默認就是后臺運行運行方式
EXPOSE在微服務集群部署中,像MySQL和Reids等中間件僅僅是供給給集群內的服務使用的,所以不需要對外暴露端口暴露端口
在這里插入圖片描述

安裝DockerCompose

在Linux中使用命令去github下載DockerCompose安裝包并修改文件權限(下載速度可能較慢),可以自己在瀏覽器中下載安裝包上傳到/usr/local/bin目錄

# 安裝
curl -L https://github.com/docker/compose/releases/download/1.23.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
# 修改文件權限
chmod +x /usr/local/bin/docker-compose
# 檢測docker-compose是否安裝成功
docker-compose

設置DockerCompose自動補全功能,如果出現錯誤Failed connect to raw.githubusercontent.com:443; Connection refused就修改hosts文件

# 自動補全的命令
curl -L https://raw.githubusercontent.com/docker/compose/1.29.1/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose
# 出現錯誤后需要修改自己的hosts文件(重啟一下網絡systemctl start network),再配置自動補全的命令
echo "199.232.68.133 raw.githubusercontent.com" >> /etc/hosts
# 如出現TCP connection reset by peer錯誤需要重復發起命令多試幾次

DockerCompose命令

docker compose [OPTIONS] [COMMAND]: OPTIONS和COMMAND都是可選參數,常見命令參考官方文檔

類型參數或指令說明
Options-f指定compose文件的路徑和名稱,如果文件在當前目錄且名稱為docker-compose.yml則不用指定
-p指定project名稱, project就是當前compose文件中設置的多個service的集合
Commandsup創建并啟動所有service容器
down停止并移除所有容器、網絡
ps列出所有啟動的容器
logs查看指定容器的日志
stop停止容器
start啟動容器
restart重啟容器
top查看運行的進程
exec在指定的運行中容器中執行命令

部署微服務集群

單體項目部署

基于docker-compose.yml文件一鍵部署項目

# 1.進入root目錄
cd /root# 2.刪除舊容器
docker rm -f $(docker ps -qa)# 3.刪除hmall鏡像
docker rmi hmall# 4.清空MySQL數據
rm -rf mysql/data# 5.啟動所有, -d參數是后臺啟動
docker compose up -d
# 結果:
[+] Building 15.5s (8/8) FINISHED=> [internal] load build definition from Dockerfile                                    0.0s=> => transferring dockerfile: 358B                                                    0.0s=> [internal] load .dockerignore                                                       0.0s=> => transferring context: 2B                                                         0.0s=> [internal] load metadata for docker.io/library/openjdk:11.0-jre-buster             15.4s=> [1/3] FROM docker.io/library/openjdk:11.0-jre-buster@sha256:3546a17e6fb4ff4fa681c3  0.0s=> [internal] load build context                                                       0.0s=> => transferring context: 98B                                                        0.0s=> CACHED [2/3] RUN ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo   0.0s=> CACHED [3/3] COPY hm-service.jar /app.jar                                           0.0s=> exporting to image                                                                  0.0s=> => exporting layers                                                                 0.0s=> => writing image sha256:32eebee16acde22550232f2eb80c69d2ce813ed099640e4cfed2193f71  0.0s=> => naming to docker.io/library/root-hmall                                           0.0s
[+] Running 4/4? Network hmall    Created                                                             0.2s? Container mysql  Started                                                             0.5s? Container hmall  Started                                                             0.9s? Container nginx  Started                                                             1.5s# 6.查看鏡像
docker compose images
# 結果
CONTAINER           REPOSITORY          TAG                 IMAGE ID            SIZE
hmall               root-hmall          latest              32eebee16acd        362MB
mysql               mysql               latest              3218b38490ce        516MB
nginx               nginx               latest              605c77e624dd        141MB# 7.查看容器
docker compose ps
# 結果
NAME                IMAGE               COMMAND                  SERVICE             CREATED             STATUS              PORTS
hmall               root-hmall          "java -jar /app.jar"     hmall               54 seconds ago      Up 52 seconds       0.0.0.0:8080->8080/tcp, :::8080->8080/tcp
mysql               mysql               "docker-entrypoint.s…"   mysql               54 seconds ago      Up 53 seconds       0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp
nginx               nginx               "/docker-entrypoint.…"   nginx               54 seconds ago      Up 52 seconds       80/tcp, 0.0.0.0:18080-18081->18080-18081/tcp, :::18080-18081->18080-18081/tcp

定義docker-compose.yml文件指定要創建的容器

version: "3.8"services:mysql: # 創建mysql容器的參數信息image: mysql# 鏡像名稱container_name: mysql# 容器名稱ports:# 端口映射- "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: # 創建Java應用容器的參數信息build: # 基于Dockerfile文件構建自定義鏡像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:/etc/nginx/html"depends_on:- hmall # 前端依賴后端networks:- hm-net
networks: # 需要創建的網絡hm-net:name: hmall

微服務部署步驟

第一步: 在cloud-demo項目中編寫docker-compose文件構建鏡像并運行容器

version: "3.2"
services:nacos: # 注冊中心和配置中心image: nacos/nacos-server # 基于nacos/nacos-server鏡像構建environment: # 環境變量MDOE: standalone # 單點模式啟動ports: # 端口映射,暴露了8848端口- "8848:8848"mysql:image: mysql:5.7.25 # 基于5.7.25版本的MySQL鏡像構建environment:MYSQL_ROOT_PASSWORD: 123456 # 設置數據庫root賬戶的密碼volumes: # 數據卷掛載,這里掛載了mysql的data和conf目錄- "$PWD/mysql/data:/var/lib/mysql"  # $PWD用于獲取當前文件所在的目錄- "$PWD/mysql/conf:/etc/mysql/conf.d"# 微服務不需要暴露端口,如果暴露了端口網關的身份認證和權限校驗就形同虛設了userservice: # 基于Dockerfile文件臨時構建build: ./user-service orderservice: # 基于Dockerfile文件臨時構建build: ./order-service# 網關需要暴露端口,它是其他微服務的入口gateway: # 基于Dockerfile文件臨時構建build: ./gatewayports:- "10010:10010"

第二步: 使用Docker Compose部署時, 所有的服務之間都可以用服務名互相訪問,那么就可以修改cloud-demo項目中所有服務的yml配置文件

  • 將數據庫,nacos地址URL中的localhost重命名為docker-compose中的服務名
spring:cloud:nacos:# server-addr: localhost:80 #Nacos地址server-addr: nacos:8848 # 使用compose中的服務名來互相訪問,用nacos替換localhostconfig:file-extension: yaml # 文件后綴名

第三步: 使用maven打包工具, 在每一個服務的pom.xml文件指定將微服務打包為app.jar(打包名需要與Dockerfile文件中一致)

<build><!--指定服務打包的最終名稱--><finalName>app</finalName><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins>
</build>

第四步: 將打包好的app.jar和Dockerfile構建鏡像文件拷貝到cloud-demo目錄中對應的gateway, order-service, user-service子目錄中

FROM openjdk:8
COPY ./app.jar /tmp/app.jar
ENTERPOINT java -jar /tmp/app.jar

第五步: 將cloud-demo項目文件夾上傳至虛擬機得到最終的目錄結構

cloud-demo
- gateway- app.jar- Dockerfile.yml
- order-service- app.jar- Dockerfile.yml
- user-service- app.jar- Dockerfile.yml
- mysql- data- conf
- docker-compose.yml

第六步: 執行docker-compose up -d命令部署項目,docker-compose logs -f查看日志

  • nacos連接失敗是由于nacos啟動較慢,userservice在nacos之前啟動會導致userservice注冊失敗
# 后臺創建鏡像部署容器
docker-compose up -d# 查看日志發現阿里巴巴nacos連接失敗
docker-compose logs -f
com.alibaba.nacos.api.exception.NacosException: failed to req API:/nacos/v1/ns/instance/list after all servers([nacos:8848]) tried: java.net.ConnectException: Connection refused (Connection refused)# 建議nacos單獨先啟動其他服務后啟動,此時可以重啟gateway userservice orderservice服務
docker-compose restart gateway userservice orderserivce # 再次查看查看userservice啟動日志
docker-compose logs -f userservice

第七步: 打開瀏覽器訪問http://虛擬機IP地址/user/1?authorization=admin查看數據
在這里插入圖片描述

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

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

相關文章

鋰電池壽命預測 | Matlab基于SSA-SVR麻雀優化支持向量回歸的鋰離子電池剩余壽命預測

目錄 預測效果基本介紹程序設計參考資料 預測效果 基本介紹 【鋰電池剩余壽命RUL預測案例】 鋰電池壽命預測 | Matlab基于SSA-SVR麻雀優化支持向量回歸的鋰離子電池剩余壽命預測&#xff08;完整源碼和數據&#xff09; 1、提取NASA數據集的電池容量&#xff0c;以歷史容量作…

【C++課程學習】:類和對象(上)(類的基礎詳細講解)

&#x1f381;個人主頁&#xff1a;我們的五年 &#x1f50d;系列專欄&#xff1a;C課程學習 &#x1f389;歡迎大家點贊&#x1f44d;評論&#x1f4dd;收藏?文章 目錄 &#x1f35f;1.1類的引出&#xff1a; &#x1f35f;1.2類的結構&#xff1a; &#x1f35f;1.3類的…

LeetCode-82. 刪除排序鏈表中的重復元素 II【鏈表 雙指針】

LeetCode-82. 刪除排序鏈表中的重復元素 II【鏈表 雙指針】 題目描述&#xff1a;解題思路一&#xff1a;用一個cur即可實現去重cur.next cur.next.next背誦版&#xff1a;解題思路三&#xff1a;0 題目描述&#xff1a; 給定一個已排序的鏈表的頭 head &#xff0c; 刪除原始…

【java前端課堂】02_類和方法的定義區別

目錄 簡介&#xff1a; 類 方法 類和方法之間的主要區別如下&#xff1a; 定義與結構&#xff1a; 實例化&#xff1a; 作用范圍&#xff1a; 生命周期&#xff1a; 下面是一個簡單的Java類和方法示例&#xff1a; 簡介&#xff1a; 類 在Java&#xff08;以及許多其他面向…

十大排序-冒泡排序

算法原理如下&#xff1a; 給出一組數據&#xff1b;比較相鄰的元素。如果第一個比第二個大&#xff0c;互換兩個值。對每一組相鄰元素同樣方式比較&#xff0c;從開始的第一組到結束的最后一組。最后的元素會是最大數。除了排列好的最大數&#xff0c;針對所有元素重復以上步…

臺式機ubuntu22.04安裝nvidia驅動

總結一個極簡易的安裝方法 正常安裝ubuntu 22.04正常更新軟件 sudo apt update sudo apt upgrade -y參考ubuntu官方網站的說明https://ubuntu.com/server/docs/nvidia-drivers-installation#/ # 首先檢查系統支持驅動的版本號 sudo ubuntu-drivers list我顯示的內容如下&…

前端應用開發實驗:組件應用

目錄 實驗目的相關知識點實驗內容及要求代碼實現效果 實驗目的 &#xff08;1&#xff09;掌握組件的創建方法&#xff08;全局組件、局部組件&#xff09;&#xff1b; &#xff08;2&#xff09;重點學會組件之間的數據傳遞&#xff08;prop傳值、自定義事件&#xff09;&am…

SAP 用事務碼SQVI 制作簡單的ALV報表

我們在項目實施和運維的過程中經常會接到用戶的很多需求&#xff0c;有很大的一部分需求可能都是一些報表的需求&#xff0c;有些報表的需求需要開發人員使用ABAP編寫&#xff0c;但是有些報表僅僅只是兩個或者多個報表的表關聯就可以實現。這個時候我們就可以用SQVI這個事物代…

揭秘!寵物空氣凈化器對抗貓毛過敏,效果真的超乎想象?

貓毛過敏困擾著不少愛貓人士。盡管網絡上充斥著各種緩解策略&#xff0c;但究竟哪種方法效果最佳&#xff1f;作為一位經驗豐富的寵物主人&#xff0c;我搜集了大量信息&#xff0c;對比了幾種主流的貓毛過敏應對策略&#xff0c;比如藥物治療、日常清潔和寵物空氣凈化器的使用…

阿里云私有CA使用教程

點擊免費生成 根CA詳情 啟用根CA -----BEGIN CERTIFICATE----- MIIDpzCCAogAwIBAgISBZ2QPcfDqvfI8fqoPkOq6AoMA0GCSqGSIb3DQEBCwUA MFwxCzAJBgNVBAYTAkNOMRAwDgYDVQQIDAdiZWlqaW5nMRAwDgYDVQQHDAdiZWlq aW5nMQ0wCwYDVQQKDARDU0REMQ0wCwYDVQQLDARDU0REMQswCQYDVQQDDAJDTjA…

單列集合--ArryList、LinkedList、Set

使用IDEA進入某個類之后&#xff0c;按ctrlF12,或者alt數字7&#xff0c;可查看該實現類的大綱。 package exercise;import java.util.HashSet; import java.util.Iterator; import java.util.Set; import java.util.function.Consumer;public class Demo3 {public static void…

開放式耳機哪個牌子好?2024年度熱門機型推薦榜單分享!

隨著音樂技術的不斷革新&#xff0c;開放式耳機已成為音樂發燒友們的首選。從最初的簡單音質&#xff0c;到如今的高清解析&#xff0c;開放式耳機不斷進化。音質純凈&#xff0c;佩戴舒適&#xff0c;無論是街頭漫步還是家中細細靜聽&#xff0c;都能帶給你身臨其境的音樂體驗…

iOS18 新變化提前了解,除了AI還有這些變化

iOS 18即將在不久的將來與廣大iPhone用戶見面&#xff0c;這次更新被普遍認為是蘋果歷史上最重要的軟件更新之一。據多方報道和泄露的消息&#xff0c;iOS 18將帶來一系列全新的功能和改進&#xff0c;包括在人工智能領域的重大突破、全新的設計元素以及增強的性能和安全性。現…

make 中 DESTDIR 和 --prefix 的區別

1.configure + make./configure --prefix=/usr make -j8make install DESTDIR=/home2.meson + ninja meson build --prefix=/usr DESTDIR=/home ninja install 這兩個示例分別展示了如何使用兩種流行的構建系統(configure + make 和 meson + ninja)來編譯和安裝軟件,并…

AI教我變得厲害的思維模式01 - 成長型思維模式

今天和AI一起思考如何培養自己的成長性思維。 一一核對&#xff0c;自己哪里里做到&#xff0c;哪里沒有做到&#xff0c;讓AI來微調訓練我自己。 成長性思維的介紹 成長性思維&#xff08;Growth Mindset&#xff09;是由斯坦福大學心理學教授卡羅爾德韋克&#xff08;Carol…

鋇錸技術BL103助力實現PLC到OPC-UA無縫轉換新高度

在工業4.0的大背景下&#xff0c;信息物理系統和工業物聯網的融合日益加深&#xff0c;推動了工業自動化向更高層次的發展。OPC UA作為一種開放、安全、跨平臺的通信協議&#xff0c;在實現不同設備、系統間數據交換和互操作性方面扮演了核心角色。鋇錸技術公司推出的BL103 PLC…

調用訊飛星火API實現圖像生成

目錄 1. 作者介紹2. 關于理論方面的知識介紹3. 關于實驗過程的介紹&#xff0c;完整實驗代碼&#xff0c;測試結果3.1 API獲取3.2 代碼解析與運行結果3.2.1 完整代碼3.2.2 運行結果 3.3 界面的編寫&#xff08;進階&#xff09; 4. 問題分析5. 參考鏈接 1. 作者介紹 劉來順&am…

Vitis HLS 學習筆記--通道的FIFO/PIPO選擇

目錄 1. 簡介 2. 代碼詳解 2.1 FIFO 通道示例 2.1.1 配置默認通道 2.1.2 kernel 代碼 2.1.3 綜合報告 2.1.4 depth 32 解析 2.1.5 FIFO 通道分類 2.2 PIPO 2.2.1 配置默認通道 2.2.2 kernel 代碼 2.2.3 綜合報告 2.2.4 PIPO 通道分類 3. 綜合對比 3.1 數據類…

docker安裝及常見命令

歷史版本docker下載 https://docs.docker.com/desktop/release-notes/#upgrades-17 docker start 容器id # 啟動容器 docker restart 容器id # 重啟容器 docker stop 容器id # 停止當前運行的容器 docker kill 容器id # 強制停止當前容器…

2024年帶你揭秘FL Studio 21破解版,2024年最新FL21內置漢化破解補丁

截止目前&#xff0c;FL Studio最新版是FL Studio 21.2.3.4004版本&#xff0c;想必很多朋友已經迫不及待了&#xff0c;那么今天這篇文章我將帶大家詳細的介紹FL Studio 21.2.3 Build 4004新特點以及如何下載&#xff0c;安裝和激活。 PS.本次為你帶來的是fl studio21破解版&a…