最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

docker部署java項目的詳細步驟

 更新時間:2025年03月21日 10:04:15   作者:java阿杜  
這篇文章主要介紹了docker部署java項目的詳細步驟,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

docker部署java項目步驟

在平常的開發(fā)工作中,我們經(jīng)常需要部署項目,開發(fā)測試完成后,最關(guān)鍵的一步就是部署。

今天我們以若依項目為例,總結(jié)下部署項目的整體流程。

簡單來說:

  • 第一步:安裝項目所需的中間件;
  • 第二步:將項目打包成 jar 包;
  • 第三步:編寫 Dockerfile 文件,構(gòu)建鏡像;
  • 第四步:編寫 docker-compose.yml 文件;
  • 第五步:編寫 nginx.conf 文件;
  • 第六步:啟動項目,進行測試;

1:安裝項目所需中間件

項目部署依賴的中間件,如數(shù)據(jù)庫 mysql 、緩存 redis、負載均衡 nginx 等,這些中間件的安裝就不在這兒一 一贅述了。如果有不清楚的小伙伴,可以看我之前寫的幾篇文章,如下:

2:將項目打成 jar 包

部署不同的環(huán)境,需要選擇不同的配置文件,部署測試環(huán)境一般選擇 application-test.yml 文件打包,部署生產(chǎn)環(huán)境一般選擇 application-prod.yml 文件。

打 jar 包時一定注意本地修改不需要提交的配置,先回滾,然后拉取最新的代碼,點擊 maven clean,然后點擊 package 打包,打包完后在 target 目錄。將 jar 包上傳到服務(wù)器指定的目錄。

注意:

比如在服務(wù)器上新建一個 /docker/ruoyi/ 的目錄,那么 jar 包放在這個目錄下,在這個目錄下再新建 Dockerfile 文件 和 docker-compose.yml 文件

如下所示:

3:編寫 Dockerfile 文件,構(gòu)建鏡像

Dockerfile文件示例:

# 使用OpenJDK 17基礎(chǔ)鏡像
FROM openjdk:17
# 創(chuàng)建一個名為/ruoyi/logs的目錄
RUN mkdir -p /ruoyi/logs
# 切換工作目錄
WORKDIR /ruoyi
# 配置環(huán)境變量
ENV SERVER_PORT=8008 \
    LANG=C.UTF-8 \
    LC_ALL=C.UTF-8

# 暴露應(yīng)用端口
EXPOSE 8008

# 添加應(yīng)用Jar包到容器中
ADD ruoyi-admin.jar ./app.jar

# 設(shè)置啟動命令
ENTRYPOINT ["java", \
           "-Dserver.port=${SERVER_PORT}", \
           "-Xlog:gc*:time,tags,level", \
           "-XX:+UseZGC", \
           "-jar", "app.jar"]

Dockerfile文件內(nèi)容釋義

1):FROM openjdk:17: 使用OpenJDK 17基礎(chǔ)鏡像

2):RUN mkdir -p /ruoyi/logs:創(chuàng)建一個名為/ruoyi/logs的目錄,即日志目錄

3):WORKDIR /ruoyi:切換工作目錄

4):ENV SERVER_PORT=8008 \

LANG=C.UTF-8 \
LC_ALL=C.UTF-8

配置環(huán)境變量,Docker 鏡像構(gòu)建時設(shè)置了三個環(huán)境變量,分別是服務(wù)端口和字符編碼相關(guān)的環(huán)境變量,LANG=C.UTF-8 和 LC_ALL=C.UTF-8:這兩個環(huán)境變量用于設(shè)置字符編碼和語言環(huán)境,\ 末尾的反斜杠 \ 是行延續(xù)符,表示下一行是當(dāng)前命令的延續(xù)

5):EXPOSE 8008:暴露8008端口

6):ADD ruoyi-admin.jar ./app.jar:

添加應(yīng)用Jar包到容器中,ADD:這是 Dockerfile 里用于復(fù)制文件和目錄的指令,ruoyi-admin.jar:這是位于宿主機上的源文件路徑,./app.jar:這是目標(biāo)路徑,指定將源文件復(fù)制到 Docker 鏡像中的位置和文件名。./ 表示鏡像中的當(dāng)前 # 工作目錄,將源文件 ruoyi-admin.jar 復(fù)制到鏡像的當(dāng)前工作目錄下,并命名為 app.jar

7):

ENTRYPOINT ["java", \
"-Dserver.port=${SERVER_PORT}", \
"-Xlog:gc*:time,tags,level", \
"-XX:+UseZGC", \
"-jar", "app.jar"]
  • a:ENTRYPOINT 關(guān)鍵字:這是 Dockerfile 里用來定義容器啟動命令的指令。
  • b:"java":表明要執(zhí)行的是 Java 虛擬機。
  • c:"-Dserver.port=${SERVER_PORT}":設(shè)置 Java 虛擬機的系統(tǒng)屬性。server.port 通常用于指定 Spring Boot 應(yīng)用程序監(jiān)聽的端口,#${SERVER_PORT} 是一個環(huán)境變量引用,其值在之前的 ENV 指令中設(shè)置為 8008,這意味著應(yīng)用程序會監(jiān)聽 8008 端口。
  • d:"-Xlog:gc*:time,tags,level":開啟 Java 垃圾回收(GC)日志記錄功能。gc* 表示記錄所有與垃圾回# 收相關(guān)的事件,time,tags,level 表示日志中要包含時間、事件標(biāo)簽和日志級別等信息。
  • e:"-XX:+UseZGC":啟用 Z Garbage Collector(ZGC),這是 Java 11 及以上版本引入的一種可擴展的低# 延遲垃圾回收器,能顯著減少垃圾回收停頓時間。
  • f:"-jar":告訴 Java 虛擬機要執(zhí)行一個 JAR 包,"app.jar":指定要執(zhí)行的 JAR 包名稱,這個 JAR 包是之前使用 ADD 或 COPY 指令復(fù)制到鏡像中的。

編寫完 Dockerfile 文件后,這個時候就可以構(gòu)建鏡像了,命令:docker build -t 鏡像名稱:鏡像版本 . ,如 docker build -t ruoyi:v1.0 . 注意版本后面有個 空格 點。使用點 . :表示使用當(dāng)前目錄下的 Dockerfile,如果不加這個點,Docker 不會知道從哪里獲取 Dockerfile。鏡像構(gòu)建完成后,可以使用 docker images 查看生成的鏡像:

4:編寫 docker-compose.yml 文件

docker-compose.yml 文件示例:

services:
  ruoyi-admin:
    image: ruoyi-admin:v1.0
    container_name : ruoyi-admin
    environment:
      - SERVER_PORT=8008
	  # 可選,Java 啟動參數(shù)
      - JAVA_OPTS="-Xmx2g -Xms2g" 
      - TZ=Asia/Shanghai
    restart: always
    network_mode: "host"

docker-compose.yml 文件內(nèi)容釋義

1):image: ruoyi-admin:v1.0:服務(wù)會使用ruoyi-admin:v1.0鏡像來創(chuàng)建容器

2):container_name:容器名稱

3):SERVER_PORT=8008:定義環(huán)境變量

4):- JAVA_OPTS="-Xmx2g -Xms2g":可選參數(shù),-Xmx用來設(shè)定 JVM 堆內(nèi)存的最大使用量;-Xms用于設(shè)置 JVM 堆內(nèi)存的初始使用量。JAVA_OPTS="-Xmx2g -Xms2g" 把 JVM 堆內(nèi)存的初始大小和最大大小都設(shè)置為 2GB。這么做可以避免在應(yīng)用程序運行過程中頻繁進行堆內(nèi)存的擴容和縮容操作,從而提升性能。不過,設(shè)置時要依據(jù)應(yīng)用程序的實際內(nèi)存需求和服務(wù)器的可用內(nèi)存來合理調(diào)整,防止出現(xiàn)內(nèi)存不足或者浪費的情況。

5):- TZ=Asia/Shanghai:把容器內(nèi)的時區(qū)指定為 Asia/Shanghai(即上海所在的時區(qū),也就是中國標(biāo)準(zhǔn)時間,UTC+8)。這樣容器內(nèi)運行的應(yīng)用程序所顯示和處理的時間會UTC+8時區(qū)處理。

6):restart: always:為容器指定了一種重啟策略,確保容器在各種情況下都能盡可能保持運行狀態(tài)。當(dāng)容器由于各種原因(如正常退出、異常崩潰、宿主機重啟等)停止運行時,Docker 會依據(jù)此策略自動嘗試重啟容器。除了always,還有其他幾種重啟策略:

  • no:默認(rèn)策略,容器停止后不會自動重啟。
  • on-failure:只有當(dāng)容器以非零退出碼退出時,Docker 才會嘗試重啟它??梢酝ㄟ^ on-failure: N 的形式指定最多重啟 N 次。
  • unless-stopped:容器停止后,除非手動停止(如使用 docker stop 命令),否則 Docker 會在 Docker 守護進程重啟或宿主機重啟后自動重啟容器。

7):network_mode: "host":指定容器使用宿主機的網(wǎng)絡(luò),即容器直接使用宿主機的網(wǎng)絡(luò)接口,而非創(chuàng)建獨立的 Docker 網(wǎng)絡(luò)。

5:配置 nginx.conf

nginx.conf 文件示例:

user  nginx;
worker_processes  auto;

pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  60;

	server {
        listen 80;
        server_name localhost;
        
	    charset utf-8;

        location / {
           proxy_pass  http://localhost:8008;
           proxy_set_header Host $host;
           proxy_set_header X-Real-IP $remote_addr;
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }
}

6:啟動項目,測試

1):進入 /doker/ruoyi/ 目錄下,即 docker-compose.yml 文件目錄,使用 docker compose up -d 命令啟動容器,啟動完成后可以使用 docker ps 命令查看啟動的容器,信息如下:

使用 docker logs -f 容器id 查看啟動日志,啟動成功:

2):訪問系統(tǒng),nginx 配置監(jiān)聽 80 端口,所以訪問地址為:http:ip地址:80,訪問成功,頁面如下:

可能會遇到的問題:項目啟動成功,訪問失敗,可以查看項目端口是否因沒開防火墻導(dǎo)致無法訪問。如果是,解決步驟如下:

1):查看防火墻開的端口:firewall-cmd --zone=public --list-ports

2):若端口未開,則添加,比如開放 8008 端口:firewall-cmd --zone=public --add-port=8008/tcp --permanent

3):修改完成后,重啟防火墻:firewall-cmd --reload

以上為 docker 部署項目的基本步驟。

主要是Dockerfile文件的編寫,第一次構(gòu)建鏡像比較慢,因為要下載依賴的基礎(chǔ)鏡像,只需耐心等待即可。

Dockerfile文件有問題,會導(dǎo)致構(gòu)建鏡像失敗。構(gòu)建完成后,可以使用 docker images 查看構(gòu)建的鏡像。

啟動容器可以直接使用 docker run 命令后面跟啟動參數(shù)啟動,這樣做不好的地方每次啟動項目,都要輸入一 長串命令,不便于使用,在docker-compose.yml文件里面編寫啟動命令,可以更好的管理啟動命令,所以推薦使用docker-compose.yml文件方式。

在項目目錄使用 docker compose up -d 命令啟動就可以,docker compose up -d,帶上 -d 是非阻塞的,不阻塞當(dāng)前的命令窗口。使用 docker logs -f 容器id 或者 容器名稱 可以查看啟動日志。

總結(jié)

僅為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 使用Docker部署Jenkins并實現(xiàn)自動化部署的全流程

    使用Docker部署Jenkins并實現(xiàn)自動化部署的全流程

    本文介紹了使用Docker部署Jenkins并實現(xiàn)自動化部署的完整路徑,涵蓋Docker環(huán)境準(zhǔn)備與選擇、Jenkins容器部署與權(quán)限設(shè)置、DockerSocket與Docker-in-Docker兩種方案對比、Jenkins初始化與插件配置、憑證管理、Jenkinsfile自動化部署流水線、多分支流水線配置等等內(nèi)容
    2026-05-05
  • Docker加載鏡像時出現(xiàn) “no space left on device” 錯誤的解決方法

    Docker加載鏡像時出現(xiàn) “no space left on dev

    在 Docker 使用過程中,“no space left on device” 錯誤是常見的磁盤空間不足問題,本文將結(jié)合實戰(zhàn)操作,詳細介紹該問題的排查與解決步驟,幫助開發(fā)者快速定位并修復(fù)問題,需要的朋友可以參考下
    2026-03-03
  • docker-compose安裝db2數(shù)據(jù)庫操作

    docker-compose安裝db2數(shù)據(jù)庫操作

    這篇文章主要介紹了docker-compose安裝db2數(shù)據(jù)庫操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • 如何查看docker run啟動參數(shù)命令(推薦)

    如何查看docker run啟動參數(shù)命令(推薦)

    這篇文章主要介紹了如何查看docker run啟動參數(shù)命令,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • docker安裝RabbitMQ及安裝延遲插件的詳細過程

    docker安裝RabbitMQ及安裝延遲插件的詳細過程

    MQ(message queue)字面意思上來說消息隊列,是一種跨進程的通信機制,用于上下游傳遞消息,本文給大家詳細介紹docker安裝RabbitMQ及安裝延遲插件的過程,感興趣的朋友一起看看吧
    2022-06-06
  • docker compose部署主從復(fù)制的實現(xiàn)

    docker compose部署主從復(fù)制的實現(xiàn)

    本文記錄了通過 docker compose 搭建一主雙從的 Redis 服務(wù)。文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Docker部署Node.js的實現(xiàn)示例

    Docker部署Node.js的實現(xiàn)示例

    本文介紹了在服務(wù)器上使用Docker部署Node.js項目,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-12-12
  • CentOS系統(tǒng)下docker的安裝配置及使用介紹

    CentOS系統(tǒng)下docker的安裝配置及使用介紹

    這篇文章主要介紹了CentOS系統(tǒng)下docker的安裝配置及使用詳細介紹,需要的朋友可以參考下
    2016-10-10
  • linux中無make命令的問題(make: *** 沒有指明目標(biāo)并且找不到 makefile及make命令安裝方法)

    linux中無make命令的問題(make: *** 沒有指明目標(biāo)并且找不到 makefile及make命令安裝方法)

    這篇文章主要介紹了linux中無make命令的問題(make: *** 沒有指明目標(biāo)并且找不到 makefile及make命令安裝方法),本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • Docker使用Prune命令清理none鏡像

    Docker使用Prune命令清理none鏡像

    本文主要介紹了Docker使用Prune命令清理none鏡像,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10

最新評論

勃利县| 宁波市| 梧州市| 九龙城区| 惠来县| 自贡市| 靖边县| 鄢陵县| 松滋市| 灵石县| 台中市| 响水县| 岢岚县| 阜新市| 沙雅县| 嘉善县| 浪卡子县| 文安县| 永安市| 孟州市| 始兴县| 临夏县| 东乡族自治县| 丹江口市| 大冶市| 安仁县| 旌德县| 呼玛县| 凤城市| 米林县| 香格里拉县| 简阳市| 长沙县| 平乐县| 普格县| 依安县| 电白县| 西藏| 璧山县| 增城市| 托克托县|