【观点】将Docker用作本地开发毫无意义

依托Docker运行的后端服务(如数据库,缓存,存储等)感觉相当完美,但对于编译语言,Docker却并未本地开发的理想之选。

我一直在尝试使用Docker作为本地开发环境,最近我又尝试了一遍,结果发现依然行不通。但是这次尝试我得出了进一步的结论,那就是对于大多数的开发堆栈而言,将Docker作为本地开发环境毫无意义,除了引入更多的复杂性外,几乎没有任何优势。

若要实现高效的代码编写、编译、运行周期,意味着本地开发环境的容器没必要和生产环境的容器保持一致。这等于是否定了容器最重要的优势之一。换句话说,基于容器的开发环境根本无法达到非容器的本地开发环境的高效和流畅。

先看看我的要求,一个高效的coding、编译和运行周期需要单独的“非生产环境”的容器。首先,如果将生产环境的容器用于开发环境,容器必须包含某些预编译的组件,或者更甚,比如在你的Dockerfile中运行编译。这样,每次微小改动都需要重建容器。你的E/C/R(编辑、编译、运行周期)看起来像这样:


  1. docker-compose up -d #启动所有的容器,并运行 
  2. # edit myservice 
  3. make myservice # 构建服务 
  4. docker-compose build myservice 
  5. docker-compose restart myservice 

按这种方式,整个重建的周期要花很长时间(超过30秒,还不包括服务自身的构建时间)来触发无聊至极的上下文切换。这绝对是生产力杀手。

你可以说这是个实现上的问题,并且最终这一重建周期将会大大加快,但是对比本地环境,构建和重启过程需要几乎无感。我也不觉得这会有效利用到Docker的镜像缓存。

如果愿意放弃使用生产容器作为本地开发容器的想法,或者运行一个没有构建过程的解释性堆栈,你或许可以改变游戏规则。你可将资源库目录装载到容器中,进而监听文件的变更,在容器内使用实时装载工具或刷新机制来重新编译和发布应用。

在一系列愚蠢的步骤下,这种方式也可工作的很好。比如我们将花时间寻找和设置docker-osx-dev开发环境,装载并与源文件夹高效的同步,又将花几个小时摆弄boot2docker以便使inotify正常工作起来,但是我们的确找到了解决方案。

但当我们回顾并看看这一变态的过程,我们竟然找不到令人信服的优势所在。我们在本地使用foreman启动所有服务,对比docker-compose up,foreman start速度难以置信的快。除了Docker容器本身,我们也继承了管理boot2docker所带来的复杂性。配置文档长度也增加了三倍。

我们的初衷是使用Docker作为本地开发环境,打破在本地只能运行如Memcached和Elasticsearch的几种关键服务。最终,我们得到结论,通过docker-compose运行后端服务是很有意义的,但配置和运行本地开发环境需要尽量简单。另外,我们又回到了通过foreman来运行本地微服务的方式。从此不再回头。

本文作者:Andrew

来源:51CTO

时间: 2024-10-25 01:23:37

【观点】将Docker用作本地开发毫无意义的相关文章

观点 | Docker根本不适合用于本地开发环境

本文讲的是观点 | Docker根本不适合用于本地开发环境,[编者的话]依托Docker运行的后端服务(如数据库,缓存,存储等)感觉相当完美,但对于编译语言,Docker却并未本地开发的理想之选. 我一直在尝试使用Docker作为本地开发环境,最近我又尝试了一遍,结果发现依然行不通.但是这次尝试我得出了进一步的结论,那就是对于大多数的开发堆栈而言,将Docker作为本地开发环境毫无意义,除了引入更多的复杂性外,几乎没有任何优势. 若要实现高效的代码编写.编译.运行周期,意味着本地开发环境的容器没

在 Mac/win7 下上使用 Vagrant 打造本地开发环境

1. vagrant介绍 1.1 vagrant能做什么 做Web开发(java/php/python/ruby...)少不了要在本地搭建好开发环境,虽然说目前各种脚本/语言都有对应的Windows版,甚至是一键安装包,但很多时候和Windows环境的兼容性(如配置文件.编译的模块)并不是那么好,麻烦的问题是实际部署的环境通常是Linux,常常还要面临着开发和部署环境不一致,上线前还要大量的调试.而如果让每个开发人员都自己去搭建本地环境,安装虚拟机.下载ISO镜像.选择规格安装创建vm.安装OS

使用Docker在本地搭建hadoop,spark集群

本环境使用的单个宿主主机,而不是跨主机集群,本spark集群环境存在的意义可能在于便于本地开发测试使用,非常轻量级和便捷.这个部署过程,最好在之前有过一定的hadoop,spark集群部署经验的基础,本文重点在于docker相关的操作,至于hadoop和spark集群的部署,极力推荐这两个网页: Hadoop集群:http://blog.csdn.net/stark_sum ... 24279. Spark集群:http://blog.csdn.net/stark_sum ... 58081 主

详解Docker创建php开发环境遇到的权限问题解决方案_docker

最近我将公司的开发,和测试环境都运行到docker 上面,因为开发,测试基本都是装代码拉到本址,然后,再装目录,挂载到镜像目录中如:我用的是docker-compose # development.yml version: '2' services: php-fpm: image: jackluo/php-fpm:5.6.3 restart: always volumes: - ./www:/var/www/html - ./data:/usr/local/var/log extra_hosts

本地开发工具 Nanobox

Nanobox 详细介绍 Nanobox 是本地开发工具,可以消除环境的复杂性,在部署和生产环境之间,进行自动化环境配置,通过虚拟化使得开发环境更简洁. Nanobox 在轻量级 VM 中启动应用,使得本地保持与生产环境一样的配置. 主要特性: 应用源代码:专注于编码,而不需要过多关注配置一个本地开发环境. 语言引擎:此引擎可以检测你的应用类型和指定应用需要的服务,还有如何配置. Docker 容器:配置好和安装好的容器. Vagrant / Virtual Box:服务在统一的轻量级 Linu

Docker —— 用于统一开发和部署的轻量级 Linux 容器【转】

转自:http://www.oschina.net/translate/docker-lightweight-linux-containers-consistent-development-and-deployment 英文原文:Docker: Lightweight Linux Containers for Consistent Development and Deployment 使用Docker容器--轻量灵活的VM同类,来接管"依赖地狱".学习Docker是如何基于LXC技术,

Docker 创建php 开发环境遇到的权限问题解决方案

最近我将公司的开发,和测试环境都运行到docker 上面,因为开发,测试基本都是装代码拉到本址,然后,再装目录,挂载到镜像目录中如:我用的是docker-compose # development.yml version: '2' services: php-fpm: image: jackluo/php-fpm:5.6.3 restart: always volumes: - ./www:/var/www/html - ./data:/usr/local/var/log extra_hosts

SharePoint 2013的本地开发解决方案及远程调试

在SharePoint开发中,我们需要在部署有SharePoint环境的服务器中开发,这是一件让人很苦恼的事情,毕竟不能一个项目多人开发配备多台服务器,这就需要本地开发. 本来自己以为SharePoint 2013在不再支持客户端系统的条件下,只能服务器上开发,QQ群里的朋友提醒说也可以本地开发,远程调试,以为自己是知道SharePoint 2010可以通过注册表修改,本地安装SharePoint的,顺着这个思路,经过一番谷歌/bing,然后实现了,在此总结一下,分享给大家. 思  路 本地安装

搭建基于Docker的PHP开发环境的详细教程

  这篇文章主要介绍了搭建基于Docker的PHP开发环境的详细教程,Docker是当下虚拟机技术的最佳选择,需要的朋友可以参考下 现在很多开发者都使用Vagrant来管理他们的虚拟机开发环境,Vagrant确实很酷, 不过也有不少缺点(最主要的是它占用太多的资源).在容器技术.Docker和更多类Docker技术出现后,解决这个问题就变得简单了. 免责声明 由于boot2docker的工作方式,本文所述的方法在你的环境中可能无法正常运行.如果需要在非Linux环境下共享文件夹到Docker容器