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

docker下載運行java項目的實現(xiàn)步驟

 更新時間:2025年12月04日 10:23:17   作者:、廾  
本文主要介紹了docker下載運行java項目的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

核心常用參數(shù)(開發(fā) / 生產(chǎn)高頻)

參數(shù)作用示例
-it分配偽終端并保持標(biāo)準(zhǔn)輸入打開,實現(xiàn)交互模式(如進入容器終端)docker run -it ubuntu:20.04 /bin/bash
-d后臺運行容器(守護進程模式),不占用當(dāng)前終端docker run -d nginx:1.25
--name為容器自定義名稱(默認是隨機字符串),方便管理docker run -d --name my-nginx nginx
-p端口映射(宿主機端口:容器內(nèi)端口),實現(xiàn)外部訪問容器docker run -d -p 8080:80 nginx
-v數(shù)據(jù)卷掛載(宿主機路徑:容器內(nèi)路徑),實現(xiàn)數(shù)據(jù)持久化 / 文件共享docker run -d -v /host/html:/usr/share/nginx/html nginx
-e設(shè)置容器內(nèi)的環(huán)境變量docker run -d -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0
--network指定容器接入的 Docker 網(wǎng)絡(luò),實現(xiàn)容器間網(wǎng)絡(luò)互通docker run -d --network app-network mysql:8.0
--restart容器重啟策略(如 always 異常退出自動重啟),適合生產(chǎn)環(huán)境docker run -d --restart always nginx
--rm容器停止后自動刪除,適合臨時測試的容器docker run --rm -it ubuntu /bin/bash

一、基礎(chǔ)場景:運行 Java JAR 包項目

在 JAR 包同級目錄下創(chuàng)建名為 Dockerfile 的文件(無后綴),內(nèi)容如下(分基礎(chǔ)版指定 JDK 版本版):

步驟 1:基礎(chǔ)版(使用官方 OpenJDK 鏡像,自動適配)

# 1. 選擇基礎(chǔ)鏡像:使用官方 OpenJDK 的 JRE 鏡像(輕量,僅運行環(huán)境)
FROM openjdk:8-jre-slim  # 若項目用 Java 11,改為 openjdk:11-jre-slim;Java 17 改為 openjdk:17-jre-slim

# 2. 維護者信息(可選)
MAINTAINER yourname <yourname@example.com>

# 3. 創(chuàng)建容器內(nèi)目錄,用于存放 JAR 包
WORKDIR /app

# 4. 將本地的 JAR 包復(fù)制到容器內(nèi)的 /app 目錄下,并重命名為 app.jar(簡化名稱)
COPY demo-0.0.1-SNAPSHOT.jar /app/app.jar

# 5. 暴露項目的端口(如 Spring Boot 項目的 8080 端口,僅聲明,不實際映射)
EXPOSE 8080

# 6. 容器啟動時執(zhí)行的命令:運行 JAR 包
ENTRYPOINT ["java", "-jar", "/app/app.jar"]

步驟 2:指定具體 JDK 版本(如國產(chǎn)龍蜥 / 華為鏡像,適配國產(chǎn)化)

若需要指定更精細的 JDK 版本,或使用國產(chǎn)鏡像:

# 使用阿里云的 OpenJDK 鏡像(國內(nèi)速度快)
FROM registry.cn-hangzhou.aliyuncs.com/acs/openjdk:8-jre

WORKDIR /app
COPY demo-0.0.1-SNAPSHOT.jar /app/app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "/app/app.jar"]

步驟 3:構(gòu)建 Docker 鏡像

在 Dockerfile 所在目錄執(zhí)行構(gòu)建命令,<image-name> 為鏡像名稱(如 java-demo),<tag> 為版本(如 v1.0):

docker build -t <image-name>:<tag> .
# 示例:docker build -t java-demo:v1.0 .
  • 命令末尾的 . 表示當(dāng)前目錄是構(gòu)建上下文(Docker 會讀取該目錄下的文件)。
  • 構(gòu)建完成后,執(zhí)行 docker images 可看到新創(chuàng)建的鏡像。

步驟 4:啟動 Docker 容器

通過鏡像啟動容器,映射端口(容器內(nèi) 8080 → 宿主機 8080),并命名容器(可選):

docker run -d -p 8080:8080 --name <container-name> <image-name>:<tag>
# 示例:docker run -d -p 8080:8080 --name my-java-app java-demo:v1.0
  • 參數(shù)說明:
    • -d:后臺運行容器(守護進程模式)。
    • -p 宿主機端口:容器端口:端口映射(關(guān)鍵,外部通過宿主機端口訪問)。
    • --name:給容器命名,方便管理。

步驟 5:驗證運行結(jié)果

  1. 查看容器狀態(tài):docker ps(若顯示容器為 Up 狀態(tài),說明啟動成功)。
  2. 訪問項目:瀏覽器 / Postman 訪問 http://宿主機IP:8080(如本地則 http://localhost:8080)。
  3. 查看容器日志:docker logs <container-name>(排查啟動失敗問題)。

二、進階場景:運行 Java WAR 包項目

適用于傳統(tǒng) Java Web 項目(如 SSH/SSM),打包為 WAR 包,需部署到 Tomcat 容器。

步驟 1:準(zhǔn)備 WAR 包

將項目打包為 demo.war,放在本地目錄(如 ~/java-war-docker/)。

步驟 2:編寫 Dockerfile

使用官方 Tomcat 鏡像作為基礎(chǔ)鏡像,將 WAR 包復(fù)制到 Tomcat 的 webapps 目錄:

# 1. 選擇官方 Tomcat 鏡像(內(nèi)置 JRE,可指定版本)
FROM tomcat:8.5-jre8-slim  # 若用 Tomcat 9,改為 tomcat:9-jre11-slim

# 2. 維護者信息(可選)
MAINTAINER yourname <yourname@example.com>

# 3. 刪除 Tomcat 自帶的默認項目(可選,清理無用文件)
RUN rm -rf /usr/local/tomcat/webapps/*

# 4. 將本地 WAR 包復(fù)制到 Tomcat 的 webapps 目錄
COPY demo.war /usr/local/tomcat/webapps/ROOT.war  # 重命名為 ROOT.war,訪問時無需加項目名

# 5. 暴露 Tomcat 端口(默認 8080)
EXPOSE 8080

# 6. 啟動 Tomcat(Tomcat 鏡像默認入口命令就是啟動腳本,可省略)
CMD ["catalina.sh", "run"]

步驟 3:構(gòu)建并啟動容器

# 構(gòu)建鏡像
docker build -t java-war-demo:v1.0 .

# 啟動容器
docker run -d -p 8080:8080 --name my-war-app java-war-demo:v1.0

步驟 4:驗證

訪問 http://宿主機IP:8080,即可訪問 WAR 包項目(因 WAR 包重命名為 ROOT.war,無需加項目上下文路徑)。

三、優(yōu)化 Docker 鏡像(減小體積 + 提升安全性)

上述基礎(chǔ)鏡像(如 openjdk:8-jre-slim)雖已輕量化,但可進一步優(yōu)化:

1. 使用更小的基礎(chǔ)鏡像(Alpine 版本)

Alpine 是輕量級 Linux 發(fā)行版,鏡像體積僅幾 MB:

# Java 8 Alpine 鏡像(體積約 80MB,而 slim 版本約 200MB)
FROM openjdk:8-jre-alpine

# Alpine 缺少時區(qū)依賴,需手動安裝(解決項目時區(qū)問題)
RUN apk add --no-cache tzdata
ENV TZ=Asia/Shanghai  # 設(shè)置時區(qū)為上海

WORKDIR /app
COPY demo-0.0.1-SNAPSHOT.jar /app/app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "/app/app.jar"]

2. 非 root 用戶運行容器(提升安全性)

默認容器以 root 用戶運行,存在安全風(fēng)險,可創(chuàng)建普通用戶:

FROM openjdk:8-jre-alpine

# 創(chuàng)建普通用戶 appuser
RUN addgroup -S appgroup && adduser -S appuser -G appgroup

# 切換到普通用戶
USER appuser

WORKDIR /app
COPY demo-0.0.1-SNAPSHOT.jar /app/app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "/app/app.jar"]

3. 分層構(gòu)建(分離編譯和運行環(huán)境)

適用于需要在容器內(nèi)編譯項目的場景(如源碼打包),使用多階段構(gòu)建減小鏡像體積:

# 第一階段:編譯階段(使用帶 JDK 的鏡像,打包源碼)
FROM maven:3.8.5-openjdk-8 AS builder
WORKDIR /src
COPY pom.xml .
COPY src ./src
# 執(zhí)行 maven 打包(跳過測試)
RUN mvn clean package -DskipTests

# 第二階段:運行階段(僅使用 JRE 鏡像,復(fù)制編譯后的 JAR 包)
FROM openjdk:8-jre-alpine
WORKDIR /app
# 從編譯階段復(fù)制 JAR 包到運行階段
COPY --from=builder /src/target/demo-0.0.1-SNAPSHOT.jar /app/app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "/app/app.jar"]

四、常見問題排查

  1. 容器啟動后立即退出:查看日志 docker logs <容器名>,大概率是 JAR 包路徑錯誤、端口被占用或項目代碼異常。
  2. 外部無法訪問項目:檢查宿主機防火墻是否開放端口,或 Docker 端口映射是否正確(-p 參數(shù))。
  3. 時區(qū)問題:項目中時間顯示錯誤,需在 Dockerfile 中設(shè)置時區(qū)(如 Alpine 鏡像安裝 tzdata 并指定 TZ 環(huán)境變量)。
  4. 鏡像構(gòu)建緩慢:使用國內(nèi)鏡像源(如阿里云 Docker 鏡像加速器),或更換基礎(chǔ)鏡像為國內(nèi)倉庫(如阿里云的 OpenJDK/Tomcat 鏡像)。

通過以上步驟,即可完成 Java 項目的 Docker 容器化部署,適配絕大多數(shù) Java 項目場景。

五、jdk下載失敗問題

方式一:手動下載官方 OpenJDK 17 壓縮包(通用所有 Linux 發(fā)行版)

這是最通用的安裝方式,不受發(fā)行版限制,可精準(zhǔn)控制安裝路徑和版本。

一、選擇下載源并獲取 JDK 17 壓縮包

推薦從 OpenJDK 官方鏡像 或 Adoptium(Eclipse Temurin) 下載(Adoptium 提供穩(wěn)定的 OpenJDK 發(fā)行版,更推薦)。

  1. 打開終端,進入下載目錄(如 /usr/local/src):
    cd /usr/local/src
    
  2. 下載 OpenJDK 17 壓縮包(以 Adoptium 的 Temurin 17 為例,適配 x86_64 架構(gòu)):
    # 下載 x86_64 架構(gòu)的 Temurin 17 最新版(Linux tar.gz 包)
    wget https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.11%2B9/OpenJDK17U-jdk_x64_linux_hotspot_17.0.11_9.tar.gz
    
    • 若需其他架構(gòu)(如 aarch64/ARM)或版本,可訪問 Adoptium 官網(wǎng) 復(fù)制對應(yīng)下載鏈接。
    • 若沒有 wget,可先安裝:apt install wget(Debian/Ubuntu)或 yum install wget(CentOS/RHEL)。
    • 實在下載不了就外部下載了再傳到linux

二、編寫 Dockerfile

創(chuàng)建 Dockerfile 文件,內(nèi)容分為基礎(chǔ)鏡像選擇、JDK 解壓配置、項目運行三個部分,核心是將本地 JDK 包復(fù)制到容器并配置環(huán)境變量。

# 1. 選擇基礎(chǔ) Linux 鏡像(以輕量的 CentOS 7 為例,也可用 alpine)
FROM centos:7

# 2. 維護者信息(可選)
MAINTAINER yourname <yourname@example.com>

# 3. 創(chuàng)建JDK安裝目錄,將本地JDK包復(fù)制到容器內(nèi)并解壓
RUN mkdir -p /usr/local/jdk
COPY jdk-8u361-linux-x64.tar.gz /usr/local/jdk/
RUN cd /usr/local/jdk && tar -zxvf jdk-8u361-linux-x64.tar.gz && rm -rf jdk-8u361-linux-x64.tar.gz

# 4. 配置JDK環(huán)境變量(容器內(nèi)生效)
ENV JAVA_HOME=/usr/local/jdk/jdk1.8.0_361  # 解壓后的JDK實際目錄
ENV JRE_HOME=$JAVA_HOME/jre
ENV CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
ENV PATH=$JAVA_HOME/bin:$PATH

# 5. 創(chuàng)建項目目錄,復(fù)制Java項目JAR包到容器內(nèi)
RUN mkdir -p /app
COPY demo-0.0.1-SNAPSHOT.jar /app/app.jar

# 6. 暴露項目端口(如Spring Boot的8080端口)
EXPOSE 8080

# 7. 容器啟動時運行JAR包
ENTRYPOINT ["java", "-jar", "/app/app.jar"]

關(guān)鍵說明

  • 若使用 Alpine 基礎(chǔ)鏡像(更輕量),需替換 FROM centos:7 為 FROM alpine:3.18,并添加 RUN apk add --no-cache tar(Alpine 默認無 tar 解壓工具)。
  • 若使用國產(chǎn) JDK(如華為畢昇 JDK、阿里 Dragonwell),只需替換本地 JDK 包,解壓路徑和環(huán)境變量配置邏輯不變。

三、構(gòu)建 Docker 鏡像

在項目目錄(java-docker/)下執(zhí)行構(gòu)建命令,指定鏡像名稱和標(biāo)簽:

docker build -t custom-jdk-java:v1.0 .
  • -t custom-jdk-java:v1.0:給鏡像命名為 custom-jdk-java,版本為 v1.0。
  • 末尾的 .:表示 Docker 構(gòu)建上下文為當(dāng)前目錄(會讀取目錄下的 JDK 包、JAR 包和 Dockerfile)。

構(gòu)建過程中,Docker 會依次執(zhí)行 Dockerfile 中的指令:復(fù)制 JDK 包 → 解壓 → 配置環(huán)境 → 復(fù)制項目 JAR 包。構(gòu)建完成后,執(zhí)行 docker images 可看到新創(chuàng)建的鏡像。

四、啟動 Docker 容器

通過構(gòu)建好的鏡像啟動容器,映射宿主機端口到容器端口(如 8080):

# 后臺啟動容器,端口映射 宿主機8080 → 容器8080,命名為my-java-app
docker run -d -p 8080:8080 --name my-java-app custom-jdk-java:v1.0

常用參數(shù)補充

  • -v /host/logs:/app/logs:若項目有日志輸出到容器內(nèi) /app/logs,可通過數(shù)據(jù)卷掛載到宿主機 /host/logs,實現(xiàn)日志持久化。
  • --restart always:配置容器異常退出時自動重啟(生產(chǎn)環(huán)境推薦)
    docker run -d -p 8080:8080 -v /host/logs:/app/logs --restart always --name my-java-app custom-jdk-java:v1.0
    

五、驗證運行結(jié)果

  1. 查看容器狀態(tài):執(zhí)行 docker ps,若容器狀態(tài)為 Up,說明啟動成功。
  2. 訪問項目:瀏覽器 / Postman 訪問 http://宿主機IP:8080,即可訪問 Java 項目。
  3. 查看容器日志:若啟動失敗,通過日志排查問題:
    docker logs my-java-app  # 查看日志
    docker logs -f my-java-app  # 實時跟蹤日志
    

六、優(yōu)化方案(可選)

  1. 制作自定義 JDK 基礎(chǔ)鏡像:若多個 Java 項目需要相同的自定義 JDK 環(huán)境,可先構(gòu)建僅包含 JDK 的基礎(chǔ)鏡像,后續(xù)項目直接基于該鏡像構(gòu)建,避免重復(fù)解壓配置 JDK:

    # 構(gòu)建自定義JDK基礎(chǔ)鏡像的Dockerfile
    FROM centos:7
    RUN mkdir -p /usr/local/jdk
    COPY jdk-8u361-linux-x64.tar.gz /usr/local/jdk/
    RUN cd /usr/local/jdk && tar -zxvf jdk-8u361-linux-x64.tar.gz && rm -rf *.tar.gz
    ENV JAVA_HOME=/usr/local/jdk/jdk1.8.0_361
    ENV PATH=$JAVA_HOME/bin:$PATH
    # 構(gòu)建命令:docker build -t custom-jdk8:v1.0 .
    

    后續(xù)項目的 Dockerfile 可直接引用該基礎(chǔ)鏡像:

    dockerfile

    FROM custom-jdk8:v1.0  # 引用自定義JDK基礎(chǔ)鏡像
    RUN mkdir -p /app
    COPY demo-0.0.1-SNAPSHOT.jar /app/app.jar
    EXPOSE 8080
    ENTRYPOINT ["java", "-jar", "/app/app.jar"]
    
  2. 精簡鏡像體積:使用 alpine 基礎(chǔ)鏡像替代 centos,并通過 jlink 工具制作精簡版 JRE(僅保留項目所需的 Java 模塊),可將鏡像體積從幾百 MB 壓縮到幾十 MB。

七、常見問題排查

  1. JDK 解壓路徑錯誤:檢查 Dockerfile 中 JAVA_HOME 的路徑是否與容器內(nèi)解壓后的 JDK 目錄一致(可通過 docker exec -it 容器ID /bin/bash 進入容器查看)。
  2. 容器啟動后立即退出:查看日志 docker logs 容器名,大概率是 JAR 包路徑錯誤、端口被占用或項目代碼異常。
  3. 外部無法訪問項目:檢查宿主機防火墻是否開放端口,或 Docker 端口映射是否正確(-p 參數(shù))。
  4. JDK 包復(fù)制失敗:確保 JDK 包在 Docker 構(gòu)建上下文目錄內(nèi),且文件名與 Dockerfile 中一致。

八、進入運行中的容器(狀態(tài)為 Up)

使用docker exec進入交互終端(推薦)

exec 是 Docker 官方推薦的進入容器的方式,會在容器內(nèi)啟動一個新的 shell 進程,不影響容器原有進程,退出后容器仍正常運行。

# 通用Linux鏡像(CentOS/Ubuntu)用 /bin/bash
docker exec -it cad120a3ea47 /bin/bash

# 若容器是Alpine系統(tǒng)(輕量Linux),需替換為 /bin/sh
docker exec -it cad120a3ea47 /bin/sh

# 先停止容器
docker stop <容器名或ID>

# 刪除容器
docker rm <容器名或ID>

# 重新運行
docker run [參數(shù)] <鏡像>

# 重命名鏡像
# 用原長名稱作為標(biāo)識
docker tag registry.cn-hangzhou.aliyuncs.com/my-namespace/very-long-app-name:v1 myapp:v1

# 也可以用鏡像ID作為標(biāo)識(更快捷)
docker tag 8f9b89f23768 myapp:v1

# 刪除之前長鏡像(不能通過id刪除,因為重命名的鏡像id都是同一個)
docker rmi registry.cn-hangzhou.aliyuncs.com/my-namespace/very-long-app-name:v1

參數(shù)說明

  • -i:保持標(biāo)準(zhǔn)輸入打開,實現(xiàn)交互。
  • -t:為容器分配一個偽終端。
  • cad120a3ea47:容器 ID(也可使用容器名,如 my-java-app)。

執(zhí)行后,終端提示符會變成容器內(nèi)的格式(如 root@cad120a3ea47:/#),表示已成功進入容器,可執(zhí)行任意 Linux 命令(如查看環(huán)境變量、修改文件等)。

九、jar包替換

當(dāng)容器啟動后,Java 項目的 JAR 包需要頻繁修改替換時,無需重新構(gòu)建鏡像或重啟容器(可選輕量重啟),核心思路是通過Docker 數(shù)據(jù)卷掛載將宿主機的 JAR 包目錄映射到容器內(nèi),替換宿主機的 JAR 包后,重啟容器內(nèi)的 Java 進程即可生效。以下是兩種主流方案,按「便捷性」和「規(guī)范性」劃分,適配不同場景:

方案一:數(shù)據(jù)卷掛載(推薦,最便捷)

這是生產(chǎn) / 測試環(huán)境最常用的方式,提前將宿主機的 JAR 包目錄掛載到容器內(nèi)的 JAR 包路徑,后續(xù)只需替換宿主機的 JAR 包,重啟容器 / 進程即可生效,無需重新構(gòu)建鏡像。

步驟 1:啟動容器時掛載數(shù)據(jù)卷

docker run命令中通過-v參數(shù)將宿主機 JAR 包目錄映射到容器內(nèi) JAR 包所在目錄。假設(shè):

  • 宿主機 JAR 包存放路徑:/opt/java-projects/demo.jar
  • 容器內(nèi) JAR 包運行路徑:/app/app.jar

啟動容器的命令:

# 后臺啟動容器,掛載宿主機JAR包到容器內(nèi),同時映射端口
docker run -d -p 8080:8080 \
  --name my-java-app \
  -v /opt/java-projects/demo.jar:/app/app.jar \  # 掛載單個JAR包
  custom-jdk-java:v1.0  # 你的鏡像名

進階:掛載整個目錄(更適合頻繁替換)若需替換多個文件(如配置文件 + JAR 包),可掛載整個目錄:

docker run -d -p 8080:8080 \
  --name my-java-app \
  -v /opt/java-projects/:/app/  # 宿主機目錄 → 容器目錄
  custom-jdk-java:v1.0

此時容器內(nèi)/app/目錄會同步宿主機/opt/java-projects/的所有文件(包括 JAR 包、配置文件)。

步驟 2:替換宿主機的 JAR 包

直接將新的 JAR 包覆蓋宿主機的/opt/java-projects/demo.jar(或目錄內(nèi)的 JAR 包):

# 示例:用本地新JAR包替換宿主機的舊包(可通過rz/scp/FTP上傳新包)
cp /root/new-demo.jar /opt/java-projects/demo.jar

步驟 3:重啟容器 / 進程使新 JAR 包生效

JAR 包替換后,需重啟 Java 進程才能加載新包,有兩種方式:

方式 1:輕量重啟容器內(nèi)的 Java 進程(推薦,不中斷容器)

進入容器,找到 Java 進程并殺死,容器會自動重啟 Java 進程(需保證容器的啟動命令是「前臺運行」,如java -jar /app/app.jar

# 1. 進入容器
docker exec -it my-java-app /bin/bash

# 2. 查找Java進程ID
ps -ef | grep java

# 3. 殺死舊進程(替換為實際PID)
kill -9 1  # 容器內(nèi)的主進程通常是PID 1,殺死后容器會重啟主進程

# 4. 退出容器
exit

原理:Docker 容器的主進程退出后會自動重啟(若未配置--restart,需手動啟動),而容器的啟動命令是運行 JAR 包,因此重啟后會加載新的 JAR 包。

方式 2:直接重啟容器(更簡單,適合測試環(huán)境

# 重啟容器
docker restart my-java-app

該方式會短暫中斷服務(wù),適合測試環(huán)境或?qū)Ψ?wù)可用性要求不高的場景。

方案二:通過 Docker Compose 掛載(規(guī)范,適合多容器)

若使用docker-compose管理容器,只需在docker-compose.yml中配置volumes掛載,后續(xù)替換宿主機 JAR 包后重啟服務(wù)即可。

步驟 1:編寫docker-compose.ym

version: '3.8'
services:
  java-app:
    image: custom-jdk-java:v1.0
    ports:
      - "8080:8080"
    volumes:
      - /opt/java-projects/demo.jar:/app/app.jar  # 掛載單個JAR包
      # 或掛載整個目錄:- /opt/java-projects/:/app/
    restart: always  # 進程退出后自動重啟
    container_name: my-java-app

步驟 2:啟動服務(wù)

docker-compose up -d

步驟 3:替換 JAR 包并重啟服務(wù)

# 1. 替換宿主機JAR包
cp /root/new-demo.jar /opt/java-projects/demo.jar

# 2. 重啟服務(wù)
docker-compose restart java-app

方案三:不掛載卷(臨時替換,適合應(yīng)急)

若未提前掛載數(shù)據(jù)卷,可通過docker cp命令直接將新 JAR 包復(fù)制到容器內(nèi),再重啟進程,但該方式替換的 JAR 包會在容器重啟后丟失(適合應(yīng)急場景)。

步驟 1:將新 JAR 包復(fù)制到容器內(nèi)

# 格式:docker cp 宿主機文件 容器名:容器內(nèi)路徑
docker cp /root/new-demo.jar my-java-app:/app/app.jar

步驟 2:重啟容器內(nèi)的 Java 進程或容器

同方案一的步驟 3,重啟后新 JAR 包生效。

關(guān)鍵注意事項

  1. 容器啟動命令必須是前臺運行確保 Dockerfile 的ENTRYPOINT/CMD是前臺運行 JAR 包(如ENTRYPOINT ["java", "-jar", "/app/app.jar"]),而非后臺運行(如java -jar /app/app.jar &),否則殺死進程后容器不會重啟。

  2. 數(shù)據(jù)卷掛載的權(quán)限問題若容器內(nèi)的用戶不是root,需給宿主機的 JAR 包 / 目錄添加權(quán)限:

    chmod 777 /opt/java-projects/demo.jar  # 臨時授權(quán)
    # 或修改目錄所屬用戶(適合生產(chǎn))
    chown -R 1000:1000 /opt/java-projects/
    
  3. 避免容器重啟后數(shù)據(jù)丟失僅通過docker cp替換的 JAR 包會在容器重啟后丟失,生產(chǎn)環(huán)境必須使用數(shù)據(jù)卷掛載。

  4. 配置文件同步若 JAR 包依賴外部配置文件(如application.yml),可將配置文件也放入掛載目錄,實現(xiàn) JAR 包 + 配置文件的同步替換。

總結(jié)

方案優(yōu)點缺點適用場景
數(shù)據(jù)卷掛載無需重構(gòu)鏡像,永久生效需提前配置掛載生產(chǎn) / 測試環(huán)境(推薦)
Docker Compose 掛載規(guī)范,適合多容器管理需學(xué)習(xí) Compose 配置多容器微服務(wù)環(huán)境
docker cp 臨時替換應(yīng)急,無需提前配置容器重啟后丟失臨時應(yīng)急、測試

生產(chǎn)環(huán)境優(yōu)先使用數(shù)據(jù)卷掛載,既能實現(xiàn) JAR 包的快速替換,又能保證數(shù)據(jù)持久化,避免容器重啟后配置丟失。

十、容器網(wǎng)絡(luò)互通,創(chuàng)建自定義網(wǎng)絡(luò) app-network 后再連接容器

這是推薦的方式,自定義網(wǎng)絡(luò)的容器間互通性更好,支持通過容器名直接訪問(默認橋接網(wǎng)絡(luò)也支持,但自定義網(wǎng)絡(luò)更隔離、更規(guī)范)。

步驟 1:創(chuàng)建app-network網(wǎng)絡(luò)

執(zhí)行以下命令創(chuàng)建一個橋接模式的自定義網(wǎng)絡(luò)(Docker 網(wǎng)絡(luò)默認模式為 bridge):

docker network create app-network

執(zhí)行后會輸出網(wǎng)絡(luò)的 ID,說明創(chuàng)建成功??赏ㄟ^以下命令查看所有網(wǎng)絡(luò),確認 app-network 已存在:

docker network ls

輸出中會包含類似這樣的條目:

NETWORK ID     NAME          DRIVER    SCOPE
xxxxxxxxx     app-network   bridge    local

步驟 2:將容器連接到app-network網(wǎng)絡(luò)

現(xiàn)在重新執(zhí)行連接命令,即可成功將 my-java-app 容器接入該網(wǎng)絡(luò):

docker network connect app-network my-java-app

若你還有 MySQL 容器(如 mysql-db),也需將其接入同一網(wǎng)絡(luò),實現(xiàn)容器間互通:

docker network connect app-network mysql-db

步驟 3:驗證容器是否接入網(wǎng)絡(luò)

執(zhí)行以下命令查看 app-network 網(wǎng)絡(luò)的詳細信息,確認容器已接入:

docker network inspect app-network

在輸出的 Containers 節(jié)點下,能看到 my-java-app 和 mysql-db 容器的信息,說明接入成功。

到此這篇關(guān)于docker下載運行java項目的實現(xiàn)步驟的文章就介紹到這了,更多相關(guān)docker下載運行java內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 查看當(dāng)前docker容器使用的cpu數(shù)量的方法

    查看當(dāng)前docker容器使用的cpu數(shù)量的方法

    Docker容器CPU使用數(shù)量可通過三種方法查看:容器內(nèi)用lscpu/nproc查看核心數(shù),宿主機用docker inspect查CpusetCpus限制,實時用docker stats監(jiān)控使用率,下面小編給大家詳細說說,需要的朋友可以參考下
    2025-05-05
  • docker如何運行一個python腳本

    docker如何運行一個python腳本

    這篇文章主要介紹了docker如何運行一個python腳本問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • docker 啟用多個端口映射命令的操作

    docker 啟用多個端口映射命令的操作

    這篇文章主要介紹了docker 啟用多個端口映射命令的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • Docker daemon 無法啟動: does not match with stored UUID錯誤解決辦法

    Docker daemon 無法啟動: does not match with stored UUID錯誤解決辦法

    這篇文章主要介紹了Docker daemon 無法啟動: does not match with stored UUID錯誤解決辦法的相關(guān)資料,需要的朋友可以參考下
    2016-11-11
  • docker-compose基于MySQL8部署項目的實現(xiàn)

    docker-compose基于MySQL8部署項目的實現(xiàn)

    這篇文章主要介紹了docker-compose基于MySQL8部署項目的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • 詳解在Docker容器內(nèi)外互相拷貝數(shù)據(jù)的方法

    詳解在Docker容器內(nèi)外互相拷貝數(shù)據(jù)的方法

    本篇文章主要介紹了詳解在Docker容器內(nèi)外互相拷貝數(shù)據(jù)的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-03-03
  • docker search命令的具體使用

    docker search命令的具體使用

    本文主要介紹了docker search命令的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • 利用 Docker 構(gòu)建簡單的 java 開發(fā)編譯環(huán)境的方法詳解

    利用 Docker 構(gòu)建簡單的 java 開發(fā)編譯環(huán)境的方法詳解

    這篇文章主要介紹了利用 Docker 構(gòu)建簡單的 java 開發(fā)編譯環(huán)境的相關(guān)知識,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • Docker的鏡像制作方法詳解

    Docker的鏡像制作方法詳解

    這篇文章主要介紹了Docker的鏡像制作方法的相關(guān)資料,文章講解了Docker鏡像的基本原理、結(jié)構(gòu)和制作方式,鏡像是創(chuàng)建Docker容器的基礎(chǔ),需要的朋友可以參考下
    2024-10-10
  • 如何使用?Dockerfile?創(chuàng)建一個簡單容器

    如何使用?Dockerfile?創(chuàng)建一個簡單容器

    這篇文章主要介紹了如何使用?Dockerfile?創(chuàng)建一個簡單容器,Dockerfile?是用于指導(dǎo)?docker?創(chuàng)建自定義?image?的一系列指令,是用于創(chuàng)建?image?的藍圖,下文更多詳細介紹需要的小伙伴可以參考一下
    2022-04-04

最新評論

杭锦旗| 台中县| 胶州市| 永顺县| 夏邑县| 城市| 永顺县| 南华县| 章丘市| 垦利县| 宜黄县| 合山市| 托里县| 吉木萨尔县| 凭祥市| 开封县| 吕梁市| 昂仁县| 铜梁县| 德保县| 麟游县| 忻城县| 南京市| 昌乐县| 鄂托克旗| 黄山市| 新昌县| 衡阳市| 东源县| 汨罗市| 博客| 无极县| 罗定市| 克什克腾旗| 旅游| 合山市| 家居| 宜阳县| 潜山县| 江安县| 阜宁县|