1)Docker
🐣 第 1 题(基础认知)
Q1:Docker 是什么?它与传统虚拟机有何不同?
📝 标准答案:
Docker 是一个开源的容器化平台,允许开发者打包应用及其依赖到一个轻量级的可移植容器中,从而实现 “一次构建,到处运行”。
Docker 与虚拟机的对比:
特性 | Docker 容器 | 虚拟机(VM) |
---|---|---|
启动速度 | 秒级启动 | 分钟级(需启动整个系统) |
资源占用 | 更少(共享宿主内核) | 多(独立运行 OS) |
运行隔离性 | 进程级隔离(内核共享) | 完全隔离(虚拟化硬件) |
可移植性 | 非常强 | 相对较差 |
使用场景 | 微服务、CI/CD、测试 | 高安全隔离或传统系统迁移 |
Docker 是轻量级、可移植、易部署的现代开发利器。
🐥 第 2 题(镜像构建)
Q2:Docker 镜像是什么?如何构建一个自定义镜像?
📝 标准答案:
镜像(Image) 是 Docker 容器的模板,由一系列只读层(Layer)组成,包含运行应用所需的全部内容。
构建自定义镜像方式:
- 编写
Dockerfile
:
Dockerfile
# 基础镜像
FROM node:18-alpine
# 设置工作目录
WORKDIR /app
# 复制依赖和源码
COPY package*.json ./
RUN npm install
COPY . .
# 容器启动命令
CMD ["npm", "start"]
- 构建镜像:
bash
docker build -t my-node-app .
- 运行容器:
bash
docker run -p 3000:3000 my-node-app
构建镜像建议:合理使用 .dockerignore
、合并层优化缓存、分阶段构建(multi-stage builds)。
🐔 第 3 题(容器运行与管理)
Q3:如何使用 Docker 管理容器生命周期?有哪些常用命令?
📝 标准答案:
Docker 提供强大的 CLI 命令用于容器的创建、启动、停止和删除等操作。
常用命令:
bash
# 查看所有容器(包括停止的)
docker ps -a
# 启动/停止/删除容器
docker start <id>
docker stop <id>
docker rm <id>
# 后台运行容器(绑定端口)
docker run -d -p 8080:80 nginx
# 进入容器终端
docker exec -it <id> /bin/sh
# 查看容器日志
docker logs <id>
建议使用命名容器:
bash
docker run -d --name web-nginx -p 80:80 nginx
🛡️ 第 4 题(安全与隔离)
Q4:Docker 如何保证容器之间的安全隔离?有哪些安全建议?
📝 标准答案:
Docker 使用 Linux 内核的多种技术保障安全:
- Namespaces:实现进程/网络/文件系统隔离;
- Control Groups(cgroups):限制资源使用(CPU、内存);
- Capabilities:最小化容器权限;
- Seccomp / AppArmor:系统调用过滤和安全策略。
安全建议:
- 最小权限原则:不要用
root
用户运行容器; - 只暴露必要端口;
- 镜像可信来源(如官方/自建镜像仓库);
- 扫描镜像漏洞(如 Trivy、Clair);
- 限制内存/CPU 使用;
- 自动定期更新基础镜像。
🛠️ 第 5 题(CI/CD 与实践)
Q5:如何在 CI/CD 流程中集成 Docker?实际部署时有哪些注意事项?
📝 标准答案:
在 CI/CD 中使用 Docker 可以提高构建的一致性和部署效率。
典型流程:
CI 构建阶段:
- 代码拉取 → 构建 Docker 镜像;
- 单元测试;
- 镜像推送至仓库(Docker Hub、Harbor、GitLab Registry 等);
CD 部署阶段:
- 拉取镜像;
- 创建/更新容器(可配合 K8s、Docker Compose、Swarm);
- 健康检查 & 回滚机制;
CI 工具集成举例(如 GitHub Actions):
yaml
jobs:
build:
steps:
- uses: actions/checkout@v2
- name: Build Image
run: docker build -t myapp:${{ github.sha }} .
- name: Push to Docker Hub
run: |
docker login -u $DOCKER_USER -p $DOCKER_PASS
docker push myapp:${{ github.sha }}
部署注意事项:
- 配置
.env
管理敏感信息; - 加入
健康检查
; - 区分测试 / 生产环境镜像;
- 日志采集方案(如接入 ELK、Loki);