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
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