在生产中处理码头工人和容器

Dealing with dockers and containers in production

我是容器主题的新手,如果这个论坛是提出这个问题的合适场所,我将不胜感激。

我正在学习 docker 和容器,现在我掌握了一些使用 docker 命令和处理容器的技能。我知道 docker 有两个主要部分,即摘要客户端 (docker.exe) 和 docker 服务器 (dockerd.exe)。现在在开发生活中,两者都安装在我的本地机器上(我手动将它们安装在 windows server 2016 上)遵循这里的 Nigel Poulton 教程 https://app.pluralsight.com/course-player?clipId=f1f27565-e2bf-4e58-96f3-bc2c3b160ec9。现在谈到实际生产生活,那么,我将如何配置我的 docker 客户端与远程 docker 服务器通信。我试图在互联网上进行一些研究,但老实说找不到这个问题的简单答案。我在我的 windows 10 机器上为桌面安装了 docker 并注意到它创建了一个可能是 Linux 机器的 hyper-v 机器,我的理解是这台机器有 docker 我的 docker 客户端与之交互的服务器,但不明白这种交互是如何完成的。

如果我的询问得到一些指导或明确的答复,我将不胜感激。

在生产环境中,您永远不会有远程 Docker 守护程序。通常,您通过专用编排器(Kubernetes、Docker Swarm、Nomad、AWS ECS)或通过通用系统自动化工具(Chef、Ansible、Salt Stack)与 Docker 交互,或者如果您必须直接通过 ssh 连接到系统并在那里执行 运行 docker 命令。

远程访问 Docker 守护程序是一种安全灾难。如果你完全可以访问 Docker 守护程序,你就可以以 root 身份编辑主机系统上的任何文件,并且非常简单地接管整个事情。 (Google "Docker cryptojacking" 一些现实世界的例子。)原则上你可以使用双向 TLS 保护它,但这是一个棘手的设置。

另一个重要的最佳实践是 Docker 图像应该是独立的。不要尝试将 Docker 映像部署到生产环境,也不要单独复制您的应用程序代码。可以部署 Docker 容器的相同 Ansible 设置也可以直接在目标系统上安装 Node,避免了一层;将应用程序代码复制到 Kubernetes 卷中很棘手,尤其是当 Kubernetes pods 可以在您的直接控制之外重新启动时。将所有代码 COPYd 部署(并测试!)到一个 Docker 文件中,尽量减少绑定挂载的使用。