网上搜的博客帖子,都说可以解决开发环境统一的问题
比如,公司新来了个员工,通过 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 1
|
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 1
你要用 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 2
@only0jac 别不信。。。vagrant 就是给你一个脚本,让你控制怎么从虚拟机镜像开始一步一步构建出目标环境,然后让你在虚拟机里开发,所谓的 docker 能统一开发环境也是一样,把开发工具都打包到 docker 镜像里,然后把代码挂载到容器里,用镜像里打包好的工具开发
|
13
PythonAnswer 2017-09-07 01:19:54 +08:00
不喜欢在 ide 里跑东西。ide 主要搞搞调试、重构什么的。
|
14
orderc 2017-09-07 01:55:11 +08:00 1
在 windows 下做开发,但是在 Linux 下运行程序。
|
15
popbones 2017-09-07 06:25:26 +08:00 1
我是这样的,比如我写个 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 2
docker 是用来 scale 的,vagrant 做开发环境更合适。
|
18
only0jac OP |
19
UnisandK 2017-09-07 08:43:10 +08:00 2
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 2
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 1
正好刚写了一篇博客,讲我们是怎样基于 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 1
我去,我给楼主写了一大堆,提交之后不见了。。??
|
37
param 2017-09-08 02:01:08 +08:00 via Android 1
从新开始写。这里很多人忽略了 docker register 的角色,其实实现高效的工作流需要配合 ci 服务器。
|
38
param 2017-09-08 02:05:06 +08:00 via Android 1
多数时候不需要手动执行 docker build 来构建镜像,而是让 ci 服务器来操作。你的项目使用 git 来管理,当你写完代码 git push 到远端后,ci 服务器便会自动对你的版本进行测试、编译等工作,最后让 ci 服务器来执行 docker build 构建出相应版本的 docker 镜像。需要为每个版本构建一个 docker 镜像,之后要部署的时候,爱部署哪个版本就用哪个比较的镜像。
|
39
param 2017-09-08 02:09:00 +08:00 via Android 1
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 2
至于,你往项目里添加了 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 1
@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
你们说开发环境不能统一,是你们还没有做到这个程度
|