开发者可以使用Docker做什么?

本文讲的是开发者可以使用Docker做什么?,【编者的话】有些开发者可能还是不明白 Docker 对自己到底有多大的用处,因此翻译 Docker 个人用例 这篇文章中来介绍 Docker 在普通开发者开发过程中的用例。

Docker 如今赢得了许多关注,很多人觉得盛名之下其实难副,因为他们仍然搞不清 Docker 和普通开发者到底有什么关系。许多开发者觉得 Docker 离自己很远,Docker 是生产环境中的工具,和自己无关。我也是花了很长时间才想清楚作为普通开发人员如何在自己的开发中使用 Docker。坦率地说,我仍处在学习的过程中。

这篇文章提供了一个 Docker 用例列表,我希望它能更好地帮助你理解 Docker 并引发你的思考。本文只是描述 Docker 在普通开发者日常的应用,并不提供完整的解决方案。

在介绍用例之前,我希望你能先记住这句话:“Docker 是一个便携的应用容器”。你可以不知道 Docker 所说的的“便携式容器”到底是什么意思,但是你必须清楚 Docker 在日常中能带来非常大的效率提升。

当你需要在容器内运行自己的应用(当然可以是任何应用),Docker 都提供了一个基础系统镜像作为运行应用时的基础系统。也就是说,只要是 Linux 系统上的应用都可以运行在 Docker 中。

可以在 Docker 里面运行数据库吗?当然可以。
可以在 Docker 里面运行 Node.js 网站服务器吗?当然可以。
可以在 Docker 里面运行 API 服务器吗?当然可以。

Docker 并不在乎你的应用程序是什么、做什么,Docker 提供了一组应用打包、传输和部署的方法,以便你能更好地在容器内运行任何应用。

下面的例子我自己经常使用,当然你有更好的案例也可以分享给我。

尝试新软件

对开发者而言,每天会催生出的各式各样的新技术都需要尝试,然而开发者却不太可能为他们一一搭建好环境并进行测试。时间非常宝贵,正是得益于 Docker,让我们有可能在一条或者几条命令内就搭建完环境。Docker 有一个傻瓜化的获取软件的方法,Docker 后台会自动获得环境镜像并且运行环境。

并不仅仅是新技术环境搭建用得到 Docker。如果你想快速在你的笔记本上运行一个 MySQL 数据库,或者一个 Redis 消息队列,那么使用 Docker 便可以非常容易地做到。例如 Docker 只需要一条命令便可以运行 MySQL 数据库:docker run -d -p 3306:3306 tutum/mysql

译者注:虽然使用命令也能非常快地安装 MySQL 数据库,但是当用到最新的技术或者非常复杂的技术时,使用 Docker 便会是个非常好的选择,例如 Gitlab,普通用户大概需要一天的时间去搭建 Gitlab 平台,而 Docker 则只需要一条命令

进行演示

现在我经常需要在周末用自己开发的成果对客户活着别人做一两个演示。搭建演示环境的过程非常麻烦。现在我发现 Docker 已经成为我演示这些工具的最合理的方式。同时,对于客户来说,我可以直接将 Docker 镜像提供给他们,而不必去做任何环境配置的工作,工作的效果也会和在他们演示中所看到的一模一样,同时不必担心他们的环境配置会导致我们的产品无法运行。

避免“我机器上可以运行”

无论是上一篇介绍的企业部署 Docker 还是本文的个人 Docker 用例,都提到了这个情况。因为环境配置不同,很多人在开发中也会遇到这个情况,甚至开发的软件到了测试人员的机器上便不能运行。但这都不是重点。重点是,如果我们有一个可靠的、可分发的标准开发环境,那么我们的开发将不会像现在这么痛苦。Docker 便可以解决这个问题。Docker 镜像并不会因为环境的变化而不能运行,也不会在不同的电脑上有不同的运行结果。可以给测试人员提交含有应用的 Docker 镜像,这样便不再会发生“在我机器上是可以运行的”这种事情,很大程度上减轻了开发人员测试人员互相检查机器环境设置带来的时间成本。

另一个 Docker 可以发挥用处的地方是培训班。除了 Docker 容器的隔离性之外,更能体会到 Docker 优势的地方在于环境搭建。培训班的新手每个人都要在环境搭建上花费很多时间,但是如果在这里应用到 Docker 的话,那么我们只需要把标准的运行环境镜像分发下去,然后就可以开始上课了。使用 Docker 和使用虚拟机一样简单,但是 Docker 要更方便、更轻量级。同时,我们也可以告诉学员:“在培训的同时,我们还将学到当下最流行的技术——Docker”,这种双赢的结局,何乐而不为呢。

学习 Linux 脚本

当然这个原因看起来可能很奇怪,但是对不不熟悉 Linux 操作系统和 Shell 脚本的人来说,确实是一个好机会。即便本文并不是在讲 Linux,Linux 的重要度仍然不言而喻。如果你用的是 Windows,那么我给你一个建议:从云主机提供商那儿租用一台云主机:我推荐使用 CoreOS 系统的云主机。虽然这样并不会让你成为专业的 Linux 运维,但是可以让你快速地学到 Linux 基础知识,爱上命令行操作,并且慢慢开始熟悉和欣赏 Linux。

更好地利用资源

虚拟机的粒度是“虚拟出的机器”,而 Docker 的粒度则是“被限制的应用”,相比较而言 Docker 的内存占用更少,更加轻量级。

对我来说这是 Docker 的一个优势:因为我经常在自己电脑中运行多个 Docker 应用,使用 Docker 比使用虚拟机更加简单,方便,粒度更细,也能持续地跟踪容器状态。

为微服务定制

如果你一直在关注科技新闻的话,那么你应该听说过“微服务(Microservices)”的概念。Docker 可以很好地和微服务结合起来。从概念上来说,一个微服务便是一个提供一整套应用程序的部分功能,Docker 便可以在开发、测试和部署过程中一直充当微服务的容器。甚至生产环境也可以在 Docker 中部署微服务。

在云服务提供商之间移植

大多数的云主机提供商已经全面支持 Docker。对于开发人员来说,这表示你可以很方便地切换云服务提供商,当然也可以很方便地将你本地的开发环境移动到云主机上,不需要本地上配置一次运行环境、在云主机上还配置一次运行环境。全面部署 Docker (Docker here and Docker there) 作为标准运行环境可以极大地减轻应用上线时的工作量和产生 BUG。

API 端

API 是应用之间的粘合剂,一个合格开发者肯定使用过别人提供的 REST API,或者自己开发过 REST API。需要指出的是,无论是客户端还是 API 提供端,在开发之前都需要先定义一组公共的 API 接口,写成文档,然后才能进行编码。如果服务端和客户端是共同开发的话,那么服务端通常会先实现能返回固定字符串的 API 接口,在以后的开发中再慢慢去实现 API 的功能。

虽然有人会认为在这里 Docker 被滥用了,完全可以用 sample.json 这种文件去实现虚拟 API,但是下面有个实例可以更好地解决前后端分离开发时的 API 问题。

为了更好地解释我的意思,给大家提供一个实例:JSON Server,一个用于提供 JSON 数据的 REST API。使用过这个容器的人就会知道,既然有这么好用的 Docker JSON Server,我们没有理由不用 Docker。

译者注:

  • 运行示例的 JSON Server,同时使用示例中提供的 JSON 文件,只需执行一条命令便可以创建一个服务端的 API 应用。
  • 使用 curl http://127.0.0.1:80/posts 即可获取示例文件中的 posts 段,这样在后端没有开发完 API 的时候,前端一样可以进行协同开发。

技术的创新

这点应该算不上是用例,但是我还是来写一下。Docker 正在快速发展,工具也在不断更新,没有人能预见到未来 Docker 会是什么样子的。你在复杂的系统中 Docker 使用的越多,越是可能会发现技术上的空白和未来技术发展的方向。现在还处在 Docker 的发展期,任何你使用 Docker 创建的工具都有可能成为社区关注的热点。这是 Docker 的机会,也是成就你自己的机会。

你的用例

最后一条便不再是我的用例了,而是 Docker 在你手中能发挥多大的作用。我也很希望看到你能提供更多使用 Docker 的方式,欢迎留言。

其他

还有两个技巧可以分享给你们。在学习 Docker 的过程中因为有了这两个的帮助,我才得意不断地提升自己。

一:Docker Hub Registry。这是 Docker 的官方镜像仓库,除了托管着 Docker 官方的镜像外,和 Github 一样,你可以在上面上传自己的镜像,也可以在上面搜寻其他有用的镜像,极大地节省自己的时间。例如 Oracle-XE-11g 镜像,所有的一切都是现成的,完全不需要自己去下载 Oracle XE 11g 安装。这样为你和团队节约了大量的时间成本。

如果你不太确定的话,可以去 Docker Hub 上搜有一下有没有自己用得到的镜像。大部分情况下你所需要的镜像在 Docker Hub 上都已经有人构建了。

二:多参考 IaaS 供应商的新闻,虽然我们不能像在他们会议室里那样完全了解他们的公司动态,但是仍然可以从新闻中可以了解到 Docker 最新的发展方向和技术趋势。可以肯定的是,容器化技术是未来的热点,我们不仅可以在本机运行 Docker,不仅仅在一家云服务提供商的主机上运行 Docker,未来所有的云服务提供商都会支持 Docker。

Docker 前景很明确,采用 Docker 只会让开发变得更方便。

原文链接:Docker Use Cases(翻译:大舒)

=============================================
译者介绍
大舒,SegmentFault 员工。

原文发布时间为:2015-05-14

本文作者:大舒 

本文来自合作伙伴DockerOne,了解相关信息可以关注DockerOne。

原文标题:开发者可以使用Docker做什么?

时间: 2024-08-01 12:50:52

开发者可以使用Docker做什么?的相关文章

《第一本Docker书(修订版)》——1.3 能用Docker做什么

1.3 能用Docker做什么 那么,为什么要关注Docker或容器技术呢?前面已经简单地讨论了容器提供的隔离性,结论是,容器可以为各种测试提供很好的沙盒环境.并且,容器本身就具有"标准性"的特征,非常适合为服务创建构建块.Docker的一些应用场景如下. 加速本地开发和构建流程,使其更加高效.更加轻量化.本地开发人员可以构建.运行并分享Docker容器.容器可以在开发环境中构建,然后轻松地提交到测试环境中,并最终进入生产环境.能够让独立服务或应用程序在不同的环境中,得到相同的运行结果

微信开发者平台可以做很高级的应用吗

问题描述 微信开发者平台可以做很高级的应用吗 比如嵌入小游戏,访问一些图文内容,增删改查.各种app的功能,论坛什么的,就使用开发者的功能,不是超链接连到其他页面上,有的话有没有实例提供呢?好难找呀 解决方案 微信开发者平台做不了什么很高级的应用. 比如微软的小冰微信号就做得相当优秀,腾讯觉得好像给微软当搬运工,把这个应用给删除了. 但是,电信.联通.移动觉得给微信当搬运工.但就是不敢动微信一根汗毛 解决方案二: 感觉就是自己写个网页,微信给你一个接口,你连上去就好了.至于功能,你想写啥写啥.

如何让开发者一门心思的做产品?

当下多数移动开发者都面临一个共同的难题:即众多新手机的出现,带来了APP适配测试成本越来越高.如何让开发者一门心思的做产品? 今年6月,360移动开放平台宣布与全球最大的游戏真机自动化云测试平台Testin云测战略合作,如雪中送炭般解决了该难题. 数据显示,每一款应用新版本发布前,都要经过大量的主流手机适配度测试.360手机助手相关负责人表示,根据360移动开放平台发布的<2014年Q1360移动开放平台APP分发行业报告>显示,目前 APP个人开发者人数比例已近六成(59.57%),这种反复

PHP 开发者的 Docker 之旅

用 PHP 作为我们「Docker 开发大礼包」开篇是带着一些朝圣的心情的.这是一门堪称「古老」的语言,这也是一门争议最多的语言,这更是一门不断涅槃的语言.「PHP 是最好的语言」这个流传已久的梗,或许正是对我国最有群众基础的编程语言描述里,最经典的注解. 就让我们一起回顾一下 PHP 的发展历程作为此系列文章的开篇.历史是最好的老师,他给每个未来提供启示. 谁创造了 PHP? Rasmus Lerdorf 在 1994 年创造了 PHP,Andi Gutmans 和 Zeev Suraski

Python 开发者的 Docker 之旅

「人生苦短,我用 Python」这句话作为「Docker 开发大礼包」的第二季的开篇引言是再合适不过了.这句话的出处是 Bruce Eckel,对,就是那个 C++ 和 Java 生命里最重要那个男人.这大概就是传说中的大是大非之后痛彻心扉的领悟. Python 其实是一门非常古老的语言,他的故事几乎伴随着我国改革开放的历史步伐一路走来,也同样经历了跌宕起伏,涅槃重生的激荡二十年.毫不夸张的说,Python 的演化历史和成果,是程序员自强不息摆脱机器思维,迈向本我的探索旅程. 谁创造了 Pyth

数千款Windows游戏的开发者 这回做VR有何不同?

     关注VR,常常会听到几种声音,"VR将改变世界","XX用VR只是噱头,不过也为行业做了普及""VR行业其实很脆弱,切莫让劣质的体验抵消了投资者的热情".矛盾么?并不. VR眼镜的商业模式很清晰:把量做起来,把内容填进去,向用户收费. 但要真正实现这一点,并非一簇而就. 2015年VR热闹非凡,so what?  Oculus 的诞生,让国内的VR社区充斥着极客们亢奋的体验交流.剖析技术,随着Facebook 20亿美金收购Oculus

使用Docker做开发的建议团队工作流

意义 自从Docker进入到我们的工作流程之后给环境配置框架搭建,持续集成,持续交付方面带来了很多好处,首先相对于虚拟机来说,最直接的好处是带来了更小的镜像,同时程序以容器的方式运行不但启动速度快而且性能也好过虚拟机,同时它的配置可以非常快速的调整.其次对于开发来说,我们整个团队都使用的是Sublime+git的方式进行开发,使用Docker之后无论是什么平台只要有Shell都可以很方便的统一测试&开发环境. Docker特性的使用 磁盘挂载(-v) 一直以来我们在使用Docker过程中都遵循着

nginx 配合 spring boot - docker 做动静分离和跨域

spring boot . spring cloud . docker 我就呵呵了,反正很火 spring boot 主要做微服务,一般仅仅提供服务,逼格说的简单点,提供一个http请求,返回json. docker ,呵呵 方便部署,持续交互, 云计算-也即是 虚拟化技术和资源管理,,逼格再低点-运维, html 页面 不像以前那样 放在web工程目录下, 现在要做的是 图有点丑,没关系 nginx配置 #user nobody; worker_processes 1; #error_log

四件新浪微博开放平台开发者决不能做之事

在谷歌有一句广为人知的名言,叫做"不作恶",虽然可能人们对此争议很大,但是显然"不作恶"都是很多公司的对外宣传或者对内要求的.不知道大家是否了解,其实在新浪也有个不作恶的规定! 而随着开放平台概念的发展,已经有越来越多的企业加入了开放平台,他们都希望第三方开发者能够在自己的平台上做出优秀的产品从而吸引到更多的用户.而各大互联网公司在开放平台方面都有着自己的规则,这些规则要求开发者必须遵守,否则他们就会受到严厉的惩罚.那么下面我们就来介绍一下在新浪微博开放平台上的一些