0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

SpringBoot+Docker實(shí)現(xiàn)一次構(gòu)建到處運(yùn)行~

jf_ro2CN3Fa ? 來(lái)源:CSDN ? 2023-08-30 17:21 ? 次閱讀


一、容器化部署的好處

Docker 作為一種新興的虛擬化方式,它可以更高效的利用系統(tǒng)資源,不需要進(jìn)行硬件虛擬以及運(yùn)行完整操作系統(tǒng)等額外開(kāi)銷。

傳統(tǒng)的虛擬機(jī)技術(shù)啟動(dòng)應(yīng)用服務(wù)往往需要數(shù)分鐘,而 Docker 容器應(yīng)用,由于直接運(yùn)行宿主內(nèi)核,無(wú)需啟動(dòng)完整的操作系統(tǒng),因此可以做到秒級(jí)、甚至毫秒級(jí)的啟動(dòng)時(shí)間。大大的節(jié)約了開(kāi)發(fā)、測(cè)試、部署的時(shí)間。

最重要的是一致的運(yùn)行環(huán)境。Docker 的鏡像提供了除內(nèi)核外完整的運(yùn)行時(shí)環(huán)境,確保了應(yīng)用運(yùn)行環(huán)境一致性。從而達(dá)到真正意義上的 一次構(gòu)建,到處執(zhí)行。

基于 Spring Boot + MyBatis Plus + Vue & Element 實(shí)現(xiàn)的后臺(tái)管理系統(tǒng) + 用戶小程序,支持 RBAC 動(dòng)態(tài)權(quán)限、多租戶、數(shù)據(jù)權(quán)限、工作流、三方登錄、支付、短信、商城等功能

  • 項(xiàng)目地址:https://github.com/YunaiV/ruoyi-vue-pro
  • 視頻教程:https://doc.iocoder.cn/video/

二、構(gòu)建鏡像

2.1、Dockerfile

接著我們開(kāi)始使用 Dockerfile 來(lái)定制我們的鏡像,從而達(dá)到容器化的目的。Dockerfile 的本質(zhì)就是將一系列修改、安裝、構(gòu)建、操作的命令整合到一起,去構(gòu)建一個(gè)個(gè)性化的鏡像,以達(dá)到一次構(gòu)建,到處運(yùn)行。 接下來(lái)我們就來(lái)構(gòu)建自定義鏡像。

在my-project-server模塊下創(chuàng)建docker目錄,在docker目錄下創(chuàng)建Dockerfile。代碼如下:

FROMopenjdk:8-jre

MAINTAINERMicromaple@qq.com>

RUNmkdir/app

COPYmy-project-server-1.0.0-SNAPSHOT.jar/app/app.jar

ENTRYPOINT["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app/app.jar","--spring.profiles.active=prod,druid-prod"]

EXPOSE8899
  • FROM:指定基礎(chǔ)鏡像,項(xiàng)目是使用jdk8開(kāi)發(fā)的項(xiàng)目,所以我們指定的基礎(chǔ)鏡像為openjdk:8-jre
  • MAINTAINER:項(xiàng)目維護(hù)人員
  • RUN:執(zhí)行命令,在根目錄下創(chuàng)建app目錄
  • COPY:將宿主機(jī)當(dāng)前目錄下的my-project-server-1.0.0-SNAPSHOT.jar文件拷貝到app目錄下,并重命名為app.jar
  • ENTRYPOINT:指定容器啟動(dòng)程序及參數(shù)
  • EXPOSE:指定運(yùn)行時(shí)容器提供服務(wù)的端口

2.2、開(kāi)始構(gòu)建

在虛擬機(jī)創(chuàng)建目錄

mkdir-p/usr/local/docker/my-project/docker

將打包后的my-project-server-1.0.0-SNAPSHOT.jar文件和Dockerfile文件上傳至該目錄。

99a574ca-46dc-11ee-a2ef-92fbcf53809c.png

執(zhí)行鏡像構(gòu)建命令

dockerbuild-tmy-project-server:v1.

構(gòu)建成功

$dockerimages
REPOSITORYTAGIMAGEIDCREATEDSIZE
my-project-serverv1ed30386b06d211secondsago334MB
openjdk8-jre26ac3f63d29f9monthsago273MB

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 實(shí)現(xiàn)的后臺(tái)管理系統(tǒng) + 用戶小程序,支持 RBAC 動(dòng)態(tài)權(quán)限、多租戶、數(shù)據(jù)權(quán)限、工作流、三方登錄、支付、短信、商城等功能

  • 項(xiàng)目地址:https://github.com/YunaiV/yudao-cloud
  • 視頻教程:https://doc.iocoder.cn/video/

三、搭建私服

3.1、搭建 Docker Registry

創(chuàng)建目錄

mkdir-p/usr/local/docker/registry

在該目錄下創(chuàng)建Docker Registry 的 docker-compose.yml。內(nèi)容如下:

cd/usr/local/docker/registry
version:'3.1'
services:
registry:
image:registry
restart:always
container_name:registry
ports:
-5000:5000
volumes:
-./data:/var/lib/registry

啟動(dòng)容器

docker-composeup-d

3.2、搭建 Docker Registry WebUI

創(chuàng)建目錄

mkdir-p/usr/local/docker/docker-registry-frontend

在該目錄下創(chuàng)建Docker Registry 的 docker-compose.yml。內(nèi)容如下:

cd/usr/local/docker/docker-registry-frontend
version:'3.1'
services:
frontend:
image:konradkleine/docker-registry-frontend:v2
ports:
-8080:80
volumes:
-./certs/frontend.crt:/etc/apache2/server.crt:ro
-./certs/frontend.key:/etc/apache2/server.key:ro
environment:
-ENV_DOCKER_REGISTRY_HOST=192.168.110.158(Docker倉(cāng)庫(kù)的IP)
-ENV_DOCKER_REGISTRY_PORT=5000

需要將ENV_DOCKER_REGISTRY_HOST的值更改為自己搭建的 DockerRegistry 服務(wù)的IP

啟動(dòng)容器

docker-composeup-d

瀏覽器訪問(wèn)http://192.168.110.158:8080/,效果如下:

99b7b73e-46dc-11ee-a2ef-92fbcf53809c.png

3.3、客戶端配置

在需要上傳 Docker 鏡像的客戶端需配置daemon.json,完整路徑在 /etc/docker/daemon.json

vi/etc/docker/daemon.json

需增加如下內(nèi)容:

"insecure-registries":[
"Docker倉(cāng)庫(kù)的IP:5000"
]

完整daemon.json內(nèi)容:

{
"registry-mirrors":[
"https://xxx.mirror.aliyuncs.com"
],
"insecure-registries":[
"192.168.110.158:5000"
]
}
  • registry-mirrors:為鏡像加速地址,這里為我自己申請(qǐng)的加速地址。大家可以自己申請(qǐng)一個(gè),也可以在網(wǎng)上找一個(gè)。
  • insecure-registries:Docker倉(cāng)庫(kù)的IP。

重新啟動(dòng)服務(wù)

systemctldaemon-reload
systemctlrestartdocker

3.4、上傳私服

搭建以及配置完成后,需要將我們之前構(gòu)建的鏡像上傳至我們自己的Docker倉(cāng)庫(kù)。

查看鏡像

$dockerimages
REPOSITORYTAGIMAGEIDCREATEDSIZE
my-project-serverv16af7d633afb75secondsago334MB
openjdk8-jre26ac3f63d29f9monthsago273MB
1)、鏡像標(biāo)記

使用 docker tag 將 my-project-server:v1 這個(gè)鏡像標(biāo)記為 192.168.110.158:5000/my-project-server:v1。

192.168.110.158為我的Docker倉(cāng)庫(kù)的IP。

格式為:docker tag IMAGE[:TAG] [REGISTRY_HOST[:REGISTRY_PORT]/]REPOSITORY[:TAG]

命令如下:

dockertagmy-project-server:v1192.168.110.158:5000/my-project-server:v1

標(biāo)記后,查看鏡像

$dockerimages
REPOSITORYTAGIMAGEIDCREATEDSIZE
192.168.110.158:5000/my-project-serverv16af7d633afb73minutesago334MB
my-project-serverv16af7d633afb73minutesago334MB
openjdk8-jre26ac3f63d29f9monthsago273MB
2)、鏡像上傳

使用 docker push 上傳鏡像。

$dockerpush192.168.110.158:5000/my-project-server
Thepushreferstorepository[192.168.110.158:5000/my-project-server]
5b9e874b9f9c:Pushed
e87c042d22f8:Pushed
b4cfcb8385a8:Pushed
2b730cf18c09:Pushed
edeaba958753:Pushed
8bf42db0de72:Pushed
31892cc314cb:Pushed
11936051f93b:Pushed
v1:digest:sha256:5c8a0efff409649a389d0bc74dda94ca96e67e87c92673b4c7dad0078657af40size:2000
3)、查看鏡像

使用 curl 查看 192.168.110.158:5000/v2/_catalog 地址,可以看到上傳成功的鏡像

$curl192.168.110.158:5000/v2/_catalog
{"repositories":["my-project-server"]}

這里我們可以成功的看到我們上傳的鏡像。

我們也可以在我們剛剛搭建的WebUI上可視化的查看我們的鏡像。效果圖如下:

99d09092-46dc-11ee-a2ef-92fbcf53809c.png
4)、驗(yàn)證

此時(shí)我們將本地鏡像刪除,嘗試從私有倉(cāng)庫(kù)下載這個(gè)鏡像

先刪除已有鏡像

dockerrmimy-project-server:v1192.168.110.158:5000/my-project-server:v1

下載鏡像

dockerpull192.168.110.158:5000/my-project-server:v1
$dockerpull192.168.110.158:5000/my-project-server:v1
v1:Pullingfrommy-project-server
0e29546d541c:Alreadyexists
9b829c73b52b:Alreadyexists
cb5b7ae36172:Alreadyexists
99ce012bef04:Alreadyexists
22dc2a72d098:Alreadyexists
9c69a57e10d9:Alreadyexists
776f54050ab5:Pullcomplete
65a83a9a7871:Pullcomplete
Digest:sha256:5c8a0efff409649a389d0bc74dda94ca96e67e87c92673b4c7dad0078657af40
Status:Downloadednewerimagefor192.168.110.158:5000/my-project-server:v1
192.168.110.158:5000/my-project-server:v1
$dockerimages
REPOSITORYTAGIMAGEIDCREATEDSIZE
192.168.110.158:5000/my-project-serverv16af7d633afb715minutesago334MB
openjdk8-jre26ac3f63d29f9monthsago273MB

我們可以看到可以正常拉取。

四、容器啟動(dòng)

鏡像構(gòu)建并上傳至完成后,可以直接使用Docker Compose來(lái)啟動(dòng)容器。實(shí)現(xiàn)一次構(gòu)建到處運(yùn)行。

創(chuàng)建目錄

mkdir-p/usr/local/docker/my-project

在該目錄下創(chuàng)建Docker Registry 的 docker-compose.yml。內(nèi)容如下:

cd/usr/local/docker/my-project
version:'3.1'
services:
my_project_server:
image:192.168.110.158:5000/my-project-server:v1
container_name:my-project-server
restart:always
ports:
-8899:8899
volumes:
-./logs:/logs
environment:
TZ:Asia/Shanghai

啟動(dòng)容器

docker-composeup-d

查看容器啟動(dòng)狀態(tài)

dockerps-a

訪問(wèn)查詢所有用戶接口

  • http://ip:8899/sys-user/get/all
99e7d158-46dc-11ee-a2ef-92fbcf53809c.png


聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 容器
    +關(guān)注

    關(guān)注

    0

    文章

    507

    瀏覽量

    22369
  • spring
    +關(guān)注

    關(guān)注

    0

    文章

    340

    瀏覽量

    14887
  • 虛擬機(jī)
    +關(guān)注

    關(guān)注

    1

    文章

    962

    瀏覽量

    29068
  • SpringBoot
    +關(guān)注

    關(guān)注

    0

    文章

    175

    瀏覽量

    321

原文標(biāo)題:SpringBoot + Docker 實(shí)現(xiàn)一次構(gòu)建到處運(yùn)行~

文章出處:【微信號(hào):芋道源碼,微信公眾號(hào):芋道源碼】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    參考STM32 MPU生態(tài)資源利用Yocto構(gòu)建STM32MP2芯片鏡像運(yùn)行docker

    的搭建。 拉取Yocto所需的配置數(shù)據(jù)庫(kù) 接下來(lái)根據(jù)OpenSTLinux distribution 指南中的介紹,下載STM32MPU的Yocto開(kāi)發(fā)所需的meta數(shù)據(jù)庫(kù)(其中包含構(gòu)建系列配置
    發(fā)表于 05-10 16:47

    一次消諧裝置與二消諧裝置區(qū)別、一次消諧器與二消諧器的區(qū)別

    ~35kV中性點(diǎn)不接地系統(tǒng);二消諧器適用于復(fù)雜諧振工況,可區(qū)分諧振類型并智能動(dòng)作。 兩者常配合使用,一次消諧提供基礎(chǔ)防護(hù),二消諧實(shí)現(xiàn)精準(zhǔn)抑制,共同保障系統(tǒng)安全。
    的頭像 發(fā)表于 05-07 09:58 ?364次閱讀
    <b class='flag-5'>一次</b>消諧裝置與二<b class='flag-5'>次</b>消諧裝置區(qū)別、<b class='flag-5'>一次</b>消諧器與二<b class='flag-5'>次</b>消諧器的區(qū)別

    Docker Compose的常用命令

    。它通過(guò)個(gè)配置文件(docker-compose.yml)來(lái)詳細(xì)定義多個(gè)容器之間的關(guān)聯(lián)、網(wǎng)絡(luò)設(shè)置、服務(wù)端口等信息。使用條簡(jiǎn)單的命令,就可以輕松啟動(dòng)、停止和管理這些容器,極大地簡(jiǎn)化了多容器應(yīng)用的部署與管理流程,方便
    的頭像 發(fā)表于 04-30 13:40 ?270次閱讀

    【技術(shù)案例】Android in Docker

    Docker介紹Docker個(gè)開(kāi)源的容器化平臺(tái),用于打包、分發(fā)和運(yùn)行應(yīng)用程序。它通過(guò)將應(yīng)用及其所有依賴打包到獨(dú)立的容器中,確保應(yīng)用在不同環(huán)境中
    的頭像 發(fā)表于 04-02 16:33 ?518次閱讀
    【技術(shù)案例】Android in <b class='flag-5'>Docker</b>

    請(qǐng)問(wèn)init_ipc_shm() 是否只初始化一次?

    通過(guò)在 S32G A 核上使用 C(或 C)創(chuàng)建多個(gè)項(xiàng)目來(lái)開(kāi)發(fā) IPCF 功能時(shí),是init_ipc_shm()允許初始化已配置的共享資源的函數(shù)僅一次運(yùn)行時(shí)?如果是,系統(tǒng)級(jí)別的最佳架構(gòu)建議是什么?我的想法是
    發(fā)表于 03-25 08:05

    基于Docker鏡像逆向生成Dockerfile

    在本文中, 我們將通過(guò)理解Docker鏡像如何存儲(chǔ)數(shù)據(jù), 以及如何使用工具查看鏡像方方面面的信息來(lái)逆向工程個(gè)Docker鏡像; 以及如何使用Python的Docker API來(lái)
    的頭像 發(fā)表于 03-10 09:45 ?473次閱讀
    基于<b class='flag-5'>Docker</b>鏡像逆向生成Dockerfile

    基于 Docker 與 Jenkins 實(shí)現(xiàn)自動(dòng)化部署

    優(yōu)化,為 Docker 容器化應(yīng)用與 Jenkins 自動(dòng)化流水線提供了理想的運(yùn)行環(huán)境。無(wú)論是快速構(gòu)建、測(cè)試還是部署,F(xiàn)lexus X 都能確保流程順暢無(wú)阻,大幅提升軟件開(kāi)發(fā)與交付效率。立即擁抱華為云
    的頭像 發(fā)表于 01-07 17:25 ?462次閱讀
    基于 <b class='flag-5'>Docker</b> 與 Jenkins <b class='flag-5'>實(shí)現(xiàn)</b>自動(dòng)化部署

    Docker運(yùn)行環(huán)境安裝

    作者:京東科技 林中 Docker個(gè)開(kāi)放的平臺(tái),用于開(kāi)發(fā)、發(fā)布和運(yùn)行應(yīng)用程序。Docker分離了應(yīng)用程序和運(yùn)行應(yīng)用的基礎(chǔ)設(shè)施,從而
    的頭像 發(fā)表于 10-29 11:28 ?576次閱讀

    一次電源與二電源有什么不同

    在電力系統(tǒng)和電子設(shè)備的供電領(lǐng)域中,一次電源與二電源是兩個(gè)至關(guān)重要的概念。它們各自承擔(dān)著不同的功能和角色,共同確保電力供應(yīng)的穩(wěn)定性和可靠性。本文將對(duì)一次電源與二電源的定義、區(qū)別以及它
    的頭像 發(fā)表于 10-10 14:10 ?4643次閱讀

    一次電池分類以及應(yīng)用場(chǎng)景詳解

    01 一次電池簡(jiǎn)介 一次電池即原電池(primarycell、primarybattery)(俗稱干電池),是放電后不能再充電使其復(fù)原的電池,通電電池有正極、負(fù)極電解以及容器和隔膜等組成。 一次電池
    的頭像 發(fā)表于 09-30 17:52 ?2453次閱讀
    <b class='flag-5'>一次</b>電池分類以及應(yīng)用場(chǎng)景詳解

    無(wú)線時(shí)鐘秒轉(zhuǎn)一次思路怎么設(shè)置

    轉(zhuǎn)動(dòng)一次的機(jī)械裝置。 電子設(shè)計(jì) :設(shè)計(jì)電路來(lái)控制機(jī)械裝置的轉(zhuǎn)動(dòng)。 無(wú)線通信 :實(shí)現(xiàn)時(shí)鐘與控制器之間的無(wú)線通信。 編程 :編寫(xiě)控制軟件,確保時(shí)鐘的精確計(jì)時(shí)和無(wú)線通信。 電源管理 :為整個(gè)系統(tǒng)提供穩(wěn)定的電源。 2. 機(jī)械設(shè)計(jì) 2.1 轉(zhuǎn)動(dòng)機(jī)
    的頭像 發(fā)表于 09-07 09:21 ?502次閱讀

    labview如何做到一次觸發(fā)采集一次

    最近在做個(gè)電壓測(cè)試模塊,要求是在個(gè)時(shí)間段內(nèi),出現(xiàn)個(gè)上升沿觸發(fā)采集,并且只采集一次,采集次數(shù)為出現(xiàn)上升沿的次數(shù),采集時(shí)間,采樣率及單
    發(fā)表于 08-07 10:16

    手動(dòng)構(gòu)建Docker鏡像的方法

    不推薦使用docker commit命令,而應(yīng)該使用更靈活、更強(qiáng)大的dockerfile來(lái)構(gòu)建docker鏡像。
    的頭像 發(fā)表于 08-05 15:30 ?813次閱讀
    手動(dòng)<b class='flag-5'>構(gòu)建</b><b class='flag-5'>Docker</b>鏡像的方法

    ARM平臺(tái)實(shí)現(xiàn)Docker容器技術(shù)

    Docker的鏡像提供了除內(nèi)核外完整的運(yùn)行時(shí)環(huán)境,確保環(huán)境致性,從而不會(huì)在出現(xiàn)“這段代碼在我機(jī)器上沒(méi)問(wèn)題”這類問(wèn)題。 持續(xù)支付和部署:對(duì)開(kāi)發(fā)和運(yùn)維人員來(lái)說(shuō),最希望就是一次創(chuàng)建和部署,
    發(fā)表于 07-25 14:36

    ARM平臺(tái)實(shí)現(xiàn)Docker容器技術(shù)

    Docker的鏡像提供了除內(nèi)核外完整的運(yùn)行時(shí)環(huán)境,確保環(huán)境致性,從而不會(huì)在出現(xiàn)“這段代碼在我機(jī)器上沒(méi)問(wèn)題”這類問(wèn)題。持續(xù)支付和部署:對(duì)開(kāi)發(fā)和運(yùn)維人員來(lái)說(shuō),最希望就是一次創(chuàng)建和部署,可
    發(fā)表于 07-17 11:05