3 个版本

使用旧的 Rust 2015

0.2.2 2017年3月23日
0.2.1 2017年3月22日
0.2.0 2017年3月22日

#572 in Unix API

MIT 许可证

13KB
251

持久隔离开发环境

使用Docker创建完全持久和隔离的开发环境。想想Python世界的 virtualenv,但它是整个系统。

安装

如果您已安装rust + cargo: cargo install pide-rs

二进制文件即将推出。

依赖关系

  • docker(已测试v17.03版本)

使用方法

首先,在某个位置创建一个dockerfile,例如 ~/dockerfiles/debian-jessie-vim。内容应类似于以下

FROM debian:jessie

RUN apt-get update

RUN apt-get install -y \
    vim

接下来,移动到您的项目的当前工作目录。这里我将使用 ~/demo。在本地工作目录中初始化 pide。这一步可能需要一些时间,具体取决于构建dockerfile第一次所需的时间。

~ cd ~/demo
~ pide init ~/dockerfiles/debian-jessie-vim
Building dockerfile (if necessary)...
Initialized pidefile

现在您有一个持久的工作环境!通过调用 pide resume 进入它。

~ ls -a
.  ..  a.txt  b.txt  c.txt  .pide
~ pide resume
Running `debian-jessie-vim` for the first time...
root@ae6da64ee5e2:/# ls /host
a.txt  b.txt  c.txt
root@ae6da64ee5e2:/# echo Hello World > hello_file
root@ae6da64ee5e2:/# cat hello_file
Hello World
root@ae6da64ee5e2:/# exit
Committing container history...

请注意,调用 pide resume 的位置在Docker环境中映射为 /host。这是危险的,要小心。

在这个例子中,我们创建了一个名为 hello_file 的文件。如果我们再次恢复,它仍然会存在!对系统所做的任何更改也是如此,例如安装软件包。让我们看看再次运行它会发生什么

~ pide resume
Resuming `debian-jessie-vim` where you left off...
root@9691f706c0e5:/# ls -l | grep hello_file
-rw-r--r--   1 root root    12 Mar 19 18:39 hello_file

多个实例

如果您在不同的位置重复使用相同的dockerfile,它们将不会相互交互(尽管init阶段将运行得更快,因为使用了原始缓存的Docker镜像)。示例

~ mkdir demo2
~ cd demo2
~ pide init ~/dockerfiles/debian-jessie-vim
Building dockerfile (if necessary)...
Initialized pidefile
~ pide resume
Running `debian-jessie-vim` for the first time...
root@b64b1d8e24da:/# ls
bin  boot  dev  etc  home  host  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@b64b1d8e24da:/# exit
Committing container history...
~

在同一个工作目录中使用多个dockerfile目前不支持。

待办事项、笔记、其他

首先,这是一个非常奇怪的工具,旨在支持我的工作流程。它不应该用于生产,可能在许多不安全或危险的方式中表现不佳。自行承担风险。

已知问题/问题

  • 这将创建大量的孤立 Docker 镜像。这通常浪费了您机器上的空间。从 Docker v1.13+ 开始,您可以通过运行 docker system prune 来清理一些。在 Mac/Windows 上,这是一个更大的问题,因为 Docker 在一个虚拟机中运行,其总空间相当有限。在这些环境中,我建议使用 Vagrant 而不是这个工具(您已经在运行 VM)。
  • 该工具将您的当前工作目录映射到 Docker。然后 root 用户可以使用 UID 0 做各种坏事,包括使事物可执行、删除映射的目录等。假设您在 Docker 中做的任何事情都可能对 Docker 外部产生影响。仅为此依赖隔离使用,而不是安全隔离。
  • 基本上,目前没有任何可配置的选项。最终,我希望支持更多来自像 docker-compose 这样的工具的功能,以映射端口、卷、网络等。

许可证

此工具采用 MIT 许可证。

依赖关系

~4.5MB
~80K SLoC