苏格拉底今天会使用 Docker 吗?

2025-06-10

苏格拉底今天会使用 Docker 吗?

本文最初于 2017 年 11 月 7 日发布于:https://nickjanetakis.com/blog/would-socrates-use-docker-today


还记得苏格拉底吗?他是大约2500年前那位非常聪明的希腊人。他最著名的学生是柏拉图,并为现代哲学和科学奠定了基础。

苏格拉底留下的教诲之一就是“苏格拉底式提问” 。这是一种通过提问来详细探讨某个主题的系统方法。

什么是苏格拉底式提问(引自维基百科)?

苏格拉底式提问是一种有纪律的提问,可用于从多个方向和出于多种目的进行思考,包括:探索复杂的想法、了解事物的真相、提出议题和难题、揭示假设、分析概念、区分我们知道的和不知道的、遵循思维的逻辑含义或控制讨论。

事实证明,苏格拉底为我们提供了一种可重复分析主题的方法。我们可以用它来做任何事情。我们可以用它来做出人生中的重大决定,选择今晚的晚餐,或者弄清楚哪些技术值得学习(提示)。

是的,这意味着2500年前发明的东西可以应用于我们今天面临的问题。顺便说一句,这就是为什么我尝试在所有课程中同时教授“为什么”和“如何” ,因为理解这两者可以让你从复制/粘贴代码到能够解决你遇到的任何问题。

在本文中,我们将使用苏格拉底式提问策略来探索 Docker。

我们需要问什么问题?

如果我们回到 wiki,其中有一个部分列出了 6 种类型的问题:

  • 理清思路
  • 挑战你的假设
  • 探究原因和证据
  • 另类观点和视角
  • 影响和后果
  • 质疑所问的问题

这 6 类问题中,每类都包含许多子问题,可以用来探讨任何主题。列出所有子问题后,我们将了解如何将它们应用于 Docker。

很多子问题都是根据changingminds.org修改的。这不是一个权威的清单,因为目前还没有权威的清单,但这是一个很好的开始。

理清思路

仔细思考你到底在问什么或想什么。证明你所主张的任何概念。

  • ...的本质是什么?
  • 你为什么这么说?
  • 这到底是什么意思?
  • 这与我们一直在谈论的内容有何关系?
  • 你能给我举个例子吗?
  • 你能重新表述一下吗?

挑战你的假设

探究您的假设并思考支持您论点的不容置疑的信念。

  • 我们还能假设什么?
  • 您是如何选择这些假设的?
  • 你如何验证或反驳该假设?
  • 如果……会发生什么?

探究原因和证据

深入研究你的推理,而不是假设它是理所当然的。

  • 为什么会发生这种情况?
  • 你怎么知道的?
  • 怎样才能驳斥这一观点?
  • 我怎么能确定你所说的内容呢?
  • 有什么证据可以支持你的说法?
  • 你的论点依据是什么?
  • 你有什么证据支持你的主张吗?
  • 这是相信这一点的有力证据吗?

另类观点和视角

大多数论点都是从某个特定立场出发的。所以要攻击这个立场。

  • 为什么...是必要的?
  • 谁从中受益?
  • ... 和... 之间有什么区别?
  • 为什么它比...更好?
  • ...的优点和缺点是什么?
  • ...和...有何相似之处?

影响和后果

其含义和后果是否合理且可取?

  • ...如何影响...?
  • 如果发生这种情况,还会导致什么结果?为什么?
  • 这必然会发生还是只是有可能发生?
  • ...与我们之前学到的知识如何相符?

质疑被问到的问题

挑战并解决该问题。

  • 我们能彻底分解这个问题吗?
  • 问题清楚了吗?我们理解了吗?
  • 这个问题容易回答还是难回答?为什么?
  • 为什么这个问题很重要?

将苏格拉底式提问法应用于 Docker

现在我们有了一系列问题,接下来要做的就是回答它们。我不会一一回答所有问题,但我会在每个类别中,选择一些与 Docker 以及一般技术选择密切相关的问题来回答。

这个练习的妙处在于,很多时候并没有唯一的正确答案。我很乐意在下面的评论区阅读你们对任何问题的回答。另外,如果你们觉得合适,也欢迎回答或提出其他问题!

理清思路

仔细思考你到底在问什么或想什么。证明你所主张的任何概念。

  • Docker 的本质是什么? Docker 提供了一种更好的方式来构建和分发应用程序。
  • 这到底是什么意思?跨不同系统安装应用程序的依赖项可能是一场噩梦。Docker 允许你将依赖项构建到 Docker 镜像中,然后以相同的方式在 Windows、MacOS 或 Linux 上运行它。

挑战你的假设

探究您的假设并思考支持您论点的不容置疑的信念。

  • 如何验证或反驳这个假设?你可以使用 Docker 构建应用程序,然后在 Windows、MacOS 或 Linux 上运行它来验证它是否有效。你会发现它运行起来是一样的,而且无需处理特定操作系统的安装步骤。
  • 如果你不使用 Docker 会发生什么?你将不得不使用 rvm、nvm 和 virtualenv 等工具来隔离不同项目和语言版本的依赖项。你还需要安装特定操作系统级别的依赖项,这些依赖项会根据你使用的操作系统而变化。

探究原因和证据

深入研究你的推理,而不是假设它是理所当然的。

  • 有什么证据支持你的说法?如果你是一名 Web 开发者,你至少在搭建开发环境时遇到过这些问题。
  • 你有什么证据支持你的论断吗?有的。试试看。你也可以随意谷歌一下,看看如何让 Rails、Flask、Node 等应用程序在开发和生产环境中运行。你会发现这是很多人经常遇到的问题。
  • 你的论点依据是什么?就我个人而言,我已经以各种方式构建和部署 Web 应用程序大约 20 年了。在此期间,我使用各种技术栈开发和部署了 100 多个 Web 应用程序。

另类观点和视角

大多数论点都是从某个特定立场出发的。所以要攻击这个立场。

  • Docker 的受益者是谁?开发人员可以更轻松地设置应用程序堆栈。测试和 QA 团队可以快速启动应用程序,而运维团队则可以跨环境迁移已构建的应用程序,从而消除“这对我来说很管用!”的问题。
  • 为什么 Docker 比虚拟机更适合应用程序开发?虚拟机占用大量磁盘空间,浪费其他资源,并且加载时间较长。Docker 可以智能地利用磁盘空间,不会影响运行时性能,并且可在几毫秒内启动。
  • Docker 的优势和劣势是什么?
    Docker 让你可以轻松地实现应用程序的可移植性,并鼓励你尝试新的语言和工具,因为它可以轻松地以一致的方式运行它们。


    Docker 的主要弱点之一是,从概念上讲,它很难让人在心理上“理解”,但一旦理解了,你就会想“没有它我该怎么活下去?”。

影响和后果

其含义和后果是否合理且可取?

  • Docker 如何影响日常的 Web 应用开发?
    您可以减少安装工具和依赖项的时间,从而专注于开发出色的应用程序。


    这适用于编程语言运行时以及外部服务,例如 PostgreSQL、MySQL、Redis、Elasticsearch 或您的应用程序所依赖的任何其他服务。您可以使用 Docker 运行它们。

  • 这必然会发生,还是只是有可能发生?
    它总是会发生。你可以将 Docker 用于解释型语言和编译型语言,并获得相同的回报。无论你使用 Ruby on Rails、Flask、NodeJS、PHP、Golang、.NET 还是其他任何语言,它们都可以与 Docker 兼容。

质疑被问到的问题

挑战并解决该问题。

这种题型与其他题型略有不同。我们的目标是针对以上所有问题,在提问的同时不断进行分解。

比如我们来操作一下如果不使用Docker的话会怎么样?

我们可以用以下方式来质疑这个问题:

  • 我们能把这个问题分解一下吗?是的。目前还不清楚我们在和谁讨论。我们可以进一步探讨这个问题,从开发人员、运维经理、系统管理员、测试人员或 IT 团队的角度来回答。他们各自都有自己的一套问题,而这些问题可以通过使用 Docker 来解决。

总结

正如你所见,苏格拉底式提问非常有效。它就像列一份优缺点清单,只不过它更加系统化和结构化。这能让你对任何话题有更深入的理解。

我们对 Docker 的了解还只是皮毛。如果我花一整天时间写这篇文章,它很容易就会变成 15,000 字,而不是 1,500 字!

回答本文标题“苏格拉底今天会使用 Docker 吗?”的问题。我认为他会。当然,这只是我的看法,但通过探究这些问题,我们发现使用 Docker 确实有诸多好处,而且苏格拉底是一个非常理性的人。没有理由认为如果他现在还在世,他不会使用它。

顺便说一句,如果你觉得 Docker 很适合你,并且你确实想学习它,那么可以看看我的高级视频课程《深入 Docker》。课程中充满了大量的实际案例,在课程结束时,你将能够轻松地在自己的项目中使用 Docker。

鏂囩珷鏉ユ簮锛�https://dev.to/nickjj/would-socrates-use-docker-today-2cdh
PREV
30分钟内构建功能齐全的消息平台
NEXT
Vim 为我编写书籍和课程节省了大量时间