欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot整合Docker實(shí)現(xiàn)一次構(gòu)建到處運(yùn)行的操作方法

 更新時(shí)間:2022年10月17日 16:43:45   作者:微楓Micromaple  
本文講解的是 SpringBoot 引入容器化技術(shù) Docker 實(shí)現(xiàn)一次構(gòu)建到處運(yùn)行,包括鏡像構(gòu)建、Docker倉(cāng)庫(kù)搭建使用、Docker倉(cāng)庫(kù)可視化UI等內(nèi)容,需要的朋友可以參考下

寫(xiě)在前面

本文講解的是 SpringBoot 引入容器化技術(shù) Docker 實(shí)現(xiàn)一次構(gòu)建到處運(yùn)行,包括鏡像構(gòu)建、Docker倉(cāng)庫(kù)搭建使用、Docker倉(cāng)庫(kù)可視化UI等內(nèi)容。

PS:如果你是新手,可以跟著系列專(zhuān)欄的框架搭建先動(dòng)手把項(xiàng)目搭建起來(lái),然后在結(jié)合本期內(nèi)容繼續(xù)深入學(xué)習(xí),這樣會(huì)有更好的效果。

一、容器化部署的好處

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

傳統(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í)行。

二、構(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。代碼如下:

FROM openjdk:8-jre

MAINTAINER Micromaple <micromaple@qq.com>

RUN mkdir /app

COPY my-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"]

EXPOSE 8899
  • 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文件上傳至該目錄。

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

docker build -t my-project-server:v1 .

構(gòu)建成功

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
my-project-server   v1                  ed30386b06d2        11 seconds ago      334MB
openjdk             8-jre               26ac3f63d29f        9 months ago        273MB

三、搭建私服

3.1、搭建 Docker Registry

創(chuàng)建目錄

mkdir -p /usr/local/docker/registry

在該目錄下創(chuàng)建Docker Registrydocker-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-compose up -d

3.2、搭建 Docker Registry WebUI

創(chuàng)建目錄

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

在該目錄下創(chuàng)建Docker Registrydocker-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-compose up -d

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

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ù)

systemctl daemon-reload
systemctl restart docker

3.4、上傳私服

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

查看鏡像

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
my-project-server   v1                  6af7d633afb7        5 seconds ago       334MB
openjdk             8-jre               26ac3f63d29f        9 months ago        273MB

1)、鏡像標(biāo)記

使用 docker tagmy-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]

命令如下:

docker tag my-project-server:v1 192.168.110.158:5000/my-project-server:v1

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

$ docker images
REPOSITORY                               TAG                 IMAGE ID            CREATED             SIZE
192.168.110.158:5000/my-project-server   v1                  6af7d633afb7        3 minutes ago       334MB
my-project-server                        v1                  6af7d633afb7        3 minutes ago       334MB
openjdk                                  8-jre               26ac3f63d29f        9 months ago        273MB

2)、鏡像上傳

使用 docker push 上傳鏡像。

$ docker push 192.168.110.158:5000/my-project-server
The push refers to repository [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:5c8a0efff409649a389d0bc74dda94ca96e67e87c92673b4c7dad0078657af40 size: 2000

3)、查看鏡像

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

$ curl 192.168.110.158:5000/v2/_catalog
{"repositories":["my-project-server"]}

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

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

4)、驗(yàn)證

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

先刪除已有鏡像

docker rmi my-project-server:v1 192.168.110.158:5000/my-project-server:v1

下載鏡像

docker pull 192.168.110.158:5000/my-project-server:v1
$ docker pull 192.168.110.158:5000/my-project-server:v1
v1: Pulling from my-project-server
0e29546d541c: Already exists 
9b829c73b52b: Already exists 
cb5b7ae36172: Already exists 
99ce012bef04: Already exists 
22dc2a72d098: Already exists 
9c69a57e10d9: Already exists 
776f54050ab5: Pull complete 
65a83a9a7871: Pull complete 
Digest: sha256:5c8a0efff409649a389d0bc74dda94ca96e67e87c92673b4c7dad0078657af40
Status: Downloaded newer image for 192.168.110.158:5000/my-project-server:v1
192.168.110.158:5000/my-project-server:v1
$ docker images
REPOSITORY                               TAG                 IMAGE ID            CREATED             SIZE
192.168.110.158:5000/my-project-server   v1                  6af7d633afb7        15 minutes ago      334MB
openjdk                                  8-jre               26ac3f63d29f        9 months ago        273MB

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

四、容器啟動(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 Registrydocker-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-compose up -d

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

docker ps -a

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

http://ip:8899/sys-user/get/all

到此這篇關(guān)于SpringBoot整合Docker實(shí)現(xiàn)一次構(gòu)建到處運(yùn)行的文章就介紹到這了,更多相關(guān)SpringBoot整合Docker內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Swing常用組件之多行文本區(qū)JTextArea

    Swing常用組件之多行文本區(qū)JTextArea

    這篇文章主要為大家詳細(xì)介紹了Swing常用組件之多行文本區(qū)JTextArea,感興趣的朋友可以參考一下
    2016-05-05
  • Java實(shí)現(xiàn)發(fā)送短信驗(yàn)證碼功能

    Java實(shí)現(xiàn)發(fā)送短信驗(yàn)證碼功能

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)發(fā)送短信驗(yàn)證碼功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • 深入SQLite多線程的使用總結(jié)詳解

    深入SQLite多線程的使用總結(jié)詳解

    本篇文章是對(duì)SQLite多線程的使用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • java 字節(jié)流和字符流的區(qū)別詳解

    java 字節(jié)流和字符流的區(qū)別詳解

    這篇文章主要介紹了java 字節(jié)流和字符流的區(qū)別詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • eclipse下整合springboot和mybatis的方法步驟

    eclipse下整合springboot和mybatis的方法步驟

    這篇文章主要介紹了eclipse下整合springboot和mybatis的方法步驟,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-03-03
  • Java實(shí)現(xiàn)堆算法的使用示例

    Java實(shí)現(xiàn)堆算法的使用示例

    本文主要介紹了Java實(shí)現(xiàn)堆算法的使用示例,Java中提供了一個(gè)Heap類(lèi),可以用來(lái)實(shí)現(xiàn)堆的操作,可以實(shí)現(xiàn)如插入、刪除、獲取最大最小值等,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-12-12
  • java開(kāi)發(fā)微服務(wù)架構(gòu)設(shè)計(jì)消息隊(duì)列的水有多深

    java開(kāi)發(fā)微服務(wù)架構(gòu)設(shè)計(jì)消息隊(duì)列的水有多深

    今天我們說(shuō)說(shuō)消息隊(duì)列的問(wèn)題,來(lái)帶大家探一探消息隊(duì)列的水有多深,希望看完本文大家在引入消息隊(duì)列的時(shí)候先想一想,是不是一定要引入?引入消息隊(duì)列后產(chǎn)生的問(wèn)題能不能解決
    2021-10-10
  • Java實(shí)現(xiàn)快速生成詞云圖的示例代碼

    Java實(shí)現(xiàn)快速生成詞云圖的示例代碼

    詞云(Word?Cloud),又稱(chēng)文字云、標(biāo)簽云(Tag?Cloud)、關(guān)鍵詞云(Keyword?Cloud),是對(duì)文本信息中一定數(shù)量的關(guān)鍵詞出現(xiàn)的頻率高低情況的一種可視化展現(xiàn)方式。本文將用Java代碼實(shí)現(xiàn)快速生成詞云圖,需要的可以參考一下
    2023-02-02
  • Java mutable對(duì)象和immutable對(duì)象的區(qū)別說(shuō)明

    Java mutable對(duì)象和immutable對(duì)象的區(qū)別說(shuō)明

    這篇文章主要介紹了Java mutable對(duì)象和immutable對(duì)象的區(qū)別,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • IDEA項(xiàng)目重命名的操作

    IDEA項(xiàng)目重命名的操作

    這篇文章主要介紹了IDEA項(xiàng)目重命名的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-02-02

最新評(píng)論