news 2026/4/19 16:43:42

docker哲学??

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
docker哲学??

到时候看看吧

一、 容器怎么加载我的 Jar 代码?(搬运工流程)

你担心的“加载”问题,其实在docker build阶段就解决了。

  1. 本地打包:你在本地 IDEA 里mvn package得到app.jar

  2. 写 Dockerfile:里面有一行COPY target/app.jar /app/my-project.jar

  3. 构建镜像:当你执行docker build时,Docker 会把这个app.jar“缝”进镜像里。

  4. 镜像 = 压缩包:此时,你的镜像就像一个预装了 Linux 系统、JDK 环境和你 Jar 包的“超级压缩包”。

  5. 容器运行:当你run的时候,Docker 只是把这个压缩包解压运行。Jar 包就在容器内部的硬盘里,它当然能直接加载!

总结:代码不是运行时“塞”进去的,而是提前“打”进去的。


二、 容器互相隔离,怎么互相依赖?(网络桥梁)

你说得对,它们确实是隔离的(就像两间完全隔音的屋子)。但是,Docker 给这些屋子牵了**“内线电话”**。

1. 为什么不相互隔离了?

当你使用Docker Compose启动时,它会默认创建一个虚拟网络。所有在这个yml文件里定义的服务,都会自动加入这个网络。

2. 怎么“打电话”?

在 Java 代码里,以前你连 Redis 可能是写127.0.0.1。但在 Docker 环境里,你直接写“服务名”

  • yml里你给 Redis 起名叫my-redis

  • 那么在 Java 的配置文件里:spring.redis.host = my-redis

  • Docker 的内部 DNS 会自动把my-redis翻译成那个容器的内部 IP。

这就是“隔离但互通”:它们在系统层面是隔离的(安全、独立),但在网络层面是互联的。


三、 完整的“通关”步骤(实战版)

你想玩 Docker 的流程,最标准的姿势是这样的:

1. 准备阶段(本地)
  • 写代码 $\rightarrow$mvn package得到app.jar

  • 在项目根目录新建Dockerfile(把 Jar 包打成镜像的说明书)。

  • 在项目根目录新建docker-compose.yml(指挥官的蓝图)。

2. 上传阶段
  • 把你的整个项目文件夹(包括jarDockerfileyml)通过 FTP 工具上传到服务器(比如/opt/myapp)。

3. 运行阶段(服务器 CMD)

进入服务器的那个文件夹,执行:

Bash

# 1. 现场造镜像(根据 Dockerfile) docker-compose build # 2. 一键起飞(启动所有服务) docker-compose up -d

四、 你的流程校准

  • 买服务器:对,CentOS 是主流。

  • 装 Docker:对。

  • Compose.yml:对,放在项目目录下。

  • 怎么运行?:不用手动引入 Jar 包,而是通过docker-compose build。它会根据Dockerfile里的COPY命令,自动把 Jar 包抓进镜像里。

  • 最后up -d:全家桶起飞!


💡 进阶:为什么要这么麻烦?

你可能会问:我直接在服务器java -jar不行吗?

场景模拟:

明天你要给客户部署,客户环境没装 JDK,或者装的是 Java 8,而你用的是 Java 17。

  • 没 Docker:你在客户服务器上折腾半天装 JDK、配环境变量,满头大汗。

  • 有 Docker:你直接把镜像推送到私有仓库,在客户机器上敲一行docker-compose up5秒钟,项目上线,你直接下班去喝咖啡。

镜像 (Image):对!它就是“只读的模板”,像安装盘。

仓库 (Registry):对!就像 DockerHub,是下载镜像的地方。

容器 (Container):稍微修正一下。容器不是把环境重新打包,容器是**“镜像运行时的状态”**。你可以理解为:镜像 = 游戏安装包,容器 = 正在运行的游戏实例。

核心误区:你觉得一个容器里要塞进 Redis+MySQL+项目。千万别!

Docker 的哲学是:一个容器只干一件事。

你的项目 1 是一个容器,MySQL 是一个容器,Redis 也是一个容器。它们是独立的“小房间”。

2. 你的疑问:4 个项目要启动 8 次,太繁琐了?

如果你用 docker run 一个个去点,确实要把人累死。为了解决你说的这种“繁琐”,官方给出了终极方案:Docker Compose。

什么是 Docker Compose?

它是 Docker 的“总指挥部”。你不需要敲 8 次 run,你只需要写一个 .yml 格式的蓝图文件,描述清楚:我要几个 MySQL,几个项目,分别占什么端口。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/19 16:39:43

一文学会Excel条件格式:让数据自己“开口说话“

🏷️ 标签:Excel | 条件格式 | 数据可视化 | Excel技巧 | 办公效率 | 数据分析 前言:你的表格,为什么"不会说话"? 先看一个场景。 你的领导让你整理一份销售月报,数据如下: 姓名 销售额 是否达标 张三 48000 否 李四 52000 是 王五 31000 否 赵六 65000 是…

作者头像 李华
网站建设 2026/4/19 16:39:41

3个核心突破:GEMMA如何重新定义基因组关联分析的工作流

3个核心突破:GEMMA如何重新定义基因组关联分析的工作流 【免费下载链接】GEMMA Genome-wide Efficient Mixed Model Association 项目地址: https://gitcode.com/gh_mirrors/gem/GEMMA 如果你正在寻找一个能够高效处理大规模基因组数据的混合模型分析工具&am…

作者头像 李华
网站建设 2026/4/19 16:36:22

BiliPlus:如何让你的B站体验变得更好的终极指南

BiliPlus:如何让你的B站体验变得更好的终极指南 【免费下载链接】biliplus 🧩 A Chrome/Edge extension to feel better in bilibili.com 项目地址: https://gitcode.com/gh_mirrors/bi/biliplus 还在为B站的界面杂乱而烦恼吗?想要更纯…

作者头像 李华
网站建设 2026/4/19 16:33:39

GitHub上这个Star过千的JSON Viewer,除了格式化还能这样用?

GitHub上这个Star过千的JSON Viewer,除了格式化还能这样用? 作为一名长期与API打交道的开发者,最头疼的莫过于面对未经格式化的JSON数据。那些密密麻麻的字符堆砌,不仅难以阅读,更让调试效率大打折扣。直到我在GitHub上…

作者头像 李华