Docker & Docker Compose 面试题精简版
所属分类 docker
浏览量 5
一、基础概念
1. 什么是 Docker?
Docker 是轻量级容器化技术,用于打包应用及依赖,实现一次构建、到处运行。
2. 容器 vs 虚拟机
容器:共享宿主机内核,启动快、体积小、资源占用低。
虚拟机:有独立内核和操作系统,启动慢、资源占用高。
3. Docker 三大核心组件
镜像(Image)、容器(Container)、仓库(Registry)
4. Docker 工作流程
pull 拉取镜像 → run 创建并启动容器 → push 推送镜像到仓库。
二、Docker 常用命令
查看镜像:docker images
拉取镜像:docker pull
运行容器:docker run -d -p 宿主机端口:容器端口 --name 名称 镜像
查看运行容器:docker ps
进入容器:docker exec -it 容器ID /bin/bash
停止 / 删除容器:docker stop/rm 容器ID
删除镜像:docker rmi 镜像ID
查看日志:docker logs 容器ID
三、Docker Compose 核心面试题
1. Docker run 与 docker compose 区别
docker run:命令行启动单个容器,参数不易维护。
docker compose:YAML 配置多容器,统一管理、自动网络、依赖顺序。
2. depends_on 作用与局限作用
作用:控制容器启动顺序。
局限:只保证启动先后,不保证服务就绪(如 MySQL 启动但未初始化完成)。
3. docker compose down 作用
停止并删除容器、网络;不加 -v 不删除数据卷。
4. Compose 中三种数据卷
匿名卷:仅指定容器路径。
命名卷:自定义名称,持久化数据。
绑定挂载:宿主机目录直接映射。
5. Compose 网络特点
自动创建独立 bridge 网络,服务间可用服务名直接通信。
6. 容器自启配置
restart: always
其他:on-failure、unless-stopped。
7. Compose 与 K8s 区别
Compose:单机多容器编排,适合开发测试。
K8s:集群级编排,支持扩缩容、自愈、负载均衡,用于生产。
8. Compose 如何只启动单个服务
docker compose up -d 服务名
9. Compose 如何扩容
docker compose up -d --scale 服务名=实例数
10. Compose 环境变量使用
使用 environment 或 env_file: .env,
YAML 中用 ${变量名} 引用。
四、Dockerfile
1. 常用指令
FROM、MAINTAINER、RUN、COPY、ADD、CMD、ENTRYPOINT、EXPOSE、WORKDIR。
2. CMD vs ENTRYPOINT
CMD:可被命令行参数覆盖。
ENTRYPOINT:不会被覆盖,常作为固定启动命令。
3. ADD vs COPY
功能相似,ADD 支持自动解压和远程 URL,COPY 更简洁安全。
4. 如何减小镜像体积
使用 alpine 版本镜像、合并 RUN 指令、删除缓存、多阶段构建。
五、综合原理题
1. Docker 核心技术
Namespace(资源隔离)、Cgroups(资源限制)、UnionFS(镜像分层)。
2. 镜像分层好处
共享分层、节省存储空间、加速构建和传输。
3. 容器数据持久化
使用数据卷(volume)或绑定挂载,避免容器删除后数据丢失。
4. Docker 网络模式
bridge(默认)、host、none、container。
六、场景题
1. 容器无法访问怎么办?
检查端口映射、防火墙、容器是否正常运行、网络是否互通。
2. 容器日志占满磁盘怎么处理?
配置日志驱动限制大小,或及时清理日志。
3. 如何保证生产容器高可用?
设置自启、健康检查、多实例部署、结合 K8s 自愈。
七. 其他
1. Docker 镜像仓库配置文件在哪?
/etc/docker/daemon.json
2. 私有仓库是 HTTP 为什么拉取失败?
需要在 insecure-registries 中配置,否则 Docker 默认拒绝非 HTTPS 仓库。
3. registry-mirrors 和 insecure-registries 区别?
registry-mirrors:Docker Hub 加速地址
insecure-registries:允许访问不安全的 HTTP 私有仓库
{
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn",
"https://hub-mirror.c.163.com",
"https://registry.docker-cn.com"
]
}
如果私有仓库没 HTTPS,必须加入 insecure-registries:
{
"insecure-registries": ["192.168.1.100:8080", "harbor.example.com"]
}
4. 如何让配置生效?
修改 daemon.json → daemon-reload → restart docker
systemctl daemon-reload
systemctl restart docker
验证是否生效
docker info
5. Docker Compose 里如何指定私有仓库镜像
直接在 image 前面加上仓库地址即可
services:
app:
image: 192.168.1.100:8080/project/myapp:1.0
上一篇
核心收紧、肩胛骨夹紧 立腰立颈
windows开发环境搭建
Docker Compose 安装、部署与使用说明