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

docker部署使用

前言

在项目开发与部署的实际工作中,不同环境需要的相关依赖不同,比如本地使用 JDK 11 这些问题的根源,在于传统部署模式下 “项目与环境强绑定”—— 每台服务器的操作系统、依赖版本、配置参数都可能存在差异​

而 Docker 的出现,彻底改变了这一现状。它通过 “容器化” 技术,将 Java 项目、所需的 JDK、中间件(如 Tomcat、Redis)及依赖库,打包成一个独立的 “镜像”。无论放到哪台安装了 Docker 的服务器上,都能以完全一致的状态运行,真正实现 “一次构建,到处运行”。

使用场景

  1. 多环境一致性保障:开发、测试、生产环境统一​
  1. 微服务部署:拆分后的 Java 微服务(如 Spring Cloud 模块),每个服务独立容器,启停、扩容互不干扰;​
  1. 资源隔离:不同 Java 项目共享服务器硬件,却不冲突;​
  1. 快速迭代发布:容器启停秒级完成,项目快速更新。​

核心功能

  1. 镜像机制:打包 Java 项目、JDK、依赖为镜像,可复用、版本化管理;​
  1. 容器隔离:每个容器有独立网络、文件系统,不占用宿主机额外资源;​
  1. Dockerfile 定制:通过简单指令,自定义 Java 项目的构建、易维护;​
  1. 轻量级:比虚拟机省资源,一台服务器可部署更多 Java 容器。

案例

部署Spring Boot 项目为例,详细讲解从 Dockerfile 编写到容器运行的完整流程,包含常见问题解决方法。​

1. 准备工作​

  • 项目编译:本地生成可运行的 Jar 包(如user-service.jar)。编译时需注意:若项目依赖外部配置文件,需在application.yml中设置正确的配置路径(如spring.config.location=/app/config/),方便后续挂载配置文件。​
  • Docker 环境:服务器需安装 Docker(以 CentOS 7 为例,安装命令:yum install -y docker,启动 Docker 服务:systemctl start docker)。​

2. 编写 Dockerfile(带注释说明)​

在user-service.jar所在目录创建Dockerfile文件,内容如下(每一步都标注核心作用)

# 1. 指定基础镜像:选择轻量级的OpenJDK 11镜像
FROM openjdk:11-jre-slim# 2. 维护者信息
LABEL maintainer="dev-team@example.com"# 3.很多基础镜像默认时区为UTC,需改为Asia/Shanghai,否则日志时间会差8小时
RUN apt-get update && apt-get install -y tzdata \&& ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \&& echo "Asia/Shanghai" > /etc/timezone \&& apt-get clean  # 清理缓存,减少镜像体积# 4. 设定容器内的工作目录(规范文件存放路径)
# 后续的COPY、RUN等指令都会基于此目录执行
WORKDIR /app# 5. 复制本地文件到容器:分两步复制(Jar包和配置文件)
COPY user-service.jar /app/user-service.jar
# 建议将配置文件单独放在本地的config目录,避免硬编码到Jar包
COPY config/application-prod.yml /app/config/application-prod.yml# 6.此处暴露的端口需与Spring Boot项目配置的server.port一致(如8080)
EXPOSE 8080# 7. 设定容器启动命令(ENTRYPOINT用于固定启动指令,不可被覆盖)
# -Dspring.profiles.active=prod:指定使用生产环境配置
# -Xms256m -Xmx512m:设置Java堆内存(避免内存溢出,根据服务器配置调整)
ENTRYPOINT ["java", "-Dspring.profiles.active=prod", "-Xms256m", "-Xmx512m", "-jar", "user-service.jar"]

常见问题 1:构建时提示 “COPY failed: no source files were specified”?​

原因:COPY指令中的源文件路径错误(如本地没有config/application-prod.yml文件)。​

解决:检查本地文件路径是否与 Dockerfile 中的COPY路径一致,确保文件存在。​

常见问题 2:构建速度慢,卡在 “apt-get update”?​

原因:基础镜像的软件源在国外,下载速度慢。​

解决:在RUN apt-get update前添加国内源(如阿里云源),修改 Dockerfile 中的对应步骤:

RUN echo "deb http://mirrors.aliyun.com/debian bullseye main contrib non-free" > /etc/apt/sources.list \&& apt-get update && apt-get install -y tzdata ...

构建完成后,通过docker images命令可查看镜像:

3. 构建与运行​

  • 构建镜像:docker build -t java-demo:1.0 .(1.0为版本号);​
  • 启动容器:docker run -d -p 8080:8080 --name demo-app java-demo:1.0;​
  • 验证:访问服务器IP:8080,能正常返回接口数据即成功。​

4、Docker 部署 Java 项目的核心好处​

  1. 环境统一:彻底解决 “环境不一致” 问题,降低部署排错成本;​
  1. 简化流程:无需手动装 JDK、配环境变量,Dockerfile 一键搞定;​
  1. 易扩展​
  1. 版本可控:镜像按版本管理=​

结尾语​

对 开发者而言,Docker 不是 “额外负担”,而是简化部署、提升效率的工具。掌握 Dockerfile 编写与容器化部署,能快速适配项目的发布。

http://www.dtcms.com/a/405801.html

相关文章:

  • 信息安全基础知识:05物理与环境安全
  • 【双机位A卷】华为OD笔试之【队列】双机位A-篮球游戏【Py/Java/C++/C/JS/Go六种语言】【欧弟算法】全网注释最详细分类最全的华子OD真题题解
  • 考研复习-线性代数-第二章-矩阵
  • wordpress主题样式表绵阳做seo网站公司
  • Answer+cpolar:企业知识共享的远程协作方案
  • 在SSL证书是有效的前提下,依旧显示“资源不安全
  • 鸿蒙NEXT系统Picker全解析:安全高效的用户资源访问之道
  • Gin + JWT 认证机制详解:构建安全的Go Web应用
  • VS要求的.NET 9 SDK需求、安装注意事项及VS版本搭配
  • SSL证书安全的几个问题
  • 4种安全方法:将一加手机联系人传输到电脑
  • 网站建设盐城北安网站建设
  • Guidde:AI驱动的视频文档创建工具
  • 29.Linux防火墙管理
  • 记账本|基于SSM的家庭记账本小程序设计与实现(源码+数据库+文档)
  • DHCP 服务器
  • K8s学习笔记(七) yaml
  • K8S的StorageClass使用节点本地LVM逻辑卷怎么进行PVC扩容
  • 软件开发公司如何通过 UI 设计服务打造差异化竞争力
  • 【源码剖析】5-生产者-RecordAccumulator分析
  • PHP编程基础
  • 单片机 | 基于51单片机的摇摇棒设计全解析
  • 从零开始部署Android环境的Jenkins CI/CD流水线(docker环境,Win系统)
  • HttpSessionBindingListener
  • AndroidEventBus 发布者发布一次订阅者接收到多次问题
  • Unity开发CI/CD工具Jenkins的安装(Windows10)
  • 按键精灵安卓/ios辅助工具,脚本开发新手教程ui界面介绍
  • Machine Learning HW4 report: 语者识别 (Hongyi Lee)
  • Android 系统源码级进程保活全方案:从进程创建到后台防护
  • 在hadoop中Job提交的流程