Skip to main content

1.Docker面试题

docker运行的服务器磁盘占用满了,怎么解决

清理不需要的容器和镜像:

  • 使用 docker ps -a命令查看所有容器,使用 docker rm命令删除不需要的容器。
  • 使用 docker images命令查看所有镜像,使用 docker rmi命令删除不需要的镜像。
# 删除所有停止的容器
docker container prune

# 删除所有未被使用的镜像
docker image prune -a
#或者
sudo docker rmi $(docker images -qa)

清理Docker日志:

  • Docker的日志文件可能占用较多空间。你可以使用以下命令删除旧的Docker日志文件:
sudo find /var/lib/docker/containers -type f -name "*.log" -delete

调整Docker日志大小限制:

  • 在Docker配置中,可以调整日志的大小和保存的天数,以限制日志文件占用的空间。编辑Docker的配置文件(通常是 /etc/docker/daemon.json),添加或修改以下配置:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}

这会将每个日志文件的最大大小限制为10MB,最多保留3个日志文件。

查找大文件并删除:

  • 使用 du命令查找占用磁盘空间较大的文件或目录,并根据需要删除它们。
# 以磁盘使用量从大到小列出文件和目录
sudo du -h --max-depth=1 / | sort -rh

分析磁盘使用情况:

  • 使用工具如 ncdudu等来分析磁盘使用情况,找到占用大量空间的文件或目录。
# 使用ncdu工具进行交互式磁盘使用分析
sudo dnf install ncdu
ncdu /

考虑扩展磁盘容量:

  • 如果上述操作无法解决问题,可能需要考虑扩展磁盘容量或者将数据迁移到其他存储设备。

docker容器挂了怎么查看问题

使用健康检查

如果容器中包含健康检查脚本,可以使用 docker inspect 命令来查看容器的健康状态。

docker inspect --format='{{json .State.Health}}' <container_id_or_name>

健康检查脚本通常在 Dockerfile 中使用 HEALTHCHECK 指令定义。

查看 Docker 事件

使用 docker events 命令查看 Docker 的事件流,以获取容器的相关事件信息。

docker events

检查 Docker 守护进程日志

查看 Docker 守护进程的日志文件,通常在 /var/log/docker.log/var/log/syslog 等位置。这有助于了解 Docker 守护进程本身是否出现问题。

运行容器的服务器性能除了top free等命令,还有什么观察手段

容器内服务会出现僵尸进程,如何构建镜像保证服务稳定

确保容器内服务稳定,包括避免僵尸进程,需要在构建镜像和运行容器时考虑一些最佳实践。以下是一些建议:

  1. 使用基础镜像: 使用官方或经过安全验证的基础镜像。这些基础镜像通常是经过优化和稳定性测试的,减少了一些潜在的问题。
  2. 使用轻量级基础镜像: 尽可能使用轻量级的基础镜像,例如Alpine Linux。这有助于减少镜像的大小,提高容器启动和执行效率。
  3. 清理不必要的进程: 在构建镜像时,确保只包含服务运行所需的最小进程。在构建过程中,可以在每个步骤之后使用 RUN 命令清理不必要的文件和进程,减小镜像大小。
  4. 优化容器启动命令:CMDENTRYPOINT 中启动服务时,确保使用前台运行方式,以避免产生不必要的子进程。例如,使用 nginx -g 'daemon off;' 替代 nginx
  5. 适当配置服务: 在服务的配置文件中,设置合适的日志级别和其他参数,以减少不必要的输出和日志。过多的日志输出可能导致容器文件系统快速填满。
  6. 监控和修复: 使用监控工具,例如Prometheus、Grafana等,监视容器内的资源使用情况、服务运行状态等。当出现问题时,及时修复并优化容器镜像。
  7. 使用健康检查:Dockerfile 或容器编排文件中定义健康检查。这有助于检测服务的运行状态,并在服务异常时及时重启容器。
  8. 合理配置资源限制: 使用容器编排工具,如Docker Compose或Kubernetes,在配置中适当设置资源限制,以确保容器不会因资源不足而导致异常。
  9. 避免过度依赖前台进程: 尽量避免使用一些需要在前台运行的进程,因为这可能导致容器退出。如果必须使用前台进程,确保进程在退出时会正确释放资源。
  10. 保持基础镜像更新: 定期更新基础镜像,以包含最新的安全补丁和优化。确保使用的镜像是最新的官方版本。