
网上搜的博客帖子,都说可以解决开发环境统一的问题
比如,公司新来了个员工,通过 docker 可以很快把他的电脑环境弄成和其他人一样的,不需要再去安装 sdk 之类
我疑问的是,假如我们是在 windows 下做 python web 开发
用 docker 的话,我将 python 的安装包和相应的库( flask django 等)打包进 docker,那别人是不是直接使用我这个镜像就可以有和我一样的开发环境?
他是不是不用再在电脑上装 python 的安装包和相应库了?
如果不用的话,他用 pycharm 等工具,怎么本地运行这个 web 项目? pycharm 的运行是需要配置 py 的安装路径吧?
如果后期我又安装了一个库,比如 requests,很小,他是不是又得更新 docker 镜像?
谢谢大家
1 terry0314 2017-09-06 23:37:27 +08:00 |
2 JamesPan 2017-09-06 23:43:33 +08:00 先把编译器什么的放到镜像里,这样子就统一了构建工具链;然后把 Vim/Emacs 放到镜像里,就统一了开发工具链(逃 |
3 songdezu 2017-09-06 23:50:44 +08:00 docker 在 windows 上要虚拟机吧, 占大量内存性能又烂, 新人来了还是老实让他配置和你相同的环境安装依赖包 本机开发吧 |
4 heimeil 2017-09-06 23:53:35 +08:00 via Android 开发的统一靠的是版本管理工具,将 Dockerfile 加入版本管理,所有的系统依赖都在 Dockerfile 中配置,代码肯定要统一,Dockerfile 也就统一了,Docker 镜像也就统一了。 |
5 binux 2017-09-06 23:56:35 +08:00 从来没有从 IDE 中运行过程序 |
6 only0jac OP |
7 only0jac OP |
8 wenzhoou 2017-09-07 00:16:32 +08:00 via Android 同样想知道。 |
9 changnet 2017-09-07 00:44:24 +08:00 你要用 win 并且用 IDE 调试的话,应该不太好整,至少我不会怎么弄。像我们公司做 C++、lua、php 这种开发的,都是用的一个文本编辑器。把 mysql、gcc、g++和一大堆依赖库全扔进 docker,然后把 docker 打包。新人来了,让他装一下 docker 的环境,然后挂载这个 docker 压缩包就可以了,把本机的源代码目录挂载到 docker 里。改了代码,直接在 shell 里编译一下运行,调试也是用的 shell。 当然,这只是我的私人项目,在公司和家里同步用的。我公司其实没用 docker。 |
12 JamesPan 2017-09-07 01:07:52 +08:00 @only0jac 别不信。。。vagrant 就是给你一个脚本,让你控制怎么从虚拟机镜像开始一步一步构建出目标环境,然后让你在虚拟机里开发,所谓的 docker 能统一开发环境也是一样,把开发工具都打包到 docker 镜像里,然后把代码挂载到容器里,用镜像里打包好的工具开发 |
13 PythonAnswer 2017-0907 01:19:54 +08:00 不喜欢在 ide 里跑东西。ide 主要搞搞调试、重构什么的。 |
14 orderc 2017-09-07 01:55:11 +08:00 在 windows 下做开发,但是在 Linux 下运行程序。 |
15 popbones 2017-09-07 06:25:26 +08:00 我是这样的,比如我写个 Flask 的 API,用 PyCharm,项目本身的依赖主要是考 venv 来管理,然后项目有 Dockerfile 可以在 Docker 中运行,当然项目所有代码包括 venv 和 Dockerfile 都是由 Git 来管理的。 开发调试工程中,比如需要用到数据库,缓存等其他系统组件,这些就可以由 Docker 或 Docker-compose 启动相应组件,而不需要安装相应的版本并确认配置到宿主机。 开发调试完成,测试 Docker 镜像,运行正常,推到 Registery。 另外你要是实在是想用 PyCharm,但是程序跑在 Docker 里,估计可以挂在本地目录到 Docker 镜像,然后从 PyCharm 远程 attach 到 Docker 中的 Python 进程调试,不过真心何苦呢。 |
16 carlclone 2017-09-07 07:11:13 +08:00 via Android 自己用一遍就知道了。。。不是什么高深的东西 |
17 songjiaxin2008 2017-09-07 07:50:22 +08:00 via iPhone docker 是用来 scale 的,vagrant 做开发环境更合适。 |
18 only0jac OP |
19 UnisandK 2017-09-07 08:43:10 +08:00 Pycharm 配置 Python 安装路径的时候不是有 docker 和 vagrant 的支持吗 |
20 7654 2017-09-07 08:51:37 +08:00 哈哈,我们的系管直接封装了 Win 系统,输入域帐号开箱即用 |
21 PythonAnswer 2017-09-07 08:57:55 +08:00 via Android 开发环境还是 linux 配 docker 爽。 |
22 liuxu 2017-09-07 08:57:55 +08:00 你就把他们想象成打包好的 ghost 系统吧 |
23 JingW 2017-09-07 09:38:04 +08:00 是是,Docker 似乎解决的是开发时把整个系统运行起来的问题 但是 IDE 还是在 windows 里面啊,为了 IDE 正常工作,一定还要再装一套东西在系统里吧?这个问题似乎不是 docker 或者 vagrant 打算解决的? |
24 only0jac OP @UnisandK 还能这样……那岂不是直接可以本地运行 docker 中的 py 程序了?多谢 @7654 系管是系统管理员么…… @liuxu ghost,那我能把 pycharm 打包进去吗,2333 @PythonAnswer 本地开发时使用 docker,部署到服务器也需要吗 docker 吗,如果是的话能否不用?毕竟小内存 |
27 PythonAnswer 2017-09-07 10:34:21 +08:00 @only0jac docker 做分发比较好. 你服务器不想跑 docker, 那就只用 vagrant 即可. |
28 hronro 2017-09-07 10:47:05 +08:00 想用 Docker,就别用 windows 做开发了吧,换 mac 或者 Linux。 |
29 fy 2017-09-07 11:13:09 +08:00 docker 做什么开发环境统一,就不是用来干这个的。 vagrant 好多了,占用资源也很低 |
30 fy 2017-09-07 11:13:48 +08:00 然后 mac 下 docker 和 win 貌似一样也是先要跑一个虚拟机好像,2333 |
31 bk201 2017-09-07 14:09:32 +08:00 环境都一样了,怎么踩坑成长(雾 |
32 Alex6 2017-09-07 15:34:36 +08:00 vagrant 就是跑一个虚拟机起来,开发时首先需要启动这个虚拟机。不过远端和本地可以做目录映射,文件自动同步。本地(例如:windows )代码修改,自动同步到服务器,远端环境( Linux )执行。虚拟机上安装了完整的执行环境。 docker 容器需要在一个虚拟机(例如 Linux )上安装执行,可以安装各种服务的 docker 镜像,比如 nginx 服务,可以通过端口映射和目录挂载让容器镜像和容器(虚拟机)关联起来。本地(例如:windows )这样可以访问虚拟机 80 端口,实际上是访问的 docker 镜像的 nginx 服务。虚拟机上并没有真的安装 nginx。 本地开发推荐用 vagrant 吧,毕竟执行环境不会天天变,而且打包为.box 文件,迁移起来也比较方便。docker 还是更好的用于自动化测试,PaaS 服务 |
33 aleung 2017-09-07 19:29:27 +08:00 via Android 正好刚写了一篇博客,讲我们是怎样基于 docker 创建统一开发环境的。我这儿是用 node.js ,但其他的环境也是可以一样弄的。https://aleung.github.io/blog/2017/09/07/docker-dev-env/ |
34 aleung 2017-09-07 19:29:59 +08:00 via Android |
35 only0jac OP @aleung 感谢,不过有个地方不明白,最后那里 将源代码 git clone 的本地目录,里面包括了定义 docker 环境的 docker-compose.yml 和定义 node.js 项目的 package.json。 代码克隆到本地,能通过 docker 中的环境运行? |
36 param 2017-09-08 01:58:43 +08:00 via Android 我去,我给楼主写了一大堆,提交之后不见了。。?? |
37 param 2017-09-08 02:01:08 +08:00 via Android 从新开始写。这里很多人忽略了 docker register 的角色,其实实现高效的工作流需要配合 ci 服务器。 |
38 param 2017-09-08 02:05:06 +08:00 via Android 多数时候不需要手动执行 docker build 来构建镜像,而是让 ci 服务器来操作。你的项目使用 git 来管理,当你写完代码 git push 到远端后,ci 服务器便会自动对你的版本进行测试、编译等工作,最后让 ci 服务器来执行 docker build 构建出相应版本的 docker 镜像。需要为每个版本构建一个 docker 镜像,之后要部署的时候,爱部署哪个版本就用哪个比较的镜像。 |
39 param 2017-09-08 02:09:00 +08:00 via Android ci 服务器构建出一个镜像之后要 docker push 到 docker register。 在开发时,如果不想再开发机上安装运行环境,可以直接把项目源码 clone 下来,同时把镜像也 pull 下来,再把源码目录挂载进镜像里面。假如你需要发送 requests 请求,那么你的 requests 这个库安装在 docker 镜像里面,而真正执行发送请求逻辑的项目代码直接放在宿主机上并挂载进 docker 镜像里。pycharm 已经支持直接使用 docker 镜像里的 Python 库。 |
40 param 2017-09-08 02:12:07 +08:00 via Android 至于,你往项目里添加了 requests 库后,你的同事是否需要更新镜像?答案是肯定的。当你把 requests 添加到 requirements.txt ,把代码 git push 到远端后,ci 服务器会构建出一个含有 requests 库的 docker 镜像,之后 ci 服务器把这个镜像 docker push 到 docker registry,这时你的同事只需要 docker pull,几秒便可更新完镜像。 |
41 aleung 2017-09-08 08:54:48 +08:00 via Android @only0jac 代码目录是 mount 到容器的 volume 里的,在容器里的路径是 /project |
42 only0jac OP |
43 mritd 2017-09-08 09:57:34 +08:00 via iPhone 没见过所谓的 docker 统一开发环境的,不知道这种说法从哪出来了,感觉有点逗,docker 主要是用来做微服务的,同时它可以统一测试环境与生产环境,一般用 docker 的上层肯定有编排工具,比如 k8s swarm mesos dcos 啥的,所谓的统一开发环境就别逗了,除非你开发全是 linux,然后全 vim 开发 |
44 mritd 2017-09-08 10:01:23 +08:00 via iPhone 还有 docker 在 ci 这一块还不错,譬如 gitlabci 在 build 不同项目的时候可以使用不同的基础镜像,方便切换 build 环境,docker 出现以后,传统交付物从代码或者编译后的 部署文件如 jar 包等变成了 docker 镜像,所有的发布部署都基于镜像,镜像内包含运行环境,从而实现测试生产环境统一 |
45 jhsea3do 2017-09-08 10:53:46 +08:00 开发环境好像不能统一的,你用 IDE,他用 VIM,我用 SUBLIME ? 你用 WIN,我用 LINUX,他用 MAC,除非大家都是做 Linux Server 端开发,另外库版本依赖用私服解决。 DOCKER 主要是加快迭代速度, 让各位高效(累死)的更新。 以前做一次集成测试的环境部署要开发和运维开会才能做的,现在运维把发布的开关交给开发,整坏了随时重来。 |
46 zhouyou457 2017-09-08 11:34:21 +08:00 最多统一一下使用的 IDE 和环境变量,为啥要全部统一,一个新人连个环境都搭不好还开发啥,除非直接上来就要求做东西,不然试用三个月是干啥的,就是让他熟悉环境和开发节奏的啊。。非得像个保姆一样什么都给他准备好了再开发嘛。。这对公司对新人都不好吧,, |
47 aleung 2017-09-08 12:46:42 +08:00 via Android 你们说开发环境不能统一,是你们还没有做到这个程度 |