一、为什么要学习 Docker?

在传统部署模式中:

  • 开发环境和生产环境不一致

  • 依赖冲突频繁出现

  • 服务器配置复杂

  • 部署流程繁琐

Docker 的出现,解决了一个核心问题:

 “一次构建,到处运行”

Docker 本质是:

一个基于容器技术的应用打包、分发和运行平台。


二、Docker 核心概念详解(面试高频)


1. 镜像(Image)

镜像是:

应用运行的只读模板。

它包含:

  • 操作系统基础环境

  • 运行时环境(JDK / Node / Python)

  • 应用代码

  • 依赖包

类比:

  • 镜像 = 类

  • 容器 = 对象实例


2. 容器(Container)

容器是:

镜像运行后的实例。

特点:

  • 轻量级

  • 秒级启动

  • 进程级隔离

  • 资源可限制(CPU / 内存)


3. 仓库(Registry)

镜像存放位置:

  • 公有仓库:Docker Hub

  • 私有仓库:Harbor


4. Docker 与虚拟机的区别

对比Docker虚拟机
启动速度秒级分钟级
资源占用
隔离方式进程级操作系统级
性能损耗较大

核心区别:

Docker 共享宿主机内核。


三、Docker 架构原理

Docker 采用:

C/S 架构

组成:

  • Docker Client

  • Docker Daemon

  • Docker Registry

底层核心技术:

  • Linux Namespace(隔离)

  • Cgroups(资源控制)

  • UnionFS(分层文件系统)


四、Docker 常用命令详解(实战必备)


1. 查看信息

docker version
docker info

2. 拉取镜像

docker pull nginx

3. 运行容器

docker run -d -p 80:80 nginx

参数说明:

  • -d 后台运行

  • -p 端口映射

  • -v 数据卷

  • --name 指定名称


4. 查看容器

docker ps
docker ps -a

5. 停止与删除

docker stop 容器ID
docker rm 容器ID

五、Dockerfile 核心讲解(高频面试点)

Dockerfile 是:

用于构建镜像的脚本文件。

示例(SpringBoot 项目):

FROM openjdk:17-jdk
WORKDIR /app
COPY target/demo.jar demo.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","demo.jar"]

构建镜像:

docker build -t demo:1.0 .

运行:

docker run -d -p 8080:8080 demo:1.0

六、Docker 部署实战流程(完整项目上线)

以 SpringBoot + MySQL 为例。


步骤 1:启动数据库

docker run -d \
--name mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-p 3306:3306 \
mysql:8

步骤 2:部署后端服务

docker build -t app:1.0 .
docker run -d -p 8080:8080 app:1.0

步骤 3:使用 docker-compose 管理多容器

version: "3"
services:
  mysql:
    image: mysql:8
    environment:
      MYSQL_ROOT_PASSWORD: 123456
  app:
    build: .
    ports:
      - "8080:8080"
    depends_on:
      - mysql

启动:

docker-compose up -d

优势:

  • 一键启动

  • 统一管理

  • 环境可复现


七、Docker 数据持久化

默认容器删除数据丢失。

解决方案:

1. 数据卷

docker run -v /data/mysql:/var/lib/mysql mysql

优点:

  • 数据持久化

  • 容器可重建


八、Docker 网络模式

常见模式:

  • bridge(默认)

  • host

  • none

容器间通信:

  • 同一网络可通过服务名访问


九、Docker 使用价值分析(面试加分点)


1. 环境一致性

解决:

“我电脑上能运行”问题


2. 持续集成与持续部署(CI/CD)

与:

  • GitHub

  • GitLab

  • Jenkins

结合,实现自动构建镜像 → 自动部署。


3. 微服务部署

Docker 是:

微服务架构的基础

可配合:

  • Kubernetes(容器编排)

  • Docker Swarm


4. 提升资源利用率

  • 更高密度部署

  • 弹性扩容


十、生产环境优化建议


1. 减小镜像体积

使用:

FROM openjdk:17-jdk-slim

或多阶段构建。


2. 限制资源

docker run -m 512m --cpus=1

3. 使用私有仓库

避免拉取慢:

  • Harbor

  • 云厂商镜像仓库


4. 安全加固

  • 不使用 root 用户

  • 定期更新镜像

  • 扫描漏洞


十一、Docker 面试高频问题


1. Docker 是虚拟机吗?

不是。它是容器技术。


2. Docker 为什么启动快?

因为:

  • 不需要启动完整 OS

  • 共享宿主机内核


3. Docker 如何实现隔离?

  • Namespace

  • Cgroups


4. Docker 如何实现高可用?

单机 Docker 不具备高可用。

需要:

  • Kubernetes

  • 集群部署


十二、Docker 在云原生时代的地位

Docker 是:

云原生的基础技术

生态体系:

  • Docker → Kubernetes → 微服务 → DevOps

几乎所有现代互联网公司都在使用容器化部署。


十三、总结

Docker 的核心价值:

  • 解决环境一致性

  • 提升部署效率

  • 支撑微服务架构

  • 提高资源利用率

  • 支持 CI/CD 自动化

一句话总结:

Docker 是现代后端开发和运维的必备技能。

更多推荐