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 两种制作镜像方式方式1docker commit不推荐运行容器后手动修改打包快照黑盒、不可追溯、体积大、不规范不会打包数据卷数据方式2Dockerfile build企业标准源码 Dockerfile 构建自定义镜像每一步可追溯、可版本控制、可提交 Git镜像只包含环境、依赖、代码不包含业务数据4. Docker Compose你现在项目用的4.1 是什么docker run单容器命令docker compose一键编排多容器项目本地开发 99% 项目全部使用 Compose4.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/xxx5. 多服务能不能放一个容器技术可以生产绝对禁止Docker 设计理念一个容器一个主进程缺点一个服务崩整个容器挂无法单独扩容、排错、隔离资源6. Docker MySQL 建表三种方式方式1docker exec 手动进库执行 SQL适合临时测试不适合团队协作方式2挂载 init 自动初始化 SQL开发首选挂载./init:/docker-entrypoint-initdb.d仅第一次空数据卷启动时执行方式3后端项目自动建表MyBatis/JPA开发方便生产环境关闭自动建表防止误删数据7. 开发环境完整运行流程你的项目项目包含docker-compose.yml 前后端源码 Dockerfile执行docker compose up -dmysql、redis 拉官方镜像启动挂载数据卷持久化前后端根据本地 Dockerfile 自动 build 镜像启动容器之间通过 compose 网络互相通信数据存在数据卷重启/删除容器不丢数据8. 面试终极精华总结背诵版镜像只读环境模板不含运行时数据容器镜像运行实例临时可销毁数据卷实现数据持久化容器删除数据保留挂载分为数据卷挂载数据库、目录挂载开发代码运行时遮挡原目录自定义镜像Dockerfile 构建规范可复用不使用 commitCompose本地多容器编排一键启停自动网络通信最佳实践一容器一服务、数据与程序分离、开发用build、线上用image