一、Docker概念
Docker 是容器化平台 ,可以把应用和它依赖的库、配置、环境一起打包成镜像,在任意环境快速运行,实现一次打包,到处运行。
二、三大核心概念
- 镜像 (image):只读模板,相当于安装包。分层存储,联合文件系统,复用层,节省空间。
- 容器 (container):镜像运行实例,独立隔离运行环境,一个镜像可以启动多个容器。
- 仓库 (repository):存放镜像,公共仓库 Docker Hub,也可以搭建私有镜像仓库 Harbor。
三、核心常用命令(面试必背)
java
# 镜像操作
docker images # 查看本地镜像
docker pull [镜像名]:[tag] # 拉取镜像
docker build -t name:tag . # 通过Dockerfile构建镜像
docker rmi 镜像id # 删除镜像
# 容器操作
docker run -d --name myapp -p 8080:8080 镜像名 # 后台启动容器,端口映射
docker ps # 查看运行中容器,ps -a 全部容器
docker stop 容器id # 停止容器
docker start/restart 容器id # 启动/重启容器
docker rm 容器id # 删除容器(必须先stop)
docker exec -it 容器id /bin/bash # 进入容器内部
# 日志
docker logs 容器id
重点参数:
-d后台守护进程运行-p 宿主机端口:容器端口端口映射--name给容器起名-it交互式终端
四、Dockerfile(构建镜像脚本)
基础指令:
FROM openjdk:17-jdk-slim # 基础镜像
WORKDIR /app # 设置工作目录
COPY target/demo.jar app.jar # 复制本地jar包到镜像内
EXPOSE 8080 # 声明端口(仅文档,不实际开放端口)
ENTRYPOINT ["java","-jar","app.jar"] # 容器启动命令
- 每条指令生成一层镜像;尽量合并 RUN 指令,减少层数减小镜像体积
- 镜像分层缓存机制:前面层不变,后续构建可以复用缓存,提升打包速度
五、Docker 网络
默认网络模式:
- bridge(默认):桥接网络,容器之间、容器和宿主机通信,端口映射就是 bridge 模式
- host:直接复用宿主机网络,不做端口映射,性能最高,隔离性差
- none:无网络
- container:复用另一个容器网络
六、数据持久化(3 种方式)
- volumes(卷):docker 管理,推荐,宿主机 /var/lib/docker/volumes,容器删除数据还在
- bind mounts(绑定挂载):宿主机指定目录直接挂载到容器,直接读写宿主机文件
- tmpfs:临时文件系统,数据存在内存,容器销毁数据丢失
微服务项目一般用 volume 保存 mysql、nacos 等持久化数据,避免容器删除数据丢失。
七、Docker Compose
单机多容器编排工具,通过 yaml 一次性管理多个容器,一键启动 / 停止整套服务(比如 Nacos+MySQL+SpringBoot 微服务)。 适合开发环境,生产环境大规模集群用 K8s。 简单示例 docker-compose.yml
services:
mysql:
image: mysql:8.0
ports:
- "3306:3306"
volumes:
- mysql-data:/var/lib/mysql
volumes:
mysql-data:
命令:
docker-compose up -d #后台启动所有服务
docker-compose down #停止并删除容器
八、面试高频简答(背诵版)
Q1:Docker 镜像分层原理
A:镜像采用联合文件系统,分层存储。每一条 Dockerfile 指令生成一层,下层只读。构建时会缓存镜像层,相同层直接复用,减小镜像大小,提升构建速度。容器在最上层增加一个可读写层,修改不会改动基础镜像。
Q2:docker run -p 端口映射原理
A:宿主机 iptables 做端口转发,访问宿主机端口,流量转发到容器内部端口。
Q3:容器数据卷的作用
A:实现容器数据持久化;容器删除数据不会丢失;实现宿主机和容器、容器之间的数据共享。
Q4:Docker Compose 和 K8s 区别
A:Compose 单机编排,适合开发测试环境,简单轻量;K8s 是集群编排,多机器管理,生产大规模容器,具备自动扩缩容、故障自愈、负载均衡能力。
九、和 SpringCloud 结合场景(后端面试重点)
微服务打包流程:
- SpringBoot 项目打包 jar
- 编写 Dockerfile,基于 jdk 镜像复制 jar
- docker build 构建镜像
- docker run 启动容器,部署 Nacos、Gateway、业务微服务、MySQL,用 docker-compose 一键拉起整套微服务环境。