不确定“最佳实践”是否征求意见(这违反了 SO 政策),请注意,这也很大程度上取决于您的工具链。
我不是 boot2docker 的粉丝,因为它迄今为止可以工作(尽管它可能会有所改进,并且从长远来看它可能是最好的方法,因为它是 docker 团队维护的官方方法)。
编辑: boot2docker 已停产并取而代之,Docker Machine
它的作用几乎相同,但以更通用的方式,允许您在本地、局域网或云中管理 Docker 守护程序。
对我来说,我在 Windows 上,但我面临与 OSX 开发人员相同(甚至更多)的困难。由于我使用的是 Hyper-V,boot2docker (VirtualBox) 无法运行,所以我必须自己动手。另外,上次我尝试 boot2docker - 它运行 TinyCoreLinux,这是另一个我必须学习的 Linux 发行版,而我的重点是云中的 CoreOS,所以我宁愿只专注于 CoreOS。
设置您的开发的目标如下:
- 拥有对 docker 主机(在 VM 中或在 LAN 中)的挂载权限的 ssh 访问权限:这对我来说是 Hyper-V 上的 CoreOS。
- 有一个本地 docker 客户端 &
export DOCKER_HOST=<ip or hostname here>
mount /mnt/from/host
工作目录到您的 docker 主机中以进行实时重新加载:这可以通过 CoreOS 上的 mount.cifs 与我的 systemd 单元工作。
- 为您的开发要求制作 dev.Dockerfile,如果您是节点开发人员,请从节点映像开始,npm install gulp/browserify/.. 无论您需要什么作为项目的基础映像和
docker build -f dev.Dockerfile -t my_dev_container .
docker run -it -v /mnt/from/host/:/src/app/ -e my_dev_container
您现在处于一个具有完全隔离环境的终端中,可以将其置于源代码控制之下并在项目成员之间复制,并具有完整的实时重新加载能力。
缺点:如果您依赖 IDE 中的 REPL 或 intelliSense,则必须有一个可以使用远程服务器的 IDE。或者您必须在开发容器(cloud9 或使用 X 服务器)中运行您的 IDE。
当然,如果你住在终端并且精通 vim,那么你很高兴。