做者:刘允鹏
连接:https://www.zhihu.com/question/28300645/answer/67707287
来源:知乎
著做权归做者全部。商业转载请联系做者得到受权,非商业转载请注明出处。
连接:https://www.zhihu.com/question/28300645/answer/67707287
来源:知乎
著做权归做者全部。商业转载请联系做者得到受权,非商业转载请注明出处。
Docker的思想来自于集装箱,集装箱解决了什么问题?在一艘大船上,能够把货物规整的摆放起来。而且各类各样的货物被集装箱标准化了,集装箱和集装箱之间不会互相影响。那么我就不须要专门运送水果的船和专门运送化学品的船了。只要这些货物在集装箱里封装的好好的,那我就能够用一艘大船把他们都运走。php
docker就是相似的理念。如今都流行云计算了,云计算就比如大货轮。docker就是集装箱。前端
1.不一样的应用程序可能会有不一样的应用环境,好比.net开发的网站和php开发的网站依赖的软件就不同,若是把他们依赖的软件都安装在一个服务器上就要调试好久,并且很麻烦,还会形成一些冲突。好比IIS和Apache访问端口冲突。这个时候你就要隔离.net开发的网站和php开发的网站。常规来说,咱们能够在服务器上建立不一样的虚拟机在不一样的虚拟机上放置不一样的应用,可是虚拟机开销比较高。docker能够实现虚拟机隔离应用环境的功能,而且开销比虚拟机小,小就意味着省钱了。mysql
2.你开发软件的时候用的是Ubuntu,可是运维管理的都是centos,运维在把你的软件从开发环境转移到生产环境的时候就会遇到一些Ubuntu转centos的问题,好比:有个特殊版本的数据库,只有Ubuntu支持,centos不支持,在转移的过程中运维就得想办法解决这样的问题。这时候要是有docker你就能够把开发环境直接封装转移给运维,运维直接部署你给他的docker就能够了。并且部署速度快。git
3.在服务器负载方面,若是你单独开一个虚拟机,那么虚拟机会占用空闲内存的,docker部署的话,这些内存就会利用起来。github
总之docker就是集装箱原理。sql
开发者可使用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。若是你想快速在你的笔记本上运行一个 MySQL 数据库,或者一个 Redis 消息队列,那么使用 Docker 即可以很是容易地作到。例如 Docker 只须要一条命令即可以运行 MySQL 数据库:
译者注:虽然使用命令也能很是快地安装 MySQL 数据库,可是当用到最新的技术或者很是复杂的技术时,使用 Docker 便会是个很是好的选择,例如 Gitlab,普通用户大概须要一天的时间去搭建 Gitlab 平台,而 Docker 则只须要一条命令。
另外一个 Docker 能够发挥用处的地方是培训班。除了 Docker 容器的隔离性以外,更能体会到 Docker 优点的地方在于环境搭建。培训班的新手每一个人都要在环境搭建上花费不少时间,可是若是在这里应用到 Docker 的话,那么咱们只须要把标准的运行环境镜像分发下去,而后就能够开始上课了。使用 Docker 和使用虚拟机同样简单,可是 Docker 要更方便、更轻量级。同时,咱们也能够告诉学员:“在培训的同时,咱们还将学到当下最流行的技术——Docker”,这种共赢的结局,何乐而不为呢。
对我来讲这是 Docker 的一个优点:由于我常常在本身电脑中运行多个 Docker 应用,使用 Docker 比使用虚拟机更加简单,方便,粒度更细,也能持续地跟踪容器状态。
虽然有人会认为在这里 Docker 被滥用了,彻底能够用
为了更好地解释个人意思,给你们提供一个实例:JSON Server,一个用于提供 JSON 数据的 REST API。使用过这个容器的人就会知道,既然有这么好用的 Docker JSON Server,咱们没有理由不用 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(翻译:大舒)
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(翻译:大舒)