实在没理解 docker 或 vagrant 是怎么统一 [开发] 环境的 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
only0jac
V2EX    程序员

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

  •  
  •   only0jac 2017-09-06 23:28:12 +08:00 10039 次点击
    这是一个创建于 3007 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

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

    谢谢大家

    48 条回复    2017-09-08 15:13:34 +08:00
    terry0314
        1
    terry0314  
       2017-09-06 23:37:27 +08:00   1
    JamesPan
        2
    JamesPan  
       2017-09-06 23:43:33 +08:00
    先把编译器什么的放到镜像里,这样子就统一了构建工具链;然后把 Vim/Emacs 放到镜像里,就统一了开发工具链(逃
    songdezu
        3
    songdezu  
       2017-09-06 23:50:44 +08:00
    docker 在 windows 上要虚拟机吧, 占大量内存性能又烂, 新人来了还是老实让他配置和你相同的环境安装依赖包 本机开发吧
    heimeil
        4
    heimeil  
       2017-09-06 23:53:35 +08:00 via Android
    开发的统一靠的是版本管理工具,将 Dockerfile 加入版本管理,所有的系统依赖都在 Dockerfile 中配置,代码肯定要统一,Dockerfile 也就统一了,Docker 镜像也就统一了。
    binux
        5
    binux  
       2017-09-06 23:56:35 +08:00
    从来没有从 IDE 中运行过程序
    only0jac
        6
    only0jac  
    OP
       2017-09-06 23:59:30 +08:00
    @JamesPan 老哥……

    @terry0314 谢谢,这样的话,运行岂不是运行在 docker 里?要更新的话岂不是更麻烦br />
    @songdezu 目前有这种感觉,win10 不需要虚拟机,只是感觉配置起来的麻烦程度,不如配个开发环境

    @heimeil 开发的统一靠的是版本管理工具???不太理解
    only0jac
        7
    only0jac  
    OP
       2017-09-07 00:00:50 +08:00
    @binux 因为 pycharm 等 ide 工具栏就直接有个运行按钮,多方便,总比自己去控制台下输入 python xxx.py 强吧?
    wenzhoou
        8
    wenzhoou  
       2017-09-07 00:16:32 +08:00 via Android
    同样想知道。
    changnet
        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。
    yuanfnadi
        10
    yuanfnadi  
       2017-09-07 00:55:10 +08:00
    @JamesPan 活捉。催更。都快 2 个月没更新了。(逃
    JamesPan
        11
    JamesPan  
       2017-09-07 01:00:56 +08:00
    @yuanfnadi 在写了在写了,这两天发
    JamesPan
        12
    JamesPan  
       2017-09-07 01:07:52 +08:00   2
    @only0jac 别不信。。。vagrant 就是给你一个脚本,让你控制怎么从虚拟机镜像开始一步一步构建出目标环境,然后让你在虚拟机里开发,所谓的 docker 能统一开发环境也是一样,把开发工具都打包到 docker 镜像里,然后把代码挂载到容器里,用镜像里打包好的工具开发
    PythonAnswer
        13
    PythonAnswer  
       2017-0907 01:19:54 +08:00
    不喜欢在 ide 里跑东西。ide 主要搞搞调试、重构什么的。
    orderc
        14
    orderc  
       2017-09-07 01:55:11 +08:00   1
    在 windows 下做开发,但是在 Linux 下运行程序。
    popbones
        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 进程调试,不过真心何苦呢。
    carlclone
        16
    carlclone  
       2017-09-07 07:11:13 +08:00 via Android
    自己用一遍就知道了。。。不是什么高深的东西
    songjiaxin2008
        17
    songjiaxin2008  
       2017-09-07 07:50:22 +08:00 via iPhone   2
    docker 是用来 scale 的,vagrant 做开发环境更合适。
    only0jac
        18
    only0jac  
    OP
       2017-09-07 08:28:20 +08:00 via Android
    @changnet mysql 之类的我们用测试服务器,那这样的话还不如直接安装个 sdk,在安装库文件,这样更省事

    @JamesPan 这对大工程来说很方便,对个人项目似乎有点杀鸡用牛刀了

    @popbones 感觉项目小的话是不是就没必要这么折腾了
    UnisandK
        19
    UnisandK  
       2017-09-07 08:43:10 +08:00   2
    Pycharm 配置 Python 安装路径的时候不是有 docker 和 vagrant 的支持吗

    7654
        20
    7654  
       2017-09-07 08:51:37 +08:00
    哈哈,我们的系管直接封装了 Win 系统,输入域帐号开箱即用
    PythonAnswer
        21
    PythonAnswer  
       2017-09-07 08:57:55 +08:00 via Android
    开发环境还是 linux 配 docker 爽。
    liuxu
        22
    liuxu  
       2017-09-07 08:57:55 +08:00
    你就把他们想象成打包好的 ghost 系统吧
    JingW
        23
    JingW  
       2017-09-07 09:38:04 +08:00
    是是,Docker 似乎解决的是开发时把整个系统运行起来的问题
    但是 IDE 还是在 windows 里面啊,为了 IDE 正常工作,一定还要再装一套东西在系统里吧?这个问题似乎不是 docker 或者 vagrant 打算解决的?
    only0jac
        24
    only0jac  
    OP
       2017-09-07 10:15:56 +08:00 via Android
    @UnisandK 还能这样……那岂不是直接可以本地运行 docker 中的 py 程序了?多谢

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

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

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

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

    代码克隆到本地,能通过 docker 中的环境运行?
    param
        36
    param  
       2017-09-08 01:58:43 +08:00 via Android   1
    我去,我给楼主写了一大堆,提交之后不见了。。??
    param
        37
    param  
       2017-09-08 02:01:08 +08:00 via Android   1
    从新开始写。这里很多人忽略了 docker register 的角色,其实实现高效的工作流需要配合 ci 服务器。
    param
        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 镜像,之后要部署的时候,爱部署哪个版本就用哪个比较的镜像。
    param
        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 库。
    param
        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,几秒便可更新完镜像。
    aleung
        41
    aleung  
       2017-09-08 08:54:48 +08:00 via Android   1
    @only0jac 代码目录是 mount 到容器的 volume 里的,在容器里的路径是 /project
    only0jac
        42
    only0jac  
    OP
       2017-09-08 09:12:26 +08:00
    @param 多谢,这么一说 docker 确实效率高,可前提是还要配置好一系列的工作流是吧,没太接触过 ci 服务器,我也很想能 git push 了能自动更细,现在只会自动 check out 源码,得好好学学了,请问下如果个人项目想要搭建一个方便的工作流,比如,我本地 git push 后,除了你说的那些,还能在正式服务器上自动更新到最新版本并重启服务,这种有什么简洁的资料吗?十分感谢!

    @aleung 多谢,明白了:)
    mritd
        43
    mritd  
       2017-09-08 09:57:34 +08:00 via iPhone
    没见过所谓的 docker 统一开发环境的,不知道这种说法从哪出来了,感觉有点逗,docker 主要是用来做微服务的,同时它可以统一测试环境与生产环境,一般用 docker 的上层肯定有编排工具,比如 k8s swarm mesos dcos 啥的,所谓的统一开发环境就别逗了,除非你开发全是 linux,然后全 vim 开发
    mritd
        44
    mritd  
       2017-09-08 10:01:23 +08:00 via iPhone
    还有 docker 在 ci 这一块还不错,譬如 gitlabci 在 build 不同项目的时候可以使用不同的基础镜像,方便切换 build 环境,docker 出现以后,传统交付物从代码或者编译后的 部署文件如 jar 包等变成了 docker 镜像,所有的发布部署都基于镜像,镜像内包含运行环境,从而实现测试生产环境统一
    jhsea3do
        45
    jhsea3do  
       2017-09-08 10:53:46 +08:00
    开发环境好像不能统一的,你用 IDE,他用 VIM,我用 SUBLIME ? 你用 WIN,我用 LINUX,他用 MAC,除非大家都是做 Linux Server 端开发,另外库版本依赖用私服解决。

    DOCKER 主要是加快迭代速度, 让各位高效(累死)的更新。

    以前做一次集成测试的环境部署要开发和运维开会才能做的,现在运维把发布的开关交给开发,整坏了随时重来。
    zhouyou457
        46
    zhouyou457  
       2017-09-08 11:34:21 +08:00
    最多统一一下使用的 IDE 和环境变量,为啥要全部统一,一个新人连个环境都搭不好还开发啥,除非直接上来就要求做东西,不然试用三个月是干啥的,就是让他熟悉环境和开发节奏的啊。。非得像个保姆一样什么都给他准备好了再开发嘛。。这对公司对新人都不好吧,,
    aleung
        47
    aleung  
       2017-09-08 12:46:42 +08:00 via Android
    你们说开发环境不能统一,是你们还没有做到这个程度
    param
        48
    param  
       2017-09-08 15:13:34 +08:00 via Android
    @only0jac docker hub 实际上支持自动 build,它可以监视 GitHub 和 bitbucket,当你提交代码之后可以自动 build 出镜像并发布在 docker hub。如果不喜欢用 docker hub 也可以用第三方的服务或者自己搭建。至于部署,我觉得在生产服务器上还是应该手动部署,测试服务器上可以自动部署。docker hub 支持在 build 出镜像后发出通知到你的服务器上,你的服务器接收到通知就更新镜像就行了。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5050 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 39ms UTC 09:34 PVG 17:34 LAX 01:34 JFK 04:34
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86