实在没理解 docker 或 vagrant 是怎么统一 [开发] 环境的

2017-09-06 23:28:12 +08:00
 only0jac

网上搜的博客帖子,都说可以解决开发环境统一的问题

比如,公司新来了个员工,通过 docker 可以很快把他的电脑环境弄成和其他人一样的,不需要再去安装 sdk 之类

我疑问的是,假如我们是在 windows 下做 python web 开发

用 docker 的话,我将 python 的安装包和相应的库( flask django 等)打包进 docker,那别人是不是直接使用我这个镜像就可以有和我一样的开发环境?

他是不是不用再在电脑上装 python 的安装包和相应库了?

如果不用的话,他用 pycharm 等工具,怎么本地运行这个 web 项目? pycharm 的运行是需要配置 py 的安装路径吧?

如果后期我又安装了一个库,比如 requests,很小,他是不是又得更新 docker 镜像?

谢谢大家

9553 次点击
所在节点    程序员
48 条回复
PythonAnswer
2017-09-07 08:57:55 +08:00
开发环境还是 linux 配 docker 爽。
liuxu
2017-09-07 08:57:55 +08:00
你就把他们想象成打包好的 ghost 系统吧
JingW
2017-09-07 09:38:04 +08:00
是是,Docker 似乎解决的是开发时把整个系统运行起来的问题
但是 IDE 还是在 windows 里面啊,为了 IDE 正常工作,一定还要再装一套东西在系统里吧?这个问题似乎不是 docker 或者 vagrant 打算解决的?
only0jac
2017-09-07 10:15:56 +08:00
@UnisandK 还能这样……那岂不是直接可以本地运行 docker 中的 py 程序了?多谢

@7654 系管是系统管理员么……

@liuxu ghost,那我能把 pycharm 打包进去吗,2333

@PythonAnswer 本地开发时使用 docker,部署到服务器也需要吗 docker 吗,如果是的话能否不用?毕竟小内存
7654
2017-09-07 10:19:41 +08:00
@only0jac #24 就是系统管理员,IT 运维及桌面支持部门
liuxu
2017-09-07 10:30:09 +08:00
@only0jac
可以,你要是给系统装了桌面,用 vnc 链接,vagrant 就是 vbox 系统镜像
PythonAnswer
2017-09-07 10:34:21 +08:00
@only0jac docker 做分发比较好. 你服务器不想跑 docker, 那就只用 vagrant 即可.
hronro
2017-09-07 10:47:05 +08:00
想用 Docker,就别用 windows 做开发了吧,换 mac 或者 Linux。
fy
2017-09-07 11:13:09 +08:00
docker 做什么开发环境统一,就不是用来干这个的。
vagrant 好多了,占用资源也很低
fy
2017-09-07 11:13:48 +08:00
然后 mac 下 docker 和 win 貌似一样也是先要跑一个虚拟机好像,2333
bk201
2017-09-07 14:09:32 +08:00
环境都一样了,怎么踩坑成长(雾
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 服务
aleung
2017-09-07 19:29:27 +08:00
正好刚写了一篇博客,讲我们是怎样基于 docker 创建统一开发环境的。我这儿是用 node.js ,但其他的环境也是可以一样弄的。https://aleung.github.io/blog/2017/09/07/docker-dev-env/
aleung
2017-09-07 19:29:59 +08:00
only0jac
2017-09-07 20:59:53 +08:00
@aleung 感谢,不过有个地方不明白,最后那里

将源代码 git clone 的本地目录,里面包括了定义 docker 环境的 docker-compose.yml 和定义 node.js 项目的 package.json。

代码克隆到本地,能通过 docker 中的环境运行?
param
2017-09-08 01:58:43 +08:00
我去,我给楼主写了一大堆,提交之后不见了。。??
param
2017-09-08 02:01:08 +08:00
从新开始写。这里很多人忽略了 docker register 的角色,其实实现高效的工作流需要配合 ci 服务器。
param
2017-09-08 02:05:06 +08:00
多数时候不需要手动执行 docker build 来构建镜像,而是让 ci 服务器来操作。你的项目使用 git 来管理,当你写完代码 git push 到远端后,ci 服务器便会自动对你的版本进行测试、编译等工作,最后让 ci 服务器来执行 docker build 构建出相应版本的 docker 镜像。需要为每个版本构建一个 docker 镜像,之后要部署的时候,爱部署哪个版本就用哪个比较的镜像。
param
2017-09-08 02:09:00 +08:00
ci 服务器构建出一个镜像之后要 docker push 到 docker register。
在开发时,如果不想再开发机上安装运行环境,可以直接把项目源码 clone 下来,同时把镜像也 pull 下来,再把源码目录挂载进镜像里面。假如你需要发送 requests 请求,那么你的 requests 这个库安装在 docker 镜像里面,而真正执行发送请求逻辑的项目代码直接放在宿主机上并挂载进 docker 镜像里。pycharm 已经支持直接使用 docker 镜像里的 Python 库。
param
2017-09-08 02:12:07 +08:00
至于,你往项目里添加了 requests 库后,你的同事是否需要更新镜像?答案是肯定的。当你把 requests 添加到 requirements.txt ,把代码 git push 到远端后,ci 服务器会构建出一个含有 requests 库的 docker 镜像,之后 ci 服务器把这个镜像 docker push 到 docker registry,这时你的同事只需要 docker pull,几秒便可更新完镜像。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/388777

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX