首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Docker 搭建 Java 開發環境全流程:從鏡像構建到團隊分發

     編輯:Java 相關知識

痛點與目標

  • ✅ 新入職零配置:docker run 即可獲得統一 JDK/Maven/Tomcat/Node 環境。
  • ✅ 環境遷移無感:升級 JDK 版本只需重構鏡像,團隊拉取新 Tag 即可同步。
  • ✅ 代碼熱加載:本地 IDE 修改 → 掛載卷即時生效,無需重新打包。
  • ✅ 輕量分發:鏡像導出 .tar 內網傳輸,避開 Registry 帶寬限制。

核心架構

宿主機 (IDE + 源碼)
    │  掛載卷 -v /local/code:/app
    ▼
容器 (Ubuntu + JDK + Maven + Tomcat)
    │  端口映射 -p 8080:8080
    ▼
瀏覽器訪問 localhost:8080

步驟 1:基礎鏡像構建

# 1. 拉取基礎鏡像
docker pull ubuntu:22.04

# 2. 進入容器安裝工具鏈
docker run -it --name java-dev-base ubuntu:22.04 bash
# 容器內執行:
apt-get update && apt-get install -y openjdk-17-jdk maven git vim curl
# 配置環境變量(寫入 /etc/profile)
echo 'export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64' >> /etc/profile
echo 'export MAVEN_HOME=/opt/maven' >> /etc/profile
echo 'export PATH=$JAVA_HOME/bin:$MAVEN_HOME/bin:$PATH' >> /etc/profile
source /etc/profile

# 3. 安裝 Tomcat 9
cd /opt && wget https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.85/bin/apache-tomcat-9.0.85.tar.gz
tar -xzf apache-tomcat-9.0.85.tar.gz && ln -s apache-tomcat-9.0.85 tomcat

# 4. 提交為新鏡像
exit  # 退出容器
docker commit java-dev-base myorg/java-dev:1.0
docker rm java-dev-base

步驟 2:掛載代碼並啟動開發容器

docker run -it -d \
  --name java-dev \
  -v /Users/name/workspace:/app \
  -v /Users/name/.m2:/root/.m2 \   # 緩存 Maven 本地倉庫
  -p 8080:8080 \
  myorg/java-dev:1.0 \
  bash

進入容器:docker exec -it java-dev bash

步驟 3:自動化構建腳本 dev.sh(放入專案根目錄)

#!/bin/bash
# 用法:./dev.sh -y  # 全量更新依賴並啟動
#       ./dev.sh -p  # 快速打包啟動
#       ./dev.sh -r  # 僅重啟 Tomcat
#       ./dev.sh -c  # 僅編譯 Java 類熱加載
#       ./dev.sh -w  # 監聽 VM 模板文件自動同步
#       ./dev.sh -l  # 尾部追蹤 catalina.out

set -e
DEV_PROFILE="local"
WAR_SOURCE="/app/target/*.war"
TOMCAT_HOME="/opt/tomcat"
WEBAPPS="$TOMCAT_HOME/webapps"
WT=5  # 監聽間隔秒

newwar() {
  rm -rf "$WEBAPPS"/*
  mv $WAR_SOURCE "$WEBAPPS/ROOT.war"
}
restart_tomcat() {
  killall -9 java 2>/dev/null || true
  "$TOMCAT_HOME/bin/startup.sh"
  tail -f "$TOMCAT_HOME/logs/catalina.out"
}
sync_vm() {
  watch -n $WT cp -r /app/src/main/webapp/WEB-INF/tpl/* "$WEBAPPS/ROOT/WEB-INF/tpl/"
}
sync_java() {
  cp -r /app/target/classes/* "$WEBAPPS/ROOT/WEB-INF/classes/"
}

case "$1" in
  -y) mvn clean install -U -P$DEV_PROFILE -DskipTests && newwar && restart_tomcat ;;
  -p) mvn clean package -P$DEV_PROFILE -DskipTests && newwar && restart_tomcat ;;
  -r) restart_tomcat ;;
  -c) mvn clean compile -P$DEV_PROFILE -DskipTests && sync_java && restart_tomcat ;;
  -w) sync_vm ;;
  -l) tail -f "$TOMCAT_HOME/logs/catalina.out" ;;
  *) echo "Usage: $0 {-y|-p|-r|-c|-w|-l}" ;;
esac

容器內執行:chmod +x dev.sh && ./dev.sh -y

步驟 4:團隊離線分發(無 Registry 環境)

# 導出鏡像(約 1.2GB)
docker save myorg/java-dev:1.0 -o java-dev-1.0.tar

# 內網傳輸(AirDrop/共享目錄/USB)
# 同事機器導入
docker load -i java-dev-1.0.tar

# 驗證
docker images | grep java-dev

將 dev.sh 放入專案 Git 倉庫,新成員 git clone → docker load → docker run -v ... → ./dev.sh -y 三分鐘上手。

常見問題排查

現象原因解決
容器啟動即退出無前台進程docker run -it -d ... bash 保持交互式
宿主機無法訪問 8080防火牆/端口映射錯誤確認 -p 8080:8080、宿主機防火牆放行
Maven 下載極慢無鏡像源掛載宿主機 ~/.m2 或鏡像內配置阿里云 settings.xml
熱加載不生效Tomcat 未啟用 reloadableContext reloadable="true" 或用 JRebel/Spring Loaded
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved