在开发中正确使用 Docker
如果您不精通 Docker,或者对容器和虚拟机等主题还比较“模糊”,在开发中使用 Docker 时遇到问题,但又想学习和使用容器,那么本文适合您。
几周前,我写了一篇关于“像容器一样思考”的文章,其中我对容器进行了介绍并解释了容器解决的问题。
生产用途
容器最流行的用途是在生产环境中,因为团队可以将应用程序打包成包含运行时和所有所需依赖项的图像。
这样的过程有助于独立部署应用程序并使其与服务器无关,这意味着从技术上讲它可以在世界上任何云提供商处轻松部署。
容器遵循标准。它们可以在任何地方均匀运行。
开发用途
然而,有些人提倡使用容器并且也在开发中使用它们。
一种方法是下载生产环境中使用的应用程序镜像,并在本地运行容器。
这非常酷,因为它有助于轻松复制错误,因为容器并不关心它是在 AWS 的远程服务器还是在本地机器上运行。运行时、依赖项和应用程序本身:与生产环境完全相同。
除非您尝试复制某些非常具体的错误,否则您不需要在本地下载臃肿的生产图像。
错误地使用 Docker
尝试思考以下场景:
- 你开始着手一个新项目
- 他们已经在生产中使用容器(Docker)
- 您可以根据声明的镜像配置本地环境
Dockerfile
这里一切都好。
- 运行
docker-compose up
,然后开始构建应用程序映像,安装应用程序所需的数百个依赖项 - 之后,你的服务器运行速度为
localhost:8080
。太好了,你检查了一下,然后开始编码
这里的一切都很好。
但是写完代码后,你希望看到它的实际效果。你docker-compose up
再次运行,却发现最可怕的噩梦来了:每次启动服务器时,它都会一遍又一遍地安装所有依赖项。
然后你意识到 Docker 及其所有容器纯粹是浪费时间。你放弃了,并在主机上安装所有应用程序环境。
祝你好运。
如何修复 Dockerfile?
是的,Dockerfile 可能没有遵循最佳实践,这使得开发中的容器使用变得非常困难。
在本文中,我不会介绍编写好的 Dockerfile 的最佳实践,但肯定会在以后的文章中介绍。
我将重点讨论另一个方面。
忘记那些真正的项目是如何使用 Docker 的
这听起来似乎有悖常理,但我的观点是,如果你今天开始使用 Docker,并认为容器的工作方式与你在公司项目中看到的完全一样,那么你就注定要失败。
容器远不止于此。我建议先了解一下容器的工作原理,然后进行实验。用它们尝试不同的事物和技术。
只有这样,您才能以正确的方式在实际项目中使用容器。
那么正确的方法是什么?
假设你的主机上没有安装 NodeJS。你需要先安装 NodeJS(具体取决于你的操作系统),然后进行配置,并完成以下几项操作才能运行:
node hello_world.js
但是使用 Docker,你不需要在主机上安装 Docker 以外的任何东西。这样,你就可以在容器内部运行命令了:
docker run node hello_world.js
就性能而言,它所花费的时间几乎与从主机运行相同。这是难以察觉的。
它还使您能够拥有开箱即用的“版本管理器”:
docker run node:10 hello_world.js
docker run node:12 hello_world.js
现在,不再需要每三年更换一次版本管理器,只是因为每个人都在使用“新奇酷炫的版本管理器”。
您的主机将会感谢您。
在开发中有效使用容器(Docker)的技巧
在接下来的部分中,我将分享一些技巧,也许可以帮助您理解容器解决的问题。
图像 !== 容器
尝试真正理解和使用容器,而不是镜像。只有这样,才能学习镜像的工作原理。镜像是你的最后手段。
学习量
掌握音量 可以救你一命。真的。
了解它们的工作原理以及如何有效地提高您的工作效率。
它们并不像看上去那么难。
了解 Docker 网络
容器在设计上是隔离的。使用容器是因为你不想干扰你的主机。
但在实际项目中,容器之间需要相互通信。学习如何利用 Docker 网络,让你的容器之间相互通信。
首先使用 docker CLI,然后使用 docker-compose
Docker文档参考非常好,它将为您提供让您的项目在 Docker 上运行所需的几乎所有信息。
大量使用docker CLI
。忍受痛苦。感受命令行上的痛苦。
然后,只有这样,才能转到 docker-compose并真正了解 docker-compose CLI 如何在日常生活中为您提供更多帮助。
使用 Docker 构建宠物项目
这是学习 Docker 的绝佳练习。克制住从主机上安装或使用某些东西的冲动。把你的 Web 服务器放进容器里。把你的数据库放进容器里。
从头开始构建一个真正的宠物项目全栈应用程序,这是熟悉使用 Docker 的最佳方式。
您不会后悔,也不会回头。
结论
在本文中,我尝试从技术角度解释为什么我认为 Docker 被许多开发人员误解了。
诸如“Docker 太多了”或“Docker 只适用于生产环境”之类的论点通常源于缺乏理解。Docker在开发过程中已经积累了丰富的最佳实践,如果能够正确应用,就能驳斥这些论点。
当然,开发中使用 Docker 毕竟不是强制的,它只是一个工具,就像说你喜欢用 Vim 或 VSCode 写代码一样。
鏂囩珷鏉ユ簮锛�https://dev.to/leandronsp/using-docker-in-development-the-right-way-15j3