在国产麒麟系统上,用Rider和Avalonia搞定C#桌面开发(.NET 6.0实战)
2026/5/30 3:26:37
Docker 是一个工具,能把你的程序和它需要的环境(比如 JDK、配置、依赖)打包成一个“集装箱”(叫容器),在任何装了 Docker 的电脑上都能直接运行,不用再配环境。
✅ 解决问题:
“在我电脑能跑,你电脑跑不了” →一次打包,到处运行!
| 名词 | 是什么 | 一句话理解 |
|---|---|---|
| 镜像(Image) | 程序的“安装包” | 只读模板,不能运行,但可以用来启动容器(如mysql、nginx) |
| 容器(Container) | 正在运行的程序 | 镜像启动后的实例,能运行、能停止、能删除 |
| Dockerfile | 打包说明书 | 一个文本文件,告诉 Docker 怎么把你的代码做成镜像 |
| 卷(Volume) | 持久化存储 | 容器删了数据也不丢(比如数据库文件存这里) |
| 网络(Network) | 容器之间的“对讲机” | 同一网络下的容器可以用名字互相访问(如mysql、redis) |
答:不完全是。
eclipse-temurin:17-jre-alpine),把你的 Spring Boot JAR 包打包进去,形成一个完整的可运行应用镜像。FROM指令直接复用官方镜像,你无需手动安装。COPY u2vd_cloud.jar app.jar为什么有两个 jar?Spring Cloud 项目也这样部署吗?答:
u2vd_cloud.jar复制到容器里,并改名为app.jar。app.jar)--network加入同一网络,用服务名互相调用✅核心原则:一个 JAR → 一个容器
答:四步极简流程:
package,得到xxx.jar/root/app/)FROM eclipse-temurin:17-jre-alpine WORKDIR /app COPY 你的真实文件名.jar app.jar EXPOSE 8080 ENTRYPOINT ["java", "-jar", "app.jar"]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 版本镜像-p 3306:3306,会冲突吗?localhost:3306→ 连的是本机 MySQL虚拟机IP:3306→ 连的是Docker 里的 MySQL如果虚拟机自己也装了 MySQL(非 Docker),再运行docker run -p 3306:3306就会端口冲突!
sudo systemctl stop mysqld sudo systemctl disable mysqld-p 3307:3306),但需连虚拟机IP:3307💡 记住:端口冲突只发生在同一台机器上,跨机器(Windows ↔ 虚拟机)永远不冲突!