阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

在 Docker 容器中编辑文件

238次阅读
没有评论

共计 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 容器中编辑文件

比起来,docker 化的本地服务器更快更安全 :

在 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 的下载地址 :请点这里

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-20发表,共计2403字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中