Docker 完整核心知识点总结(超通俗易懂版)

1. Docker 核心概念(必懂)

1.1 镜像 Image

  • 只读模板:包含程序、环境、依赖、配置

  • 分为:官方镜像(mysql/redis/nginx)、自定义镜像(自己前后端)

  • 镜像不包含运行时数据(日志、数据库数据都不在镜像里)

1.2 容器 Container

  • 镜像 运行起来就是容器

  • 容器是临时的、可销毁的

  • 容器删除后,容器内部读写层数据全部丢失

  • Docker 最佳实践:一个容器只跑一个服务

1.3 数据卷 Volume(持久化核心)

  • 解决问题:容器删了数据就丢

  • 数据卷是 Docker 托管的独立存储空间,生命周期独立于容器

  • 容器删除,数据卷数据保留

  • 专门用于:MySQL、Redis 持久化存储

2. 两种挂载方式(必考区别)

2.1 Volume 数据卷挂载(生产、数据库首选)

  • 格式:-v 卷名:/容器路径

  • 由 Docker 自动管理,用户不用管宿主机路径

  • 适合:mysql、redis 持久化

2.2 Bind Mount 目录挂载(开发首选)

  • 格式:-v 宿主机绝对路径:/容器路径

  • 直接映射本地文件夹到容器

  • 适合:挂载代码、配置文件、热更新

2.3 挂载核心重点(你之前最迷惑的点)

  • 挂载会覆盖/遮挡容器内原有目录

  • 不是删除镜像文件,是运行时遮挡

  • 取消挂载,原来镜像文件恢复

  • 挂载最小粒度:整个目录 或 单个文件,不能过滤部分文件

3. 自定义镜像原理(前后端核心)

3.1 两种制作镜像方式

方式1:docker commit(不推荐)
  • 运行容器后手动修改,打包快照

  • 黑盒、不可追溯、体积大、不规范

  • 不会打包数据卷数据

方式2:Dockerfile + build(企业标准)
  • 源码 + Dockerfile = 构建自定义镜像

  • 每一步可追溯、可版本控制、可提交 Git

  • 镜像只包含:环境、依赖、代码,不包含业务数据

4. Docker Compose(你现在项目用的)

4.1 是什么

  • docker run:单容器命令

  • docker compose:一键编排多容器项目

  • 本地开发 99% 项目全部使用 Compose

4.2 yml 两个核心写法区别(超级重要)

image:使用现成镜像
  • mysql、redis 使用官方镜像

  • 直接拉取,无需源码

build: 路径:本地构建镜像
  • 前后端自定义服务使用

  • 必须要有本地源码 + Dockerfile

  • 同事拉取 Git 代码后,本地自动 build 出镜像

4.3 container_name 作用

  • 给容器手动命名,方便 docker exec 进入

  • 每个 service 就是一个独立容器

  • mysql、ebuy后端、前端都是独立容器,互不影响

4.4 Compose 自动网络

  • 所有服务默认同一局域网

  • 容器之间通信:直接使用服务名作为域名

  • 例:后端连接 mysql 地址:jdbc:mysql://mysql:3306/xxx

5. 多服务能不能放一个容器?

  • 技术可以,生产绝对禁止

  • Docker 设计理念:一个容器一个主进程

  • 缺点:一个服务崩,整个容器挂;无法单独扩容、排错、隔离资源

6. Docker MySQL 建表三种方式

方式1:docker exec 手动进库执行 SQL

适合临时测试,不适合团队协作

方式2:挂载 init 自动初始化 SQL(开发首选)

挂载 ./init:/docker-entrypoint-initdb.d

仅第一次空数据卷启动时执行

方式3:后端项目自动建表(MyBatis/JPA)

开发方便,生产环境关闭自动建表,防止误删数据

7. 开发环境完整运行流程(你的项目)

  1. 项目包含:docker-compose.yml + 前后端源码 + Dockerfile

  2. 执行 docker compose up -d

  3. mysql、redis 拉官方镜像启动,挂载数据卷持久化

  4. 前后端根据本地 Dockerfile 自动 build 镜像启动

  5. 容器之间通过 compose 网络互相通信

  6. 数据存在数据卷,重启/删除容器不丢数据

8. 面试终极精华总结(背诵版)

  • 镜像:只读环境模板,不含运行时数据

  • 容器:镜像运行实例,临时可销毁

  • 数据卷:实现数据持久化,容器删除数据保留

  • 挂载:分为数据卷挂载(数据库)、目录挂载(开发代码),运行时遮挡原目录

  • 自定义镜像:Dockerfile 构建,规范可复用;不使用 commit

  • Compose:本地多容器编排,一键启停,自动网络通信

  • 最佳实践:一容器一服务、数据与程序分离、开发用build、线上用image

相关推荐
亚川楼宇自控系统数据中心厂家2 小时前
IBMS 集成管理系统:如何打通楼宇自控实现建筑一体化管控
运维
迪康Defender3 小时前
终端安全审批体系设计:如何平衡安全管控与业务连续性
运维·服务器·安全·运维开发·学习方法·业界资讯·远程工作
luo_guibin4 小时前
Linux系统下OpenSSL升级全流程,新旧版本切换
linux·运维·服务器
7177774 小时前
支持混合云的 DevOps 平台有哪些:主流方案对比与选型指南
运维·devops
看着博客敲代码4 小时前
No space left on device:服务器被 SSH 爆破到日志写满的完整排查与止血
linux·运维·服务器·安全·ssh
编程序的员4 小时前
使用OpenTelemetry来监控Rust应用
运维·rust·monitoring·opentelemetry
实战派K8S&DB5 小时前
TDSQL 核心模块与进程体系
运维·数据库·分布式·sql·mysql
Rooting++5 小时前
用友打包的APP壳子怎么获取SHA1码?
运维·服务器
吴声子夜歌5 小时前
Docker入门与实战——实战案例(Web服务与应用)
docker·容器