Dockerfile實現java容器構建及項目重啟(公網和內網)

公網情況

0.Dockerfile關鍵字

關鍵字作用一句話出現位置
FROM指定基礎鏡像(任何 Dockerfile 必須且首行)全局
RUN在鏡像構建階段執行命令(常用來安裝軟件)構建期
COPY把宿主機文件/目錄復制進鏡像構建期
ADD類似 COPY,但額外支持遠程 URL 與自動解壓 tar構建期
WORKDIR設定后續指令的工作目錄(不存在會自動創建)構建/運行
ENV設定環境變量構建+運行
EXPOSE聲明容器對外監聽端口(僅文檔作用,仍需 -p)文檔
CMD容器啟動時的默認命令(可被 docker run 覆蓋)運行期
ENTRYPOINT容器啟動時的主進程(與 CMD 組合使用)運行期
VOLUME聲明掛載點,匿名或具名卷運行期
USER切換后續指令的執行用戶 / UID構建/運行
LABEL給鏡像打鍵值對元數據(維護者、版本等)文檔
ARG聲明構建參數(docker build --build-arg)構建期
ONBUILD觸發器:以此鏡像作為基礎鏡像時自動執行構建期
STOPSIGNAL指定 docker stop 時發給容器的信號運行期
HEALTHCHECK定義容器健康檢查命令運行期
SHELL更改 RUN/CMD 的默認 shell(Windows 常用)構建期
MAINTAINER已廢棄,被 LABEL 替代歷史遺留

最小可運行示例

# 關鍵字示例
FROM alpine:3.19
LABEL maintainer="you@example.com"
WORKDIR /app
COPY . .
RUN apk add --no-cache python3
EXPOSE 8000
CMD ["python3", "-m", "http.server", "8000"]

以上代碼用到了 8 個關鍵字,足夠覆蓋 90% 的日常需求。

1.創建Dockerfile

# 使用 OpenJDK 8 官方鏡像
FROM openjdk:8-jre# 設置工作目錄
WORKDIR /app# 暴露端口
EXPOSE 5086# 使用 Shell 格式(注意:不要用方括號)
CMD java -Xms2g -Xmx2g -XX:+UseParallelGC -XX:ParallelGCThreads=4 -jar app.jar > /app/app.log 2>&1

2.build鏡像

docker build -t java_image .

3.啟動容器

docker run -d --restart always --name twin_java -p 8080:8080 -v /home/java:/app java_image

圖中可以看到,容器已經啟動,并且容器的監控線程已經由/bin/bash變成了/bin/bash -c 'java -X..",可見,當容器重啟的時候,容器中的jar包也會一起重啟

4.更新jar包

當java項目邏輯有修改的時候,都需要重新打包,重新啟動項目,容器中的jar包沖抵方式是:

剛剛啟動容器的時候,已經通過命令掛載了容器的工作目錄到宿主機,即容器中/app和宿主機/home/java的目錄是互通的,所以只需要將宿主機上的jar更新,又因為在Dockerfile中定義啟動的jar包名稱為app.jar,所以后續更新jar包時,需要將最新的jar包改名為app.jar,然后重啟項目即可

重啟容器命令:

docker restart twin_java

補充:

想在容器內看java運行狀態,報bash: ps: command not found
可以通過命令安裝(因為這個容器是Debian 容器,又因為UbuntuDebian的命令很多都一樣)

apt update && apt install procps -y

查看jar包運行日志,可以在宿主機上使用tail命令進行查看,不需要進入容器

tail -100f app.log

內網環境

0.準備工作

將剛剛在公網環境下創建的鏡像進行打包

docker save -o java_image.tar java_image

然后將tar包放在內網電腦上進行載入,啟動即可

1.載入并啟動

載入命令:

docker load -i java_image.tar

啟動命令同上,更新jar包步驟同上

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

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

相關文章

SpringCloud與Dubbo深度對比:架構、性能與生態全解析

引言在微服務架構盛行的今天,服務治理框架的選擇成為企業技術棧決策的關鍵環節。Spring Cloud和Dubbo作為Java生態中最具代表性的兩大微服務框架,各自擁有獨特的優勢和適用場景。本文將從架構設計、服務治理、性能表現、生態系統等多個維度進行深度對比&…

簡歷書寫---自我評價怎么寫

前言 今天一對一輔導了很多同學做簡歷,看到很多同學簡歷上都有一欄:自我評價 那我們就要思考一下,我們搞技術的,一份技術簡歷,自我評價上怎么寫,才能算一個加分點呢? 觀點分享 首先,…

嵌入式Linux學習 - 數據庫開發

目錄 一. 在終端的使用 1. 下載 2. 操作 3. 相關函數 1.增 2. 刪 3. 改 4. 查 5. 補充函數 二. 在軟件的使用 1. 下載 2. 操作 三. 在編程的使用 1. 下載 2. 相關函數 1. 打開 2. 讀寫執行sql語句 3. 關閉 一. 在終端的使用 1. 下載 sudo apt-get install …

產品運營必備的職場通用能力有哪些?如何一步步提升?

在流量紅利消退的存量競爭時代,產品運營崗位正經歷價值重構。單純的活動策劃與用戶維護已無法滿足發展需求,數據驅動的精細化運營成為行業分水嶺。面對這場變革,復合能力建設與前瞻工具掌握是運營人突破天花板的密鑰。推薦考取CDA數據分析師&…

ESPTimer vs GPTimer:ESP32 定時器系統深度解析

第十五章和第十六章分別學習了??ESPTimer?? 和 ??GPTimer?? ,那這兩種定時器有什么區別,如何使用呢,下面探討下。1. 兩種定時器對比介紹1.1 兩種定時器設計在 ESP32 開發中,??ESPTimer?? 和 ??GPTimer?? 是兩種完…

【70頁PPT】WMS助力企業數字化轉型(附下載方式)

篇幅所限,本文只提供部分資料內容,完整資料請看下面鏈接 https://download.csdn.net/download/2501_92808811/91806268 資料解讀:【70頁PPT】WMS助力企業數字化轉型 詳細資料請看本解讀文章的最后內容。倉儲管理在企業運營中占據關鍵地位&a…

[光學原理與應用-337]:ZEMAX - 自帶的用于學習的樣例設計

ZEMAX(OpticStudio)內置了大量樣例設計文件,這些文件覆蓋了從基礎光學原理到復雜系統設計的全場景,是學習光學設計、掌握軟件操作、理解像差理論的絕佳資源。以下是ZEMAX自帶樣例設計的詳細分類、使用方法及學習價值分析&#xff…

下一波紅利:用 #AI編程 闖入小游戲賽道,#看廣告變現 模式正在崛起!

文章標題(可選,均包含核心關鍵詞) 【主推標題】 #AI編程制作小游戲 的終極 #變現 指南:如何通過 #看廣告變現 輕松賺錢 【疑問式標題】 #AI制作小游戲 真的能賺錢嗎?揭秘 #AI編程賺錢 的四大核心路徑與廣告變現策略 【趨勢型標題】 下一波紅利:用 #AI編程 闖入小游戲賽道…

【git】add后不想commit怎么實現pull

本地有改動已 git add 到暫存區(stage),但是還沒 commit,同時遠端有 28 個新提交需要拉取。 直接 git pull 會沖突或被拒絕,因為你本地有 staged 修改。 處理步驟有幾種方案,我給你推薦最穩妥的幾種:? 方法 1&#xf…

Unable to establish SSL connection. curl靜態編譯

博主有個老RHEL系統,內核2.6.18;ssl不管用了,最簡單的wget也不行,下面編個靜態編譯的新版 curl 用用(不影響yum源,不然的話系統自帶的舊版 OpenSSL 受影響得得不償失),來最優化解決下…

Redis-08 SpringBoot集成Redis常見問題

SpringBoot集成Redis的教程網上很多,總體來說就是三個步驟:添加依賴、修改配置文件、自定義Redis配置類(自定義序列化器),具體步驟可自行搜索,本文主要解惑集成中的常見疑問。 1,選擇什么依賴&…

數據結構:選擇排序 (Selection Sort)

目錄 從學生排隊開始 算法的初始狀態和核心操作 代碼的逐步完善 第一階段:定義函數框架和外層循環 第二階段:實現“尋找最小元素”的邏輯(內層循環) 第三階段:完成“交換”操作 復雜度與特性分析 時間復雜度 (…

Django Admin 管理工具

一、簡介Django Admin 是 Django 框架最受歡迎和強大的特性之一。它是一個自動生成的管理后臺,允許開發者無需或僅需編寫少量代碼,就能對網站的數據模型(數據庫中的表)進行直觀的增、刪、改、查(CRUD)操作。…

園區智慧水電管理系統:讓能源管理從“成本黑洞”變“利潤引擎”

園區智慧水電管理系統,是一套專為產業園區、科技園、企業總部等大型空間設計的集智能計量、遠程管控、自動計費、能耗分析于一體的數字化能源解決方案。它用技術手段解決水電管理中的“抄表難、收費亂、浪費多、數據缺”四大頑疾,真正實現降本、提效、控…

DeepSeek應用技巧-通過MCP打造數據分析助手

本文章將通過MCP服務來打造一個數據分析助手,可以直接讀取本地的excel或csv的文件,然后生成可視化的報告并保存在本地,十分有應用和實踐的價值,話不多說,我們開始手把手搭建。一、知識應用(1)Fu…

React Hooks 完全指南:從基礎到高級的實戰技巧

概述 React Hooks 是 React 16.8 引入的新特性,允許在函數組件中使用狀態和其他 React 特性。根據數據的使用場景和更新機制,可以將 Hooks 分為三大類: 1. 保存只讀數據 useMemo 用途: 緩存計算結果,避免重復計算 …

PCIe 6.0 vs 5.0:帶寬翻倍背后的技術革命

PCIe 6.0 vs 5.0:帶寬翻倍背后的技術革命在數據中心、AI計算和高速存儲需求爆炸式增長的今天,傳統接口帶寬已成為系統性能提升的瓶頸。PCIe 6.0的推出正是為了解決這一挑戰,它通過革命性的技術創新,在保持向后兼容的同時實現了帶寬…

突破傳統企業組網瓶頸:某科技公司智能組網服務項目深度解析

在現代企業的數字化轉型過程中,穩定、高效、安全的網絡基礎設施已成為業務發展的關鍵。然而,傳統組網方案往往面臨諸多挑戰,如網絡性能不足、組網復雜度高、擴展性不佳、以及安全防護薄弱等問題。為了解決這些痛點,某科技公司通過…

ubuntu單機實現10000個連接同時在線測試

連接前 成功連接后 前端測試連接腳本: c_5k.sh !/bin/bash ulimit -n 100000 # client_simulator.sh SERVER_IP="192.168.0.106" SERVER_PORT=8080 MAX_CLIENTS=5000 BATCH_SIZE=100echo "Starting $MAX_CLIENTS clients to $SERVER_IP:$SERVER_PORT"…

防護墻技術(一):NAT

###源NAT基本原理 NAT(Network Address Translation)網絡地址轉換技術 源NAT技術對IP報文的源地址進行轉換,將私有IP地址轉換為公網IP地址,使大量私網用戶可以利用少量公網IP地址訪問internet,大大減少對公網IP的消耗 …