共计 2403 个字符,预计需要花费 7 分钟才能阅读完成。
我希望每次在 docker 容器中安装 vi 的时候谁会给我 1 美元 … 我想要一个在运行的 docker 容器编辑文件的更简单的方式。首先,尝试避免编辑文件,这违背了容器的哲学理念(见最后一段)。
但是如果你有一个正当的理由,下面教你怎么做。
为什么是 Zedapp?
很多时候我使用 vi 或 Atom,就在几个月前我偶然发现了 Zedapp,一个自用编辑器。它简化了编辑, 比如不使用 tabs,减少了编辑时的识别加载。
对于远程编辑的良好支持使它从远程服务器中脱颖而出, 它甚至可以直接编译 github 源。
Zedapp 刚有 version 1.0,如果你喜欢它,可以考虑帮助在 gratipay 的 Zef Hemmel,他勇敢地辞掉了自己的工作,投身于开源项目。
安装 Zedapp
你可以将 Zedapp 作为 chrome 插件或者一个独立的 app。在这里下载: zedapp.org。建议使用独立版本。
安装 zedrem
你需要 zedrem 来远程编辑,它是为 Zedapp 编辑文件提供服务的一个小程序. Zedrem 打包在 docker 镜像中:sequenceiq/zedapp
这里有一个脚本,帮助在本地运行 zed 服务器,在目标容器运行 zed 客户端: zed
安装 docker 镜像和 shell 脚本:
docker run –rm \
-v /usr/local/bin:/target \
-v /usr/local/bin/docker:/usr/local/bin/docker \
-v /var/run/docker.sock:/var/run/docker.sock \
sequenceiq/zedapp
实际上只有一个单独的二进制 zedrem, 我用术语:zed 服务器和 zed 客户端在你使用它或者没有 –server 选项的时候加以区分。
现在你已经可以启用一个 zedrem 会话来编辑 Docker 容器目录内的 Zedapp 文件了。
启用 zedrem 会话
在容器中启用 zedrem 会话
zed <container> <directory>
如果 zedrem 服务器未启用,它将 -start(启用)zedrem 服务器,把 zedrem 客户端– copy(复制)在选择的容器中并启用,最后输出 zedrem 会话的远程链接。
导向工程列表窗口:Command-Shift-O/Ctrl-Shift-O. 选择 Remote Folder, 在 Zedrem URL 输入框中键入远程链接,点击 Open.
这就是全部,玩的开心! 下面的段落是为了满足你们的好奇心。
Boot2docker 帮助函数
Install zedrem 这一步可能已经检测到你在使用 Boot2docker 并指导你创建了一个帮助函数,以防你错过了这一步或谨为参考:
zed() { boot2docker ssh “sudo zed $@” ;}
Boot2docker 中安装的的 zed 帮助脚本需要这一句,所以你需要 boot2docker ssh 工作区。
在此之后,你可以直接在 OSX 系统上进行操作。
zed <container> <directory>
本地 zedrem 服务器
当你想使用 Zedapp 实现远程编辑时,默认需要其他两个组件:
zedrem 服务器 Zedapp 得到文件内容,发送 web 服务协议的编辑命令,维护和 zedrem 客户端的会话。
zedrem 客户端 在指定的路径中为文件服务的小程序。
当通过官方服务器使用 zedrem 客户端时,所有的编辑命令和内容都要经过 blobe:
比起来,docker 化的本地服务器更快更安全 :
nsenter
你可能在想这一步:copy zedrem into the container(将 zedrem 复制到容器)。怎么可能?Docker 的 cp 命令只支持反方向: 从容器到本地目录。
这是一个开源问题,很快会修复,但是同时你可以使用 nesenter 救急。Jérôme Petazzoni 提供了一个带有帮助脚本:docker-enter 包装好的 nsenter。我们可以使用 docker-enter 将文件从本地复制到容器:
cat local-file | docker-enter $container sh -c ‘cat>/zedrem’
by the way(顺便说一下):docker exec 已经合并在主分支里了,它将全面替代 nsenter。
千万别这么干
绝大多数场合你们不需要这么做。首先在容器中编辑文件而不是开发或调试被认为是糟糕的实践。
发现你正在编辑 nginx 的配置文件?别,使用 Jeff Lindsay 的 nginx appliance。
如果你真的需要在 docker 容器中编辑文件,请使用卷。
如果你已经启用了一个容器,并且有问题的文件又不在一个卷上,这个方法还是很好用的。
CentOS 6/ 7 系列安装 Docker http://www.linuxidc.com/Linux/2014-07/104768.htm
Docker 的搭建 Gitlab CI 全过程详解 http://www.linuxidc.com/Linux/2013-12/93537.htm
Docker 安装应用 (CentOS 6.5_x64) http://www.linuxidc.com/Linux/2014-07/104595.htm
Docker 和一个正常的虚拟机有何区别? http://www.linuxidc.com/Linux/2013-12/93740.htm
在 Docker 中使用 MySQL http://www.linuxidc.com/Linux/2014-01/95354.htm
Docker 将改变所有事情 http://www.linuxidc.com/Linux/2013-12/93998.htm
Docker 安装应用 (CentOS 6.5_x64) http://www.linuxidc.com/Linux/2014-07/104595.htm
Docker 的详细介绍 :请点这里
Docker 的下载地址 :请点这里