掘金 AMA:《开发者必备的 Docker 实践指南》小册作者--有明聊 Docker

第十一期 AMA,掘金团队请来了《没什么难的 Docker》书籍、《开发者必备的 Docker 实践指南》小册作者-- 有明做了为期三天的 Ask Me Anything (AMA) 活动(已结束)。

我们在此精选了一些来自用户的提问及有明的回答。

关于有明

  • 个人 GitHub:github.com/youmingdot
  • 个人掘金主页:juejin.im/user/5a17e9…

社区小伙伴精选提问

使用jenkins发布的go程序,且项目不大,对于这样的项目docker能带来什么? ─ @itstudying

使用jenkins发布的go程序,且项目不大,对于这样的项目docker能带来什么呢,谢谢。

对于 Go 程序来说,特点就是环境依赖性很强,我们在开发平台上编译、运行并测试通过的程序,也许在目标平台上还要重新编译,甚至编译后会出现与开发平台上运行不一致的情况。通过 Docker,我们就可以尽可能的保证开发、测试、生产环境的一致性,减少很多不必要的麻烦和因为这些麻烦带来的工作量。

docker有什么具体的使用场景呢─ @胜雄

测试领悟 docker有什么具体的使用场景呢

如果将 Docker 引入到 DevOps 流中,那么测试人员就再也不需要为程序运行环境所困扰了。在我司的实践中,通过使用 Docker 来搭建测试环境,测试同事对环境的管理和切换都变得非常容器,仅需几条命令或是几个配置就能完成。

Docker对于刚刚进去后端开发的工作者来说,是否真的有必要? ─ @旱鸭子

Docker对于刚刚进去后端开发的工作者来说,是否真的有必要。比如我,我自学的golang,就目前我的了解来看,我需要学习数据库,web框架等一些基本的东西,这个时候入手docker是否合适。会不会喧宾夺主呢?

这些东西对于学习 Docker 来说,完全不冲突。同时,学习 Docker 对于后端开发来说也是非常必要的。简单来比较,学习 Docker 与其说是学习 Docker 这门技术,不如说是学习使用 Docker 以及周边的工具,学习通过 Docker 来提高我们的工作效率。这就好比上手一款好用的 IDE 来替代记事本编写代码,虽然会消耗一些时间来掌握它,但之后的收益的非常明显的。从另一方面来说,掌握 Docker 虽然消耗了你的一些学习时间,但在之后会不断的为你节约大量用于环境方面的时间,用这些时间去学习其他的知识,岂不是非常完美。

怎么开一个容器? ─ @Arthur.Li

怎么开一个容器比如node,只用做打包比如运行个npm什么的。最好能放到compose里一起管理。 只能通过docker run xxx /bin/bash npm install 这种新建容器去执行吗?

完全可以将这个容器放到 Compose 项目里,这样可以更优雅的与 Compose 项目中的其他容器进行结果共享等。这个容器的命令就可以直接设置为 npm install,每次启动它就可以做一次更新。

mysql如果使用docker部署的话,会不会在特定的情况下出现性能问题?─ @Zaregoto

mysql如果使用docker部署的话,会不会在特定的情况下出现性能问题呀?比如I/O或什么的

Docker 做的工作主要是隔离,没有涉及资源转换,所以容器中的程序对硬件资源的使用上与宿主机上的程序是一致的(如果你通过 Docker 做了资源限制那另当别论)。所以,容器中的程序与宿主机中的程序镜像对比,在性能上没有差别。当然,如果你的流量特别高,真的已经达到了服务器硬件的 I/O 瓶颈,那不论程序是直接运行在服务器还是运行在容器里,都一样会出现峰值限制的。

中小项目是否有必要采用Docker解决方案?─ @Colin Jiang

中小项目是否有必要采用Docker解决方案?

Docker 的优势并不仅在于其能够更快实现集群搭建和管理,更在于其能够贯穿 DevOps 流。换句话说,Docker 在开发、测试、运维领域都能发挥不少作用。所以,中小型项目更应该引入 Docker,因为它真的能够节约大量的人力、物力以及时间,这些成本对于中小型项目来说,都是非常宝贵的。

Docker 和 微服务 或者 Service Mesh 怎么优雅的搭配一起使用?─ @wujunze

Docker 和 微服务 或者 Service Mesh 怎么优雅的搭配一起使用

通过 Docker 以及周边技术来实现服务化相关的基础设施,进而替代以往微服务体系在应用程序中实现的这些功能,使得服务基础设施与应用分离,让应用开发不再需要过多考虑服务化基础架构的问题,这就是 Service Mesh 的核心理念之一。

docker里直接pull一个centos,然后装lnmp;与分开装有什么区别

docker里直接pull一个centos,然后装lnmp;与分开装有什么区别

Docker 推崇轻量级容器,即程序即容器的概念。分开使用不同的容器运行不同的程序,既符合 Docker 自身的设定,又能够让 Docker 更好的对这些容器镜像管理。而从另外一个角度出发,用容器隔离不同的程序,才是破解程序间复杂依赖难题的关键步骤。

docker算不算精简化的虚拟机? ─ @诺墨

docker算不算精简化的虚拟机?

准确来说,Docker 以及它所对应的容器技术不属于虚拟机的范畴。虚拟机特指的是通过 Hypervisor 也就是虚拟机监控器来实现虚拟资源到实际资源转换的。而容器技术更关心的是资源的隔离,其中是没有 Hypervisor 这一层的,所以其与虚拟机存在很大的差别。关于这两者的比较,在我的《开发者必备的 Docker 实践指南》中有更详细的解读。

如何保证安全性?─ @buheshuicat

docker并不能完全将资源隔离起来,如何保证安全性?

Docker 的安全可以从几个角度出发去考虑:

  1. 隔离安全,也就是依靠 Docker 实现隔离的 Namespace、CGroup 等机制实现安全隔离。
  2. 内核能力限制,即通过限制 Docker 容器及其中应用对内核敏感功能的使用,来达到防范风险的目的。
  3. 服务器安全防护,这和普通的服务器防护原则是一致的,也就是设立防火墙,使用证书保护,应用非 root 运行等方式来限制外部攻击。
  4. 设立安全机制,通过像 AppArmor、SELinux 这样的安全策略或安全软件来增强内核本身的安全性。

本期 AMA 社区小伙伴提了许多实用问题,感谢有明认真地为掘金小伙伴解答了不少疑问。浏览更多的问答,可以到有明的 AMA 进行阅读和讨论。

你可能感兴趣的:(掘金 AMA:《开发者必备的 Docker 实践指南》小册作者--有明聊 Docker)