视频加载失败

JavaWeb Day07:项目部署与 Docker 基础

984 字
5 分钟
JavaWeb Day07:项目部署与 Docker 基础

核心概念#

  1. 三大概念:镜像=只读模板(一个软件);容器=镜像运行实例(简易 Linux 环境+应用);仓库=集中存放分发镜像(Docker Hub;仓库名:标签 指定版本,生产环境不要依赖 latest 标签)。关系链:仓库存镜像 → 镜像创建容器 → 容器运行应用。
  2. 镜像分层存储:镜像由多个只读 Layer 叠加而成(Union FS 统一呈现),每条 Dockerfile 指令通常生成一层;容器运行时在最上层加一个可写层。好处:相同的基础层/依赖层可被多个镜像复用,下载时只拉取本地没有的层,省传输也省磁盘。
  3. 容器 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 一条命令编排启动。

踩坑与注意#

  1. docker run -p 8080:8080 端口语义:左边是宿主机端口,右边是容器内端口;外部访问宿主机端口,经映射进入容器。多个容器同时运行时各自独立,端口互不冲突。
  2. 删除镜像被拒:提示 image is being used by stopped container 说明镜像仍被容器引用(含已停止的容器),先删容器再删镜像,或 rmi -f 强删(慎用)。
  3. docker system prune 慎用:会删除未使用的容器、网络、镜像和构建缓存,加 --volumes 连数据卷一起清——数据库与本地测试数据可能被连带删除。
  4. 数据卷挂载后目录被清空:把空的宿主机目录绑定挂载到容器的 webapps 目录,容器内原内容会被遮蔽(例如 tomcat 默认页面消失),这是预期行为而非 bug。
  5. 镜像加速地址不稳定:第三方加速地址的可用性与范围随时可能调整(阿里云 ACR 加速器自 2024-07 起仅限阿里云用户使用);生产建议自建私有仓库或使用云厂商仓库,并固定版本或摘要。

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!

打赏
JavaWeb Day07:项目部署与 Docker 基础
https://ryuki.icu/posts/javaweb-day07/
作者
RK
发布于
2026-08-18
许可协议
CC BY-NC-SA 4.0

评论区

Profile Image of the Author
RK
Long may the sunshine
公告
Long may the sunshine
分类
标签
最新动态
站点天气
天气加载中…
站点统计
文章
27
分类
6
标签
59
总字数
39,139
篝火已燃
0 天
最后活动
0 天前
每日一签