当前位置: 首页 > news >正文

Java学习第七十五部分——Docker

目录

🔍 ​​一、前言提要​

⚙️ ​​二、核心概念​​

🛠️ ​​三、核心技术​​

⚖️ ​​四、与传统虚拟机的区别​​

🚀 ​​五、核心优势​​

🌐 ​​六、应用场景​​

⚙️ ​​七、核心价值​——对于Java开发​

🛠️ ​​八、Java 应用容器化核心步骤​

⚖️ ​​九、构建 Java 镜像的三种方式对比​​

🔄 ​​十、容器生命周期管理​​

🔒 ​​十一、环境最佳实践​​

💎 ​​十二、总结​归纳概述​


🔍 ​​一、前言提要

       Docker 是一个​开源的容器化平台​​,允许开发者将应用程序及其依赖环境(如代码、运行时环境、系统工具、配置文件等)打包成一个轻量级、可移植的容器。容器在隔离的环境中运行,确保应用在不同系统(开发、测试、生产环境)中行为一致,实现“​一次构建,处处运行​”的目标。

⚙️ ​​二、核心概念​

​1.镜像(Image)​

  • ​静态模板​​:只读文件,包含创建容器所需的全部依赖和配置。镜像是分层的(Layer),每一层代表一次修改(如安装软件包),通过联合文件系统(UnionFS)合并为单一视图。

  • ​来源​​:可从公共仓库(如 Docker Hub)下载,或通过 Dockerfile 自定义构建。

2.​​容器(Container)​

  • ​运行实例​​:基于镜像启动的独立进程,拥有隔离的文件系统、网络和资源。容器层是可读写的,修改仅作用于容器层(写入时复制技术),不影响原始镜像。

  • ​生命周期​​:支持创建、启动、停止、删除等操作,秒级启动。

​3.仓库(Repository)​

  • ​镜像存储中心​​:分为公有仓库(如 Docker Hub)和私有仓库(如阿里云容器镜像服务)。用于分发、共享镜像。

🛠️ ​​三、核心技术​

Docker 依赖 Linux 内核的隔离与资源控制技术:

​1.命名空间(Namespaces)​

  • 实现资源隔离:包括进程(PID)、网络(NET)、文件系统(MNT)、用户(USER)等,确保容器间互不影响。

2.​​控制组(Cgroups)​

  • 限制资源使用:如 CPU、内存、磁盘 I/O,防止单个容器耗尽主机资源。

3.​​联合文件系统(UnionFS)​

  • 支持镜像分层:合并多个只读层为一个文件系统,减少冗余存储,加速镜像构建与分发。

⚖️ ​​四、与传统虚拟机的区别​

​特性​​Docker 容器​​传统虚拟机​
​虚拟化级别​操作系统级(共享宿主机内核)硬件级(通过 Hypervisor)
​启动速度​秒级启动分钟级启动
​资源占用​极低(MB 级内存)高(GB 级内存)
​隔离性​进程级隔离完整系统隔离
​性能损耗​<5%15-30%
​镜像大小​通常为几十 MB几 GB 起步

🚀 ​​五、核心优势​

​1.环境一致性​

  • 开发、测试、生产环境完全一致,杜绝“本地能跑,线上崩了”的问题。

​2.高效资源利用​

  • 容器直接共享宿主机内核,无需虚拟化层,资源利用率提升 1-2 个数量级。

3.​​快速部署与扩展​

  • 秒级启动容器,结合编排工具(如 Kubernetes)实现自动扩缩容。

​3.简化 DevOps 流程​

  • 支持持续集成/部署(CI/CD),镜像构建透明化,提升开发与运维协作效率。

🌐 ​​六、应用场景​

1.​​微服务架构​

  • 每个微服务独立容器化,实现模块化部署与扩展。

​2.持续集成与交付(CI/CD)​

  • 自动化构建镜像 → 测试 → 部署流水线,缩短发布周期。

3.​​混合云与跨平台迁移​

  • 容器可在物理机、虚拟机、公有云(如腾讯云 ECS)无缝迁移。

4.​​高密度部署​

  • 单台宿主机运行数百容器,适合云原生与 PaaS 平台。

⚙️ ​​七、核心价值​——对于Java开发

1.​​环境一致性​

  • 消除“本地可运行,生产环境失败”问题,确保开发、测试、生产环境完全一致。

2.​​资源与部署效率​

  • 秒级启动容器,资源占用仅为虚拟机的 1/10,支持快速水平扩展。

3.​​跨平台移植性​

  • 镜像可在任意支持 Docker 的环境中运行(本地服务器、云平台)。

🛠️ ​​八、Java 应用容器化核心步骤​

对于windows系统

一、系统准备
1. 启用虚拟化(管理员 PowerShell):  
   dism.exe /online /enable-feature /featurename:Microsoft-Hyper-V /all /norestart
   dism.exe /online /enable-feature /featurename:Containers /all /norestart
2. 安装 WSL (提升性能):  
   wsl --install
   wsl --set-default-version 2

二、安装 Docker Desktop
1. 下载官方安装包  (Docker Desktop: The #1 Containerization Tool for Developers | Docker)
2. 双击运行安装(默认配置即可)

三、验证安装
docker --version  # 输出版本号
docker run hello-world  # 测试基础功能

四、性能优化
1. 配置镜像加速(托盘图标 → Settings → Docker Engine):  
   {
     "registry-mirrors": ["https://docker.m.daocloud.io"]
   }
2. 重启 Docker 生效 
> - 国内用户必选镜像加速(阿里云/腾讯云地址同理)  
> - 安装完成后需重启系统

对于linux系统

​1. 基础环境搭建​

  • ​安装 Docker​​(以 Ubuntu 为例),打开终端:
    sudo apt update
    sudo apt install docker-ce docker-ce-cli containerd.io
    sudo systemctl start docker
    验证安装:docker run hello-world

​2. 编写 Dockerfile​

# 多阶段构建示例(推荐)
# 阶段1:使用 JDK 编译应用
FROM maven:3.8-jdk-11 AS builder
WORKDIR /app
COPY src ./src
COPY pom.xml .
RUN mvn clean package -DskipTests# 阶段2:使用 JRE 运行
FROM openjdk:11-jre-slim
WORKDIR /app
COPY --from=builder /app/target/*.jar app.jar
EXPOSE 8080
CMD ["java", "-jar", "app.jar"]

​关键指令​​:

  • COPY --from:仅复制编译产物,减小镜像体积。
  • EXPOSE:声明容器监听端口(需与 -p 参数映射使用)。

​3. 构建与运行​

  • ​构建镜像​​:
    docker build -t my-java-app:1.0.0 .
  • ​启动容器​​:
    docker run -d -p 8080:8080 --name java-container my-java-app:1.0.0
    验证:访问 http://localhost:8080

​4. 多服务管理(Docker Compose)​

version: '3'
services:app:build: .ports: ["8080:8080"]db:image: mysql:8.0environment:MYSQL_ROOT_PASSWORD: your_password

启动:docker-compose up -d

⚖️ ​​九、构建 Java 镜像的三种方式对比​

​方式​​优点​​缺点​​适用场景​
​仅复制 JAR 包​镜像小;无需构建工具需宿主机预装 Maven/JDK简单应用,本地调试
​普通 Docker 构建​宿主机无需环境;易集成 CI/CD镜像大(含构建工具)快速原型验证
​多阶段构建​镜像最小;无构建工具;生产安全需学习多阶段语法​生产环境推荐​​ ✅

多阶段构建减小镜像 70%+ 体积(如从 600MB → 150MB)。

🔄 ​​十、容器生命周期管理​

  1. ​编程式控制(Java Docker API)​

    DockerClient dockerClient = DockerClientBuilder.getInstance().build();
    // 创建容器
    CreateContainerResponse res = dockerClient.createContainerCmd("my-java-app:1.0.0").exec();
    // 启动容器
    dockerClient.startContainerCmd(res.getId()).exec();
    // 停止容器
    dockerClient.stopContainerCmd(res.getId()).exec();
  2. ​日志与监控​

  • 查看日志:docker logs -f java-container

  • 资源监控:docker stats java-container

🔒 ​​十一、环境最佳实践​

1.​​镜像优化​​:

  • 使用 slimalpine 基础镜像(如 openjdk:17-jdk-slim)。

  • 漏洞扫描:集成 Trivy(trivy image my-java-app:1.0.0)。

2.​​安全配置​​:

  • 避免 root 用户运行:USER 1001 在 Dockerfile 中指定非特权用户。

  • 设置内存限制:docker run -m 512m ... 防止 OOM。

​3.CI/CD 集成​​:

  • Maven/Gradle 插件自动构建镜像(如 dockerfile-maven-plugin)。

💎 ​​十二、总结​归纳概述

  • Docker 通过轻量级容器技术​重塑了应用部署方式,其核心价值在于:​​标准化交付​​:以镜像为单元封装应用与环境;极致效率​​:秒级启动、低资源损耗;​​生态融合​​:无缝集成云平台(如腾讯云 TKE)、DevOps 工具链及微服务架构。

  • Docker 化 Java 应用的核心在于:​通过多阶段构建生成最小镜像​​ + ​​Compose 管理依赖服务​​ + ​​编程式 API 实现自动化运维​​。遵循镜像瘦身、漏洞扫描、资源限制三大原则,可显著提升生产环境稳定性与安全性。

📚 ​​延伸学习​​:
实践建议从 Docker 官方文档 入手,或参考《Docker 技术入门与实战》。

http://www.xdnf.cn/news/1182835.html

相关文章:

  • 【前端】JavaScript文件压缩指南
  • Gitee Test:国产软件测试平台如何筑牢关键领域数字安全屏障
  • Spring Boot License 认证系统
  • c# openxml 打开加密 的word读取内容
  • SQL性能优化
  • 基于开源链动2+1模式AI智能名片S2B2C商城小程序的私域流量池用户运营研究
  • 如何实现缓存音频功能(App端详解)
  • vscode 字体的跟换
  • OpenCV 图像变换全解析:从镜像翻转到仿射变换的实践指南
  • VSCode——python选择解释器消失的解决办法
  • 【通识】算法案例
  • 安卓上的迷之K_1171477665
  • 顺应AI浪潮,电科金仓数据库再创辉煌
  • 2025真实面试试题分析-安卓客户端开发
  • 去除视频字幕 2, 使用 PaddleOCR 选取图片中的字幕区域, 根据像素大小 + 形状轮廓
  • AI浪潮涌,数据库“融合智能”奏响产业新乐章
  • I/O多路复用机制中触发机制详细解析
  • 【数据结构】长幼有序:树、二叉树、堆与TOP-K问题的层次解析(含源码)
  • 【SpringAI实战】实现仿DeepSeek页面对话机器人(支持多模态上传)
  • 【深度学习优化算法】09:Adadelta算法
  • JavaScript -Socket5代理使用
  • 攻防世界-Crypto-Morse
  • react+threejs实现自适应分屏查看/3D场景对比功能/双场景对比查看器
  • C 语言 | 结构体详解:自定义数据类型的艺术
  • 筑牢网站运营根基:售后工作的核心维度与实践方法
  • 篇五 网络通信硬件之PHY,MAC, RJ45
  • 车身域控制器MCU市场报告:解析行业现状与未来趋势
  • 【机器学习之推荐算法】基于矩阵分解和损失函数梯度下降的协同过滤算法实现
  • 解决angular与jetty websocket 每30s自动断连的问题
  • AR眼镜重塑外科手术导航:精准“透视”新突破