news 2026/4/23 13:12:48

Docker开发笔记(详解)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Docker开发笔记(详解)

Docker 是什么?

Docker 是一个工具,能把你的程序和它需要的环境(比如 JDK、配置、依赖)打包成一个“集装箱”(叫容器),在任何装了 Docker 的电脑上都能直接运行,不用再配环境。

✅ 解决问题:
“在我电脑能跑,你电脑跑不了” →一次打包,到处运行!


核心名词

名词是什么一句话理解
镜像(Image)程序的“安装包”只读模板,不能运行,但可以用来启动容器(如mysqlnginx
容器(Container)正在运行的程序镜像启动后的实例,能运行、能停止、能删除
Dockerfile打包说明书一个文本文件,告诉 Docker 怎么把你的代码做成镜像
卷(Volume)持久化存储容器删了数据也不丢(比如数据库文件存这里)
网络(Network)容器之间的“对讲机”同一网络下的容器可以用名字互相访问(如mysqlredis

问题 1:Dockerfile 是用来构建项目运行的 JDK 环境是吧?

答:不完全是。

  • Dockerfile不是专门用来装 JDK 的,而是基于已有的 JDK 镜像(如eclipse-temurin:17-jre-alpine,把你的 Spring Boot JAR 包打包进去,形成一个完整的可运行应用镜像
  • JDK 环境由FROM指令直接复用官方镜像,你无需手动安装。
  • 所以:Dockerfile = 官方 JDK + 你的代码 + 启动命令

问题 2:COPY u2vd_cloud.jar app.jar为什么有两个 jar?Spring Cloud 项目也这样部署吗?

答:

  • 这行命令的意思是:把虚拟机当前目录下的u2vd_cloud.jar复制到容器里,并改名为app.jar
    • 左边是源文件名(你上传的 JAR)
    • 右边是容器内的目标文件名(可自定义,通常简化为app.jar
  • Spring Cloud 项目完全一样部署
    • 每个微服务(user-service、order-service 等)各自打成一个 JAR
    • 每个服务单独写自己的 Dockerfile
    • 各自构建镜像、各自运行容器
    • 通过--network加入同一网络,用服务名互相调用

核心原则:一个 JAR → 一个容器


问题 3:我的环境是本地开发 + 虚拟机跑 Docker,用 MobaXterm 连接,操作流程是什么?

答:四步极简流程:

  1. 本地打包:IDEA 执行 Mavenpackage,得到xxx.jar
  2. 上传 JAR:用 MobaXterm 左侧 SFTP 面板,把 JAR 拖到虚拟机目录(如/root/app/
  3. 写 Dockerfile:在虚拟机同目录下创建 Dockerfile,内容包含:dockerfile
    FROM eclipse-temurin:17-jre-alpine WORKDIR /app COPY 你的真实文件名.jar app.jar EXPOSE 8080 ENTRYPOINT ["java", "-jar", "app.jar"]
  4. 构建并运行
    FROM eclipse-temurin:17-jre-alpine WORKDIR /app COPY 你的真实文件名.jar app.jar EXPOSE 8080 ENTRYPOINT ["java", "-jar", "app.jar"]
    ⚠️关键提醒:Docker 只能访问虚拟机上的文件,必须先上传 JAR 到虚拟机

高频命令速查表

场景命令说明
镜像docker images列出本地镜像
docker build -t myapp .用当前目录 Dockerfile 构建
docker rmi 镜像名删除镜像
容器docker ps运行中的容器
docker ps -a所有容器(含停止的)
docker run -d --name xx 镜像后台启动新容器
docker start/stop/restart xx管理已有容器
docker logs -f xx实时看日志(调试神器)
docker exec -it xx bash进入容器调试
网络docker network ls列出网络
docker network create net创建自定义网络
docker network inspect net查看哪些容器连入
docker volume ls列出命名卷
docker volume inspect xx查看卷存储位置
清理docker system prune -a清理无用资源(慎用)
# 启动 MySQL 容器 docker run -d \ # 后台运行(detached 模式) --name mysql \ # 给容器起名为 "mysql" -p 3306:3306 \ # 将虚拟机的 3306 端口映射到容器的 3306 端口(供外部连接) -e TZ=Asia/Shanghai \ # 设置容器时区为上海(避免时间差8小时) -e MYSQL_ROOT_PASSWORD=123 \ # 设置 MySQL root 用户密码(必须设置!) -v /root/mysql/data:/var/lib/mysql \ # 挂载数据卷:持久化数据库文件(删容器不丢数据) -v /root/mysql/conf:/etc/mysql/conf.d \ # 挂载配置目录:可放入自定义 my.cnf 配置文件 -v /root/mysql/init:/docker-entrypoint-initdb.d \ # 挂载初始化脚本目录:首次启动时自动执行 .sql 或 .sh 文件 --network net \ # 加入自定义网络 "net",便于与其他容器(如 Java 应用)通过容器名通信 mysql # 使用官方 mysql 镜像(默认 latest) # 启动 RabbitMQ 容器(带管理界面) docker run \ -e RABBITMQ_DEFAULT_USER=itheima \ # 设置默认用户名(覆盖 guest) -e RABBITMQ_DEFAULT_PASS=123321 \ # 设置默认密码 -v mq-plugins:/plugins \ # 挂载命名卷:持久化已安装的插件(重启不丢失) --name mq \ # 容器名称设为 "mq" --hostname mq \ # 设置容器内主机名为 "mq"(RabbitMQ 对 hostname 敏感,建议显式指定) -p 15672:15672 \ # 映射 Web 管理界面端口(浏览器访问 http://IP:15672) -p 5672:5672 \ # 映射 AMQP 协议端口(Java 应用通过此端口连接) --network net \ # 加入同一自定义网络 "net",可被其他服务用 "mq" 名称访问 -d \ # 后台运行 rabbitmq:3.8-management # 使用带 management 插件的 RabbitMQ 3.8 版本镜像

本机(Windows)有 MySQL 占用 3306,Docker 在虚拟机也用-p 3306:3306,会冲突吗?

✅ 答案:不会冲突!

原因:
  • Windows 的 3306虚拟机的 3306两台不同机器的端口,互不影响。
  • 你在 Windows 访问:
    • localhost:3306→ 连的是本机 MySQL
    • 虚拟机IP:3306→ 连的是Docker 里的 MySQL

⚠️ 但注意:

如果虚拟机自己也装了 MySQL(非 Docker),再运行docker run -p 3306:3306就会端口冲突

解决方法:
  1. 推荐:停掉虚拟机本地的 MySQLbash
    sudo systemctl stop mysqld sudo systemctl disable mysqld
  2. 或改 Docker 映射端口(如-p 3307:3306),但需连虚拟机IP:3307

✅ 最佳实践:

  • 虚拟机只跑 Docker 容器,不装原生数据库/中间件
  • 本机服务和虚拟机 Docker 服务完全隔离,放心共存

💡 记住:端口冲突只发生在同一台机器上,跨机器(Windows ↔ 虚拟机)永远不冲突!

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

国产PDF神器!完全免费功能强大

下载链接 https://pan.freedw.com/s/jhqctx 今天给大家安利一款国产PDF神器「PDF补丁丁」,功能强大还完全免费,再也不用为PDF处理发愁了! 软件界面很简洁但功能超实用:支持批量修改PDF文档,一次性处理多个文件特别省…

作者头像 李华
网站建设 2026/4/23 10:11:16

2026必备!10个降AI率网站推荐,千笔AI帮你轻松应对论文查重难题

2026必备!10个降AI率网站推荐,千笔AI帮你轻松应对论文查重难题 AI降重工具,让论文更自然、更安心 在当前学术环境中,越来越多的高校和机构开始采用AIGC检测技术来评估论文的原创性。对于专科生而言,如何有效降低AI痕…

作者头像 李华
网站建设 2026/4/23 3:33:21

SQL注入学习教程,从入门到精通收藏这一篇就够了!

前言 SQL注入(SQL Injection)是一种常见的Web安全漏洞,形成的主要原因是web应用程序在接收相关数据参数时未做好过滤,将其直接带入到数据库中查询,导致攻击者可以拼接执行构造的SQL语句。那什么是SQL了?结…

作者头像 李华
网站建设 2026/4/18 4:40:54

智能效率工具全览:10款AI应用免费功能与高级付费方案分析

�� 10大降AIGC平台核心对比速览 排名 工具名称 降AIGC效率 适用场景 免费/付费 1 askpaper ⭐⭐⭐⭐⭐ 学术论文精准降AI 付费 2 秒篇 ⭐⭐⭐⭐⭐ 快速降AIGC降重 付费 3 Aibiye ⭐⭐⭐⭐ 多学科论文降AI 付费 4 Aicheck ⭐⭐⭐⭐…

作者头像 李华
网站建设 2026/4/23 11:31:26

智能写作 AI 论文软件榜单:2026 年权威评测与选型指南

在 AI 赋能学术写作的时代,选择合适的智能工具能显著提升论文创作效率与质量。本榜单基于全流程覆盖、合规性保障、中文适配、性价比四大维度综合评测,精选 10 款主流 AI 论文写作软件,重点突出 PaperRed 的核心优势,帮助不同需求…

作者头像 李华