由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 又被docker害了
相关主题
Vagrant v.s. Docker有人用docker deploy node app吗?
docker的newbie 问题有谁用过NixOs?
请教移动开发的framework问题问个docker做pipeline的基础问题
linux怎么快速重装系统保持原来的配置?scala的ide版本号已经上3冲4了
安装了floydhub的dl dockerfile,然后import pandas就挂掉了,靠is it possible to design a zero miss rate cache?
docker和vagrant的异同是啥,大家都用哪个实时进程间通讯问题
vagrant很不错C++ 的 exception handling
docker的致命缺陷浮点数运算等于0的问题
相关话题的讨论汇总
话题: docker话题: dockerfile话题: nix话题: linux话题: image
进入Programming版参与讨论
1 (共1页)
w***g
发帖数: 5958
1
好好的在看电视剧,LD重新make了一个docker,然后pip还是github上软件升级了,
全都screw up。现在没法看剧了。以后dockerfile凡是想reproduce的,一律都得
加上软件版本号,最好把package全都下到本地。
我自己也被同一个问题害过。搞一次比赛,还没完,中间tensorflow升级了,
theano升级了,scikit-image也升级了,升级跟赶投胎似的。日子没法过了。
h*i
发帖数: 3446
2
这就是为啥企业用Java。
用docker就得每个东东都具体到版本号吧,都用latest的话, 还用docker干嘛?

【在 w***g 的大作中提到】
: 好好的在看电视剧,LD重新make了一个docker,然后pip还是github上软件升级了,
: 全都screw up。现在没法看剧了。以后dockerfile凡是想reproduce的,一律都得
: 加上软件版本号,最好把package全都下到本地。
: 我自己也被同一个问题害过。搞一次比赛,还没完,中间tensorflow升级了,
: theano升级了,scikit-image也升级了,升级跟赶投胎似的。日子没法过了。

w***g
发帖数: 5958
3
自己混的没人教,这种事情都是吃过亏了才知道。不过python应该没有
java那种版本系统,无法做到多版本并存吧。这样哪天要装一个新的包,
不还得一堆依赖问题?

【在 h*i 的大作中提到】
: 这就是为啥企业用Java。
: 用docker就得每个东东都具体到版本号吧,都用latest的话, 还用docker干嘛?

a****a
发帖数: 5763
4

python有 env 吧,可以多版本并存

【在 w***g 的大作中提到】
: 自己混的没人教,这种事情都是吃过亏了才知道。不过python应该没有
: java那种版本系统,无法做到多版本并存吧。这样哪天要装一个新的包,
: 不还得一堆依赖问题?

d********g
发帖数: 10550
5
一看就是没做过CI的……

【在 w***g 的大作中提到】
: 好好的在看电视剧,LD重新make了一个docker,然后pip还是github上软件升级了,
: 全都screw up。现在没法看剧了。以后dockerfile凡是想reproduce的,一律都得
: 加上软件版本号,最好把package全都下到本地。
: 我自己也被同一个问题害过。搞一次比赛,还没完,中间tensorflow升级了,
: theano升级了,scikit-image也升级了,升级跟赶投胎似的。日子没法过了。

d********g
发帖数: 10550
6
(venv)$ pip freeze > requirements.txt
喷之前可不可以Google下蛤蛤

【在 w***g 的大作中提到】
: 自己混的没人教,这种事情都是吃过亏了才知道。不过python应该没有
: java那种版本系统,无法做到多版本并存吧。这样哪天要装一个新的包,
: 不还得一堆依赖问题?

t**r
发帖数: 3428
7
docker就是一个垃圾。
趁早别用
h*i
发帖数: 3446
8
其实Java也不能完全避免版本依赖问题,不过Java毕竟就一个标准的虚拟机,而且是向
下兼容性很好,依赖问题比任何native技术都要少太多了。Java在企业应用上的支配地
位不是白来的。

【在 w***g 的大作中提到】
: 自己混的没人教,这种事情都是吃过亏了才知道。不过python应该没有
: java那种版本系统,无法做到多版本并存吧。这样哪天要装一个新的包,
: 不还得一堆依赖问题?

d*******r
发帖数: 3299
9
"dockerfile reproduce" 你是指每次重新build一下以前的dockerfile来做image么?
为什么不直接存 docker image, push到public/private docker registry里,
然后每次用的时候 pull 下来?

【在 w***g 的大作中提到】
: 好好的在看电视剧,LD重新make了一个docker,然后pip还是github上软件升级了,
: 全都screw up。现在没法看剧了。以后dockerfile凡是想reproduce的,一律都得
: 加上软件版本号,最好把package全都下到本地。
: 我自己也被同一个问题害过。搞一次比赛,还没完,中间tensorflow升级了,
: theano升级了,scikit-image也升级了,升级跟赶投胎似的。日子没法过了。

L****8
发帖数: 3938
10
我用这个 https://www.continuum.io
多个版本python并存 感觉很好用
https://www.continuum.io/blog/developer-blog/anaconda-and-docker-better-
together-reproducible-data-science
docker 学习了半天 感觉还是得手动配置dockerfile

【在 w***g 的大作中提到】
: 好好的在看电视剧,LD重新make了一个docker,然后pip还是github上软件升级了,
: 全都screw up。现在没法看剧了。以后dockerfile凡是想reproduce的,一律都得
: 加上软件版本号,最好把package全都下到本地。
: 我自己也被同一个问题害过。搞一次比赛,还没完,中间tensorflow升级了,
: theano升级了,scikit-image也升级了,升级跟赶投胎似的。日子没法过了。

相关主题
docker和vagrant的异同是啥,大家都用哪个有人用docker deploy node app吗?
vagrant很不错有谁用过NixOs?
docker的致命缺陷问个docker做pipeline的基础问题
进入Programming版参与讨论
h*i
发帖数: 3446
11
对大多数老百姓,docker最主要的好处,就是可以直接用别人的image,不用自己装了
,试用各种高大上的服务器软件的壁垒被降低了很多。大多数人没这个精力和经验去成
功装好这些东西。VM又太笨重,所以docker就火了。

【在 L****8 的大作中提到】
: 我用这个 https://www.continuum.io
: 多个版本python并存 感觉很好用
: https://www.continuum.io/blog/developer-blog/anaconda-and-docker-better-
: together-reproducible-data-science
: docker 学习了半天 感觉还是得手动配置dockerfile

a*****e
发帖数: 1700
12
彻底解决依赖与软件配置问题,Nix 或者 NixOS,你值得拥有!
k****i
发帖数: 101
13
不指定那只能用default
天下乌雅一般黑

:好好的在看电视剧,LD重新make了一个docker,然后pip还是github上软件升级了,
:全都screw up。现在没法看剧了。以后dockerfile凡是想reproduce的,一律都得
w***g
发帖数: 5958
14
你这个我早用过。但是这个不是写dockerfile的common practice。
照喷不误。
证据如下:
https://github.com/tensorflow/tensorflow/blob/master/tensorflow/tools/docker
/Dockerfile
过几年再来make这个dockerfile,很可能也会失败。

【在 d********g 的大作中提到】
: (venv)$ pip freeze > requirements.txt
: 喷之前可不可以Google下蛤蛤

s***o
发帖数: 2191
15
你是因为一定要用docker所以才用docker,还是docker的确帮你解决了很多问题?
w********m
发帖数: 1137
16
storage贵,带宽也贵

【在 d*******r 的大作中提到】
: "dockerfile reproduce" 你是指每次重新build一下以前的dockerfile来做image么?
: 为什么不直接存 docker image, push到public/private docker registry里,
: 然后每次用的时候 pull 下来?

w***g
发帖数: 5958
17
docker有一个非常重要的好处,就是保存的不光是一个image,而且保留了
产生这个image的recipe。另外docker用起来也比较方便。
还有,nvidia-docker能够包装GPU。
至于省资源,这个也好,但是我觉得不是决定性因素。

【在 s***o 的大作中提到】
: 你是因为一定要用docker所以才用docker,还是docker的确帮你解决了很多问题?
N*****m
发帖数: 42603
18
你也是老鸟了。你不搞版本控制?
每个源代码的版本对应一个docker image的版本。

【在 w***g 的大作中提到】
: 好好的在看电视剧,LD重新make了一个docker,然后pip还是github上软件升级了,
: 全都screw up。现在没法看剧了。以后dockerfile凡是想reproduce的,一律都得
: 加上软件版本号,最好把package全都下到本地。
: 我自己也被同一个问题害过。搞一次比赛,还没完,中间tensorflow升级了,
: theano升级了,scikit-image也升级了,升级跟赶投胎似的。日子没法过了。

N*****m
发帖数: 42603
19
因为他们有版本控制啊
https://hub.docker.com/r/tensorflow/tensorflow/tags/
当然无所谓

docker

【在 w***g 的大作中提到】
: 你这个我早用过。但是这个不是写dockerfile的common practice。
: 照喷不误。
: 证据如下:
: https://github.com/tensorflow/tensorflow/blob/master/tensorflow/tools/docker
: /Dockerfile
: 过几年再来make这个dockerfile,很可能也会失败。

N*****m
发帖数: 42603
20
自己local开一个,docker registry自己就有image,在nas上跑一个好了。

【在 w********m 的大作中提到】
: storage贵,带宽也贵
相关主题
scala的ide版本号已经上3冲4了C++ 的 exception handling
is it possible to design a zero miss rate cache?浮点数运算等于0的问题
实时进程间通讯问题微软又大转弯
进入Programming版参与讨论
w***g
发帖数: 5958
21
我没说清。你看Dockerfile里这一行:
RUN pip --no-cache-dir install \
ipykernel \
jupyter \
matplotlib \
numpy \
scipy \
sklearn \
pandas \
Pillow \
&& \
python -m ipykernel.kernelspec
所有用pip装的包都不带版本号。比如sklearn以后升级了换了API,
那么这个Dockerfile就废了。
我觉得版本控制解决不了这个问题。请帮我看一眼。

【在 N*****m 的大作中提到】
: 因为他们有版本控制啊
: https://hub.docker.com/r/tensorflow/tensorflow/tags/
: 当然无所谓
:
: docker

N*****m
发帖数: 42603
22
我是说,docker image带版本tags。
所以他们用latest package不行也没关系,rollback到上一个image就行了。
当然,我自己写Dockerfile,里面都带版本的。

【在 w***g 的大作中提到】
: 我没说清。你看Dockerfile里这一行:
: RUN pip --no-cache-dir install \
: ipykernel \
: jupyter \
: matplotlib \
: numpy \
: scipy \
: sklearn \
: pandas \
: Pillow \

w***g
发帖数: 5958
23
我们后来的解决办法就是虽然dockerfile废了,但是image还在,
所以直接from那个image接着改。是不是就是这个意思?

【在 N*****m 的大作中提到】
: 我是说,docker image带版本tags。
: 所以他们用latest package不行也没关系,rollback到上一个image就行了。
: 当然,我自己写Dockerfile,里面都带版本的。

N*****m
发帖数: 42603
24
对的。这也是docker的好处之一。

【在 w***g 的大作中提到】
: 我们后来的解决办法就是虽然dockerfile废了,但是image还在,
: 所以直接from那个image接着改。是不是就是这个意思?

n******7
发帖数: 12463
25
但是这样别人无法reproduce你的image
这对别人就是个黑箱了

【在 N*****m 的大作中提到】
: 对的。这也是docker的好处之一。
N*****m
发帖数: 42603
26
本来就是直接拿image用的。
最好还是在源码里加版本。

【在 n******7 的大作中提到】
: 但是这样别人无法reproduce你的image
: 这对别人就是个黑箱了

m***b
发帖数: 30
27
python 不是很熟
pip dependency 放到 requirements.txt 里, 不能加上版本号?
这个不是 docker 的问题,是 pip 的问题。

【在 w***g 的大作中提到】
: 我没说清。你看Dockerfile里这一行:
: RUN pip --no-cache-dir install \
: ipykernel \
: jupyter \
: matplotlib \
: numpy \
: scipy \
: sklearn \
: pandas \
: Pillow \

N*****m
发帖数: 42603
28
卫东的意思是这个Dockerfile写得不好。
其实卫东可以docker exec到上一个版本的tensorflow,用pip freeze拿到各个package
的版本号

【在 m***b 的大作中提到】
: python 不是很熟
: pip dependency 放到 requirements.txt 里, 不能加上版本号?
: 这个不是 docker 的问题,是 pip 的问题。

r***y
发帖数: 4379
29
不能同意更多
dev, test 环境一致避免扯皮是另一个主要好处
product 环境也保持一致的项目也见过不少

【在 h*i 的大作中提到】
: 对大多数老百姓,docker最主要的好处,就是可以直接用别人的image,不用自己装了
: ,试用各种高大上的服务器软件的壁垒被降低了很多。大多数人没这个精力和经验去成
: 功装好这些东西。VM又太笨重,所以docker就火了。

d*******r
发帖数: 3299
30
我一直觉得只有用image是标准的可靠方法,dockerfile当辅助文档用.
怕操作image太慢太大, 自己就做个private的docker registry.
相关主题
再问个fork的题 (转载)docker的newbie 问题
looking for summer interns (转载)请教移动开发的framework问题
Vagrant v.s. Dockerlinux怎么快速重装系统保持原来的配置?
进入Programming版参与讨论
i******e
发帖数: 24
31
pip 能控制版本号吧。
容我喷一句:
这就是为啥软件工程得控制复杂度,连wdong 这样的大牛也不愿意仔细看文档。

【在 w***g 的大作中提到】
: 我没说清。你看Dockerfile里这一行:
: RUN pip --no-cache-dir install \
: ipykernel \
: jupyter \
: matplotlib \
: numpy \
: scipy \
: sklearn \
: pandas \
: Pillow \

w**z
发帖数: 8232
32
这种故事天天都在发生。

【在 i******e 的大作中提到】
: pip 能控制版本号吧。
: 容我喷一句:
: 这就是为啥软件工程得控制复杂度,连wdong 这样的大牛也不愿意仔细看文档。

l*******m
发帖数: 1096
33
是的。pip install pkg==version

【在 i******e 的大作中提到】
: pip 能控制版本号吧。
: 容我喷一句:
: 这就是为啥软件工程得控制复杂度,连wdong 这样的大牛也不愿意仔细看文档。

n*****3
发帖数: 1584
34
大牛 all 不愿意仔细看文档。

在 inorange (orange) 的大作中提到: 】
w***g
发帖数: 5958
35
我知道requirements.txt。但是我以前用requirements.txt装软件的时候也
碰到过坑。 比如这个
https://github.com/aaalgo/centos7-deep
现在很可能就跑不起来。而pip install pkg==version又很麻烦,因为开发的时候
肯定是对着当前版本开发的,只是测试完了需要记一下当前的版本号。
我觉得可能还真是只有存image是最靠谱的做法。毕竟pip install网上的东西还是
有可能失败。

【在 l*******m 的大作中提到】
: 是的。pip install pkg==version
d********g
发帖数: 10550
36
最简单的道理:做开发和部署稳定不稳定其实不是最重要问题。最重要的问题是需要一
个可预测的环境,也就是可重现的环境。有了可预测和重现的环境才能谈稳定不稳定,
否则都是扯蛋
整个生态系统有各种不同的方案。OS级别各种有release的distro是一种方案,把OS放
VPS做成OS image是一种方案,再细化一点Docker这样的container做到app image也是
一种方案
在app级别,pip是所谓“源码级”锁定。有不少requirements.txt只写了最直接的lib
,dependencies都不管,这样的锁定是锁了白锁
你说的这些所谓坑在正经的公司都不是什么问题,这些都是infra/ops天天干的事情。
pip install也不会从网上直接download,CI的build可以先下到cache再一起打包,部
署的时候都是从local取不需要走网络,减少出错可能性。当然直接用Docker更容易
Docker这样的傻瓜工具好是好,但一定要建立在知其然的基础上,否则更坑。为啥我一
直推Arch Linux和FreeBSD?能搞定Arch Linux的人绝对不会在Ubuntu这种大路货上踩
坑,而体验过FreeBSD这种base和app清晰分离架构的人再也不愿意回到大多数有所谓
release系统但是什么乱七八糟都一锅炖的Linux distro的恶心世界里。CentOS更是垃
圾得不能再垃圾的末流货

【在 w***g 的大作中提到】
: 我知道requirements.txt。但是我以前用requirements.txt装软件的时候也
: 碰到过坑。 比如这个
: https://github.com/aaalgo/centos7-deep
: 现在很可能就跑不起来。而pip install pkg==version又很麻烦,因为开发的时候
: 肯定是对着当前版本开发的,只是测试完了需要记一下当前的版本号。
: 我觉得可能还真是只有存image是最靠谱的做法。毕竟pip install网上的东西还是
: 有可能失败。

d*******r
发帖数: 3299
37
从大牛对 Arch Linux, FreeBSD, Linux distro, CentOS 的评价来看
你是控制狂,哈哈哈... 像我等整不动 Arch 的菜鸟, 还是继续用 ubuntu 算了...
没想到对 FreeBSD 一支的评价这么高.
不过它协议好, 所以有些公司用在自己device上, 比如Mac,还有有些NAS

lib

【在 d********g 的大作中提到】
: 最简单的道理:做开发和部署稳定不稳定其实不是最重要问题。最重要的问题是需要一
: 个可预测的环境,也就是可重现的环境。有了可预测和重现的环境才能谈稳定不稳定,
: 否则都是扯蛋
: 整个生态系统有各种不同的方案。OS级别各种有release的distro是一种方案,把OS放
: VPS做成OS image是一种方案,再细化一点Docker这样的container做到app image也是
: 一种方案
: 在app级别,pip是所谓“源码级”锁定。有不少requirements.txt只写了最直接的lib
: ,dependencies都不管,这样的锁定是锁了白锁
: 你说的这些所谓坑在正经的公司都不是什么问题,这些都是infra/ops天天干的事情。
: pip install也不会从网上直接download,CI的build可以先下到cache再一起打包,部

d********g
发帖数: 10550
38
CentOS这种垃圾系统的逻辑很有问题
默认repo软件不够多 ==> 开3rd-party repo / 自己编译 ==> 不就好了?
这尼玛啥都要自己编译了裸装野包了,还谈屁的安全和稳定。distro的意义就在于系统
性的打包和测试,同时很重要一点,系统一定是可预测和可重现的。一旦有野包进入系
统就白瞎了,况且小白太多,质量实在不忍直视
CentOS就是Linux界最大的笑话。RHEL不同是人家有付费支持,花钱消灾
Linux distro里Arch Linux的wiki质量最高。AUR这种社区混血包都甩CentOS/Debian/
Ubuntu的第三方野包几万条街
FreeBSD真是极乐世界。FreeBSD从发行模式上来说就是*nix界的Windows,OS和app分离

【在 d*******r 的大作中提到】
: 从大牛对 Arch Linux, FreeBSD, Linux distro, CentOS 的评价来看
: 你是控制狂,哈哈哈... 像我等整不动 Arch 的菜鸟, 还是继续用 ubuntu 算了...
: 没想到对 FreeBSD 一支的评价这么高.
: 不过它协议好, 所以有些公司用在自己device上, 比如Mac,还有有些NAS
:
: lib

w***g
发帖数: 5958
39
我用过差不多两年arch。后来有一次更新了以后整个系统都破了。
人到了一定岁数,就不想折腾了。我现在想得就是怎么搞点deep
learning技术卖点钱,最近连目录都懒得整理了。Docker这种
东西,说实在不是来钱的那个技术层次,如果不是有immediate
needs,不值得细看。
我真正在意的核心技术,都是编译成一个static binary,放任何
2.6以上的linux上都能跑。windows 10也能跑。

【在 d*******r 的大作中提到】
: 从大牛对 Arch Linux, FreeBSD, Linux distro, CentOS 的评价来看
: 你是控制狂,哈哈哈... 像我等整不动 Arch 的菜鸟, 还是继续用 ubuntu 算了...
: 没想到对 FreeBSD 一支的评价这么高.
: 不过它协议好, 所以有些公司用在自己device上, 比如Mac,还有有些NAS
:
: lib

d********g
发帖数: 10550
40
你的需求就是一个可预测可重现的环境。Docker不是你这样用的,你把Docker用成了
script而已。换成类似的例子,好比你发布产品直接发布源码,然后抱怨不能跨平台,
不是每个用户拿去都能编译过

【在 w***g 的大作中提到】
: 我用过差不多两年arch。后来有一次更新了以后整个系统都破了。
: 人到了一定岁数,就不想折腾了。我现在想得就是怎么搞点deep
: learning技术卖点钱,最近连目录都懒得整理了。Docker这种
: 东西,说实在不是来钱的那个技术层次,如果不是有immediate
: needs,不值得细看。
: 我真正在意的核心技术,都是编译成一个static binary,放任何
: 2.6以上的linux上都能跑。windows 10也能跑。

相关主题
linux怎么快速重装系统保持原来的配置?vagrant很不错
安装了floydhub的dl dockerfile,然后import pandas就挂掉了,靠docker的致命缺陷
docker和vagrant的异同是啥,大家都用哪个有人用docker deploy node app吗?
进入Programming版参与讨论
c*********e
发帖数: 16335
41
ubuntu也是这样的,提示你要不要upgrade,手滑点了yes,马上就把php version, mysql
version都给upgrade了。灾难来了,很多东西都变了,有的不支持了,有的出错了。
。。

【在 w***g 的大作中提到】
: 好好的在看电视剧,LD重新make了一个docker,然后pip还是github上软件升级了,
: 全都screw up。现在没法看剧了。以后dockerfile凡是想reproduce的,一律都得
: 加上软件版本号,最好把package全都下到本地。
: 我自己也被同一个问题害过。搞一次比赛,还没完,中间tensorflow升级了,
: theano升级了,scikit-image也升级了,升级跟赶投胎似的。日子没法过了。

a*****e
发帖数: 1700
42
重要的事情说三遍:
Deterministic software configuration is a solved problem.
Reproducible Linux environment is a solved problem.
System upgrade with rollbacks is a solved problem.
答案就是 Nix 或者 NixOS.

【在 d********g 的大作中提到】
: 你的需求就是一个可预测可重现的环境。Docker不是你这样用的,你把Docker用成了
: script而已。换成类似的例子,好比你发布产品直接发布源码,然后抱怨不能跨平台,
: 不是每个用户拿去都能编译过

f**d
发帖数: 177
43
PIP LD

【在 w***g 的大作中提到】
: 好好的在看电视剧,LD重新make了一个docker,然后pip还是github上软件升级了,
: 全都screw up。现在没法看剧了。以后dockerfile凡是想reproduce的,一律都得
: 加上软件版本号,最好把package全都下到本地。
: 我自己也被同一个问题害过。搞一次比赛,还没完,中间tensorflow升级了,
: theano升级了,scikit-image也升级了,升级跟赶投胎似的。日子没法过了。

c********1
发帖数: 5269
44
pip install MySQL_python==1.2.2

【在 i******e 的大作中提到】
: pip 能控制版本号吧。
: 容我喷一句:
: 这就是为啥软件工程得控制复杂度,连wdong 这样的大牛也不愿意仔细看文档。

d*******r
发帖数: 3299
45
下午看wdong这帖子上十大了,mitbbs小编很潮啊,还知道docker...
d*******r
发帖数: 3299
46
我从来没玩过这个NixOS, 是你们PL大牛圈子设计的么?
nixos.org 登上去看, 好像以前的haskell网站

【在 a*****e 的大作中提到】
: 重要的事情说三遍:
: Deterministic software configuration is a solved problem.
: Reproducible Linux environment is a solved problem.
: System upgrade with rollbacks is a solved problem.
: 答案就是 Nix 或者 NixOS.

a*****e
发帖数: 1700
47
Nix 是一个纯函数语言,用来定制软件或者系统配置。因为无副作用,能够保证只要输
入(也就是依赖关系)不变,那么输出(可以理解为软件或者系统的安装)也不变。
Nix 同时也是一套基于 Linux 的软件包管理系统,类似 npm, apt 之类的意思。但
Nix 可以装到任何 Linux (还包括 Mac)系统上,甚至无需 root 权限。它管理的每
个软件包其实就是用 Nix 语言写好的表达式,然后提供命令行用于安装。它和其它系
统的软件包管理的主要区别是:
1. Nix 将每个软件安装到自己的独立目录,任何软件都可以多版本可以共存,没有冲
突。
2. 软件包的具体版本号其实是个 hash,是根据其源代码的 hash,编译的配置,和所
有依赖关系的 hash 算出来的。所以就算是同一个软件,比如 Python 3.6.1,如果它
的配置或者任何依赖的软件有所变化,那么就会产生一个新的完全独立的安装包。
3. 用户直接指定使用环境需要什么软件,Nix 保证所需软件都安装好,而且把 PATH
和相关的配置都设好。用户可以在不同环境下随意切换,且不会互相影响。这点对开发
非常方便,比如我需要把软件在不同版本的 Python 下做测试,只需要一个命令就可以
进入 sub-shell,目录都不用换。
这一整套的软件配置系统相当于一个用 Nix 语言写的库,保扩大部分常用和不常用的
Linux 软件的各个版本。然后 NixOS 就是以此为基础,用 Nix 语言描述 OS 和硬件配
置,就相当于一个 Linux distro,因为软件的安装结果相互不干扰,可以方便一键
rollback。再然后 NixOps 继续扩展到机器之间的配置,可以直接把集群 deploy 到
AWS 或者 Google Engine。
Nix 好用的地方就是它只是 specification,它的结果一定是 deterministic 和
reproducible,这种好处只有纯函数语言能够带来。像 Docker 这种还依赖版本号和
shell 脚本来做安装,永远也赶不上。当然 Nix 和 Docker 毕竟是两个层面的东西,
也不存在谁取代谁。我只是想说,软件硬件系统的配置方面,需要 Nix 这样的解决方
案。
对于普通 Linux 用户来说,大多数时候也不需要这么严格,其它系统用着就是个习惯
和偏好。普通用户就算是用 Nix 也主要是用它现成的包管理,一键安装什么的,命令
行敲敲好,也不会涉及深层次的东西。
而对于有这方面刚需的用户,还是要学习如何用 Nix 写自己的配置,如何把它提供的
软件配置库以更灵活的方式定制自己的环境或者系统。这当中的好处,谁用谁知道。我
用 Linux 做主力有 20 年了,从 Slackware 3.0 一路走过来的,用了 Nix 之后是无
法回去用其它的了。

【在 d*******r 的大作中提到】
: 我从来没玩过这个NixOS, 是你们PL大牛圈子设计的么?
: nixos.org 登上去看, 好像以前的haskell网站

w***g
发帖数: 5958
48
这么好的帖子别跟在这里埋没了.

【在 a*****e 的大作中提到】
: Nix 是一个纯函数语言,用来定制软件或者系统配置。因为无副作用,能够保证只要输
: 入(也就是依赖关系)不变,那么输出(可以理解为软件或者系统的安装)也不变。
: Nix 同时也是一套基于 Linux 的软件包管理系统,类似 npm, apt 之类的意思。但
: Nix 可以装到任何 Linux (还包括 Mac)系统上,甚至无需 root 权限。它管理的每
: 个软件包其实就是用 Nix 语言写好的表达式,然后提供命令行用于安装。它和其它系
: 统的软件包管理的主要区别是:
: 1. Nix 将每个软件安装到自己的独立目录,任何软件都可以多版本可以共存,没有冲
: 突。
: 2. 软件包的具体版本号其实是个 hash,是根据其源代码的 hash,编译的配置,和所
: 有依赖关系的 hash 算出来的。所以就算是同一个软件,比如 Python 3.6.1,如果它

N*****m
发帖数: 42603
49
不是一个范畴。卫东这个application-level的packaging。

【在 a*****e 的大作中提到】
: 重要的事情说三遍:
: Deterministic software configuration is a solved problem.
: Reproducible Linux environment is a solved problem.
: System upgrade with rollbacks is a solved problem.
: 答案就是 Nix 或者 NixOS.

e*******o
发帖数: 4654
50
试了一下,确实不错。至少在软件包管理比Ubuntu自带的领先一代。

【在 a*****e 的大作中提到】
: Nix 是一个纯函数语言,用来定制软件或者系统配置。因为无副作用,能够保证只要输
: 入(也就是依赖关系)不变,那么输出(可以理解为软件或者系统的安装)也不变。
: Nix 同时也是一套基于 Linux 的软件包管理系统,类似 npm, apt 之类的意思。但
: Nix 可以装到任何 Linux (还包括 Mac)系统上,甚至无需 root 权限。它管理的每
: 个软件包其实就是用 Nix 语言写好的表达式,然后提供命令行用于安装。它和其它系
: 统的软件包管理的主要区别是:
: 1. Nix 将每个软件安装到自己的独立目录,任何软件都可以多版本可以共存,没有冲
: 突。
: 2. 软件包的具体版本号其实是个 hash,是根据其源代码的 hash,编译的配置,和所
: 有依赖关系的 hash 算出来的。所以就算是同一个软件,比如 Python 3.6.1,如果它

相关主题
有谁用过NixOs?is it possible to design a zero miss rate cache?
问个docker做pipeline的基础问题实时进程间通讯问题
scala的ide版本号已经上3冲4了C++ 的 exception handling
进入Programming版参与讨论
d*******r
发帖数: 3299
51
很有启发,长知识了,回头试试.帖子存了.

【在 a*****e 的大作中提到】
: Nix 是一个纯函数语言,用来定制软件或者系统配置。因为无副作用,能够保证只要输
: 入(也就是依赖关系)不变,那么输出(可以理解为软件或者系统的安装)也不变。
: Nix 同时也是一套基于 Linux 的软件包管理系统,类似 npm, apt 之类的意思。但
: Nix 可以装到任何 Linux (还包括 Mac)系统上,甚至无需 root 权限。它管理的每
: 个软件包其实就是用 Nix 语言写好的表达式,然后提供命令行用于安装。它和其它系
: 统的软件包管理的主要区别是:
: 1. Nix 将每个软件安装到自己的独立目录,任何软件都可以多版本可以共存,没有冲
: 突。
: 2. 软件包的具体版本号其实是个 hash,是根据其源代码的 hash,编译的配置,和所
: 有依赖关系的 hash 算出来的。所以就算是同一个软件,比如 Python 3.6.1,如果它

d*******r
发帖数: 3299
52
"""
2. 软件包的具体版本号其实是个 hash,是根据其源代码的 hash,编译的配置,和所
有依赖关系的 hash 算出来的。所以就算是同一个软件,比如 Python 3.6.1,如果它
的配置或者任何依赖的软件有所变化,那么就会产生一个新的完全独立的安装包。
"""
这个看着挺靠谱的,算是binary级别的deterministic和reproducible.
Docker image那种一层层累加的方式, 也是binary级别的deterministic和
reproducible.
但是是相对比较低级, 是没有和依赖的code/libs/cfg的语义结合, 是瞎的.
Nix这个是有语义的, 而且粒度划分看着更精细. 回头有时间玩玩试试.

【在 a*****e 的大作中提到】
: Nix 是一个纯函数语言,用来定制软件或者系统配置。因为无副作用,能够保证只要输
: 入(也就是依赖关系)不变,那么输出(可以理解为软件或者系统的安装)也不变。
: Nix 同时也是一套基于 Linux 的软件包管理系统,类似 npm, apt 之类的意思。但
: Nix 可以装到任何 Linux (还包括 Mac)系统上,甚至无需 root 权限。它管理的每
: 个软件包其实就是用 Nix 语言写好的表达式,然后提供命令行用于安装。它和其它系
: 统的软件包管理的主要区别是:
: 1. Nix 将每个软件安装到自己的独立目录,任何软件都可以多版本可以共存,没有冲
: 突。
: 2. 软件包的具体版本号其实是个 hash,是根据其源代码的 hash,编译的配置,和所
: 有依赖关系的 hash 算出来的。所以就算是同一个软件,比如 Python 3.6.1,如果它

n******7
发帖数: 12463
53
各个distro都可以用上?非常不错啊

【在 a*****e 的大作中提到】
: Nix 是一个纯函数语言,用来定制软件或者系统配置。因为无副作用,能够保证只要输
: 入(也就是依赖关系)不变,那么输出(可以理解为软件或者系统的安装)也不变。
: Nix 同时也是一套基于 Linux 的软件包管理系统,类似 npm, apt 之类的意思。但
: Nix 可以装到任何 Linux (还包括 Mac)系统上,甚至无需 root 权限。它管理的每
: 个软件包其实就是用 Nix 语言写好的表达式,然后提供命令行用于安装。它和其它系
: 统的软件包管理的主要区别是:
: 1. Nix 将每个软件安装到自己的独立目录,任何软件都可以多版本可以共存,没有冲
: 突。
: 2. 软件包的具体版本号其实是个 hash,是根据其源代码的 hash,编译的配置,和所
: 有依赖关系的 hash 算出来的。所以就算是同一个软件,比如 Python 3.6.1,如果它

1 (共1页)
进入Programming版参与讨论
相关主题
浮点数运算等于0的问题安装了floydhub的dl dockerfile,然后import pandas就挂掉了,靠
微软又大转弯docker和vagrant的异同是啥,大家都用哪个
再问个fork的题 (转载)vagrant很不错
looking for summer interns (转载)docker的致命缺陷
Vagrant v.s. Docker有人用docker deploy node app吗?
docker的newbie 问题有谁用过NixOs?
请教移动开发的framework问题问个docker做pipeline的基础问题
linux怎么快速重装系统保持原来的配置?scala的ide版本号已经上3冲4了
相关话题的讨论汇总
话题: docker话题: dockerfile话题: nix话题: linux话题: image