JavaWeb Day07:项目部署与 Docker 基础
984 字
5 分钟
JavaWeb Day07:项目部署与 Docker 基础
核心概念
- 三大概念:镜像=只读模板(一个软件);容器=镜像运行实例(简易 Linux 环境+应用);仓库=集中存放分发镜像(Docker Hub;
仓库名:标签指定版本,生产环境不要依赖latest标签)。关系链:仓库存镜像 → 镜像创建容器 → 容器运行应用。 - 镜像分层存储:镜像由多个只读 Layer 叠加而成(Union FS 统一呈现),每条 Dockerfile 指令通常生成一层;容器运行时在最上层加一个可写层。好处:相同的基础层/依赖层可被多个镜像复用,下载时只拉取本地没有的层,省传输也省磁盘。
- 容器 vs 虚拟机:虚拟机由 Hypervisor 虚拟出硬件并安装独立 Guest OS,隔离彻底但笨重、启动慢;容器共享宿主机内核,通过 Namespace 做资源隔离、Cgroups 做资源限制,属于进程级隔离,轻量、秒级启动、隔离性弱一些。两者共存互补:VM 隔离用户,Docker 隔离应用。
常用命令
镜像:
docker pull 镜像:tag拉取;docker images查看;docker rmi删除(被容器引用时需先删容器,或-f强删);docker search搜索;docker commit把容器保存为镜像;docker save/load用于备份迁移。
容器:
docker run -d -p 宿主机端口:容器端口 --name xxx 镜像创建并运行(-d后台运行、-p端口映射);docker ps -a查看全部容器;docker exec -it 容器 bash进入容器;docker logs -f追踪日志;docker stop/start/restart/kill管理状态;docker rm -f删除容器;docker cp在宿主机与容器间拷贝文件;docker inspect查看详情。
数据卷:
-v 数据卷名:容器路径是命名卷,由 Docker 管理,容器删除后数据保留;-v /宿主机路径:容器路径是绑定挂载(bind mount),宿主机目录自行指定;配套命令docker volume create/ls/inspect/rm。
Dockerfile 与 Docker Compose
Dockerfile 是自动构建镜像的文本文件,常用指令:FROM 指定基础镜像、RUN 执行构建命令、COPY/ADD 复制文件、WORKDIR 设置工作目录、ENV 设置环境变量、EXPOSE 声明端口、CMD/ENTRYPOINT 指定启动命令;构建命令 docker build -t 镜像名:tag .。
Docker Compose 用于多容器编排:docker-compose.yml 中定义 services(image/build/ports/environment/volumes/depends_on/restart),还可声明 networks 与 volumes;docker compose up -d 一键启动整组服务,docker compose down 停止并移除。
项目部署链路
tlias 全栈的容器化部署由三个容器组成:MySQL 容器通过 -v 挂载 init 目录,启动时自动执行 tlias.sql 初始化数据库 → JDK 容器运行后端 tlias.jar → Nginx 容器托管前端静态资源并把接口请求反向代理到后端;整组服务由 Docker Compose 一条命令编排启动。
踩坑与注意
docker run -p 8080:8080端口语义:左边是宿主机端口,右边是容器内端口;外部访问宿主机端口,经映射进入容器。多个容器同时运行时各自独立,端口互不冲突。- 删除镜像被拒:提示
image is being used by stopped container说明镜像仍被容器引用(含已停止的容器),先删容器再删镜像,或rmi -f强删(慎用)。 docker system prune慎用:会删除未使用的容器、网络、镜像和构建缓存,加--volumes连数据卷一起清——数据库与本地测试数据可能被连带删除。- 数据卷挂载后目录被清空:把空的宿主机目录绑定挂载到容器的 webapps 目录,容器内原内容会被遮蔽(例如 tomcat 默认页面消失),这是预期行为而非 bug。
- 镜像加速地址不稳定:第三方加速地址的可用性与范围随时可能调整(阿里云 ACR 加速器自 2024-07 起仅限阿里云用户使用);生产建议自建私有仓库或使用云厂商仓库,并固定版本或摘要。
支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!
JavaWeb Day07:项目部署与 Docker 基础
https://ryuki.icu/posts/javaweb-day07/相关文章智能推荐
1
JavaWeb Day01:SpringBoot 入门与 MyBatis 注解开发
JavaWebSpringBoot Web 快速入门、三层分层与 IoC/DI 解耦、原生 JDBC、MyBatis 注解开发与 MySQL 基础。
2
JavaWeb Day02:MyBatis XML 开发与 tlias 部门管理
JavaWebMyBatis XML 方式开发、tlias 部门管理三层 CRUD 实战与 SLF4J 日志配置。
3
JavaWeb Day05:全局异常、AOP 日志与管理模块
JavaWeb全局异常处理器与 AOP 操作日志切面,以及班级管理、学员管理和报表统计的业务实现
4
JavaWeb Day03:Tlias 员工管理之分页查询
JavaWeb员工分页查询接口实现:LIMIT 物理分页、PageResult 泛型封装与 left join 关联部门名
5
JavaWeb Day04:条件分页、事务新增与本地上传
JavaWeb条件查询改为 POJO 对象收参并以 PageHelper 分页;员工新增覆盖事务回滚、批量插入、主键回填、操作日志与本地上传
随机文章随机推荐





















