<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

SpringBoot+Docker實現一次構建到處運行~

jf_ro2CN3Fa ? 來源:CSDN ? 2023-08-30 17:21 ? 次閱讀


一、容器化部署的好處

Docker 作為一種新興的虛擬化方式,它可以更高效的利用系統資源,不需要進行硬件虛擬以及運行完整操作系統等額外開銷。

傳統的虛擬機技術啟動應用服務往往需要數分鐘,而 Docker 容器應用,由于直接運行宿主內核,無需啟動完整的操作系統,因此可以做到秒級、甚至毫秒級的啟動時間。大大的節約了開發、測試、部署的時間。

最重要的是一致的運行環境。Docker 的鏡像提供了除內核外完整的運行時環境,確保了應用運行環境一致性。從而達到真正意義上的 一次構建,到處執行。

基于 Spring Boot + MyBatis Plus + Vue & Element 實現的后臺管理系統 + 用戶小程序,支持 RBAC 動態權限、多租戶、數據權限、工作流、三方登錄、支付、短信、商城等功能

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

二、構建鏡像

2.1、Dockerfile

接著我們開始使用 Dockerfile 來定制我們的鏡像,從而達到容器化的目的。Dockerfile 的本質就是將一系列修改、安裝、構建、操作的命令整合到一起,去構建一個個性化的鏡像,以達到一次構建,到處運行。 接下來我們就來構建自定義鏡像。

在my-project-server模塊下創建docker目錄,在docker目錄下創建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:指定基礎鏡像,項目是使用jdk8開發的項目,所以我們指定的基礎鏡像為openjdk:8-jre
  • MAINTAINER:項目維護人員
  • RUN:執行命令,在根目錄下創建app目錄
  • COPY:將宿主機當前目錄下的my-project-server-1.0.0-SNAPSHOT.jar文件拷貝到app目錄下,并重命名為app.jar
  • ENTRYPOINT:指定容器啟動程序及參數
  • EXPOSE:指定運行時容器提供服務的端口

2.2、開始構建

在虛擬機創建目錄

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

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

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

執行鏡像構建命令

dockerbuild-tmy-project-server:v1.

構建成功

$dockerimages
REPOSITORYTAGIMAGEIDCREATEDSIZE
my-project-serverv1ed30386b06d211secondsago334MB
openjdk8-jre26ac3f63d29f9monthsago273MB

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 實現的后臺管理系統 + 用戶小程序,支持 RBAC 動態權限、多租戶、數據權限、工作流、三方登錄、支付、短信、商城等功能

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

三、搭建私服

3.1、搭建 Docker Registry

創建目錄

mkdir-p/usr/local/docker/registry

在該目錄下創建Docker Registry 的 docker-compose.yml。內容如下:

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

啟動容器

docker-composeup-d

3.2、搭建 Docker Registry WebUI

創建目錄

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

在該目錄下創建Docker Registry 的 docker-compose.yml。內容如下:

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倉庫的IP)
-ENV_DOCKER_REGISTRY_PORT=5000

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

啟動容器

docker-composeup-d

瀏覽器訪問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

需增加如下內容:

"insecure-registries":[
"Docker倉庫的IP:5000"
]

完整daemon.json內容:

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

重新啟動服務

systemctldaemon-reload
systemctlrestartdocker

3.4、上傳私服

搭建以及配置完成后,需要將我們之前構建的鏡像上傳至我們自己的Docker倉庫。

查看鏡像

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

使用 docker tag 將 my-project-server:v1 這個鏡像標記為 192.168.110.158:5000/my-project-server:v1。

192.168.110.158為我的Docker倉庫的IP。

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

命令如下:

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

標記后,查看鏡像

$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)、驗證

此時我們將本地鏡像刪除,嘗試從私有倉庫下載這個鏡像

先刪除已有鏡像

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

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

四、容器啟動

鏡像構建并上傳至完成后,可以直接使用Docker Compose來啟動容器。實現一次構建到處運行。

創建目錄

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

在該目錄下創建Docker Registry 的 docker-compose.yml。內容如下:

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

啟動容器

docker-composeup-d

查看容器啟動狀態

dockerps-a

訪問查詢所有用戶接口

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


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 容器
    +關注

    關注

    0

    文章

    481

    瀏覽量

    21877
  • spring
    +關注

    關注

    0

    文章

    332

    瀏覽量

    14161
  • 虛擬機
    +關注

    關注

    1

    文章

    855

    瀏覽量

    27376
  • SpringBoot
    +關注

    關注

    0

    文章

    172

    瀏覽量

    106

原文標題:SpringBoot + Docker 實現一次構建到處運行~

文章出處:【微信號:芋道源碼,微信公眾號:芋道源碼】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    ADUCM360怎樣才能實現AD每0.2秒采集一次數據?

    ADUCM360怎樣才能實現AD每0.2秒采集一次數據?用定時器每0.2秒中斷一次,在定時器中斷中開始AD單轉換一次,可以嗎? void
    發表于 01-12 06:34

    docker核心組件有哪些

    Docker 是一種開源的容器化平臺,它能夠實現將應用程序及其依賴項打包到一個可移植的容器中,從而實現快速、可重復、可擴展的部署和管理。Docker 的核心組件包括
    的頭像 發表于 11-23 09:47 ?735次閱讀

    docker進入容器的方法有哪些

    Docker是一種流行的容器化平臺,它能夠快速構建、交付和運行應用程序。在使用Docker時,我們經常需要進入容器進行調試、管理和運行命令等
    的頭像 發表于 11-23 09:45 ?3390次閱讀

    Docker與虛擬機的區別

    Docker和虛擬機是兩種不同的虛擬化技術,它們在實現方式、資源消耗、運行性能等方面存在許多差異。本文將會詳細介紹它們的區別。 一、實現方式 1.1 虛擬機 虛擬機是通過在物理主機上模
    的頭像 發表于 11-23 09:37 ?2368次閱讀

    docker exec命令的使用方法

    Docker是一種開源的容器化平臺,可以讓開發人員在容器中打包和運行應用程序。它提供了一種快速、可靠和一致的方式來構建、部署和運行應用程序。Dock
    的頭像 發表于 11-23 09:33 ?748次閱讀

    Jenkins+Docker一鍵自動化部署SpringBoot應用最精簡流程

    簡述實現步驟:在docker安裝jenkins,配置jenkins基本信息,利用Dockerfile和shell腳本實現項目自動拉取打包并運行。
    的頭像 發表于 11-06 16:27 ?581次閱讀
    Jenkins+<b class='flag-5'>Docker</b>一鍵自動化部署<b class='flag-5'>SpringBoot</b>應用最精簡流程

    如何用Springboot整合Redis

    本篇文件我們來介紹如何用Springboot整合Redis。 1、Docker 安裝 Redis 1.1 下載鏡像 docker pull redis: 6 . 2 . 6 1.2 創建配置文件
    的頭像 發表于 10-08 14:56 ?327次閱讀
    如何用<b class='flag-5'>Springboot</b>整合Redis

    SpringBoot 如何實現熱部署

    SpringBoot 如何實現熱部署? 1、熱部署的優點 開發周期通常包括編寫代碼、編譯、部署和測試幾個步驟。在一個快速發展的項目中,這個周期需要盡可能地縮短。熱部署能讓開發者在代碼更改后立即看到結果,從而加速開發和測試過程。 除了加速開發,熱部署也讓應用
    的頭像 發表于 09-30 10:16 ?410次閱讀
    <b class='flag-5'>SpringBoot</b> 如何<b class='flag-5'>實現</b>熱部署

    如何在macOS系統中用Docker運行macOS鏡像呢?

    macOS Containers 是一群開發者基于 chroot 打造的工具,能讓你在 macOS 用 Docker 運行 macOS 鏡像。
    的頭像 發表于 09-28 09:24 ?659次閱讀
    如何在macOS系統中用<b class='flag-5'>Docker</b><b class='flag-5'>運行</b>macOS鏡像呢?

    docker基礎知識和使用bmnnsdk時的docker常用命令

    的物理機上運行樣。有了 Docker,就不用擔心環境問題。 1.2 image文件與容器container Docker 把應用程序及其依賴,打包在 image 文件里面。只有
    發表于 09-18 07:59

    介紹一款基于docker的滲透測試工具箱

    新版本基于docker構建,只要是安裝了docker的主機的都可以正常運行,老版本基于shell腳本構建,只能在linux和mac環境下
    發表于 08-18 10:37 ?263次閱讀
    介紹一款基于<b class='flag-5'>docker</b>的滲透測試工具箱

    Docker入門指南

    您能夠更高效地開發,因為您可以專注于應用程序。好處包括: ?提高了生產力?提高了基礎設施利用率?能夠運行傳統環境和新架構我們還將向您展示如何使用Arm和Docker實現以下功能: ?探索多種計算選擇
    發表于 08-02 06:09

    使用Docker安裝WordPress教程

    本教程將向您展示如何使用 Docker Compose 在 Docker 容器中運行 WordPress 安裝。
    的頭像 發表于 07-28 11:39 ?1074次閱讀
    使用<b class='flag-5'>Docker</b>安裝WordPress教程

    docker容器中構建yocto imx-image時出錯怎么解決?

    我正在嘗試根據規范 <>(修訂版 LF5.15.5_1.0.0 — 2022 年 3 月 31 日)中的第 3.1 章 Dockerdocker 容器中構建
    發表于 06-08 09:30

    關于Jenkins+docker+springboot一鍵自動部署項目

    本文章實現最簡單全面的Jenkins+docker+springboot 一鍵自動部署項目,步驟齊全,少走坑路。
    的頭像 發表于 05-16 08:59 ?599次閱讀
    關于Jenkins+<b class='flag-5'>docker+springboot</b>一鍵自動部署項目
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>