Skip to content

1)Docker

🐣 第 1 题(基础认知)

Q1:Docker 是什么?它与传统虚拟机有何不同?

📝 标准答案:

Docker 是一个开源的容器化平台,允许开发者打包应用及其依赖到一个轻量级的可移植容器中,从而实现 “一次构建,到处运行”

Docker 与虚拟机的对比:

特性Docker 容器虚拟机(VM)
启动速度秒级启动分钟级(需启动整个系统)
资源占用更少(共享宿主内核)多(独立运行 OS)
运行隔离性进程级隔离(内核共享)完全隔离(虚拟化硬件)
可移植性非常强相对较差
使用场景微服务、CI/CD、测试高安全隔离或传统系统迁移

Docker 是轻量级、可移植、易部署的现代开发利器。

🐥 第 2 题(镜像构建)

Q2:Docker 镜像是什么?如何构建一个自定义镜像?

📝 标准答案:

镜像(Image) 是 Docker 容器的模板,由一系列只读层(Layer)组成,包含运行应用所需的全部内容。

构建自定义镜像方式:

  1. 编写 Dockerfile
Dockerfile
# 基础镜像
FROM node:18-alpine

# 设置工作目录
WORKDIR /app

# 复制依赖和源码
COPY package*.json ./
RUN npm install
COPY . .

# 容器启动命令
CMD ["npm", "start"]
  1. 构建镜像:
bash
docker build -t my-node-app .
  1. 运行容器:
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:系统调用过滤和安全策略。

安全建议:

  1. 最小权限原则:不要用 root 用户运行容器;
  2. 只暴露必要端口
  3. 镜像可信来源(如官方/自建镜像仓库);
  4. 扫描镜像漏洞(如 Trivy、Clair);
  5. 限制内存/CPU 使用
  6. 自动定期更新基础镜像

🛠️ 第 5 题(CI/CD 与实践)

Q5:如何在 CI/CD 流程中集成 Docker?实际部署时有哪些注意事项?

📝 标准答案:

在 CI/CD 中使用 Docker 可以提高构建的一致性和部署效率。

典型流程:

  1. CI 构建阶段

    • 代码拉取 → 构建 Docker 镜像;
    • 单元测试;
    • 镜像推送至仓库(Docker Hub、Harbor、GitLab Registry 等);
  2. 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);