Docker for Mac 初体验

山河永寂

Docker 作为一个集成的、易于部署的环境,在很多方面都有广泛的应用,但是由于其使用了 Linux 内核的容器技术,所以很依赖 Linux 环境,在其他系统环境下必须要使用虚拟机启动一个 Linux 系统然后在此基础上使用 Docker,非常不方便。而前不久 Docker 推出了 Mac 和 Windows 的全新 beta 版本,允许 Docker 以更贴近用户、透明的方式运行。笔者也下载了 beta 版本尝鲜,最新版本是 1.11.1-beta10,这里只讲解 Mac 平台。

Docker for Mac vs Docker Toolbox

Docker for Mac 本质上还是创建了一个 Linux 虚拟机,然后在上面运行 Docker Daemon,Mac 本身存在 Docker 二进制文件作为客户端,但是设计上相比之前的 Docker Toolbox 就更加巧妙了。

Docker Toolbox

Docker 工具箱会将 dockerdocker-composedocker-machine 安装到 /usr/local/bin 目录下,同时安装 VirtualBox。工具箱通过 docker-machine 虚拟化一个 Linux 环境,这个环境运行 boot2docker 系统,其中包含了一个 Docker Engine 并且使用主机 $HOME/.docker/machine/machines/default 上存放的证书通信。
在使用 dockerdocker-compose 命令之前,必须要使用 eval $(docker-machine env default) 命令初始化各类环境变量用于告知 docker 命令如何与虚拟机内的 Docker Daemon 通信

Docker for Mac

Docker for Mac 是一个原生的苹果应用程序,被安装到 /Application 目录。安装时会创建 /usr/local/bin 目录下的 dockerdocker-composedocker-machine 符号链接,这些符号链接指向 ~/Library/Group Containers/group.com.docker/bin 目录下的各类文件,而 ~/Library/Group Containers/group.com.docker/bin 的文件实际上也是符号链接,他们指向 /Applications/Docker.app/Contents/Resources/bin 目录下的实际二进制文件。

  • Docker for Mac 使用通过 Hypervisor.framework 提供的轻量级的 xhyve 虚拟化技术

  • Docker for Mac 不使用 docker-machine 管理虚拟机

  • Docker for Mac 不通过 TCP 端口通信,反而使用 /var/tmp/docker.sock 套接字文件通信(实际上是将 /var/tmp 目录挂载到了虚拟机中,虚拟机在其中生成套接字文件)

  • 由于使用了 xhyve 虚拟机,所以可以模拟不同架构的处理器,这样开发者就直接能在 Mac 上使用 Docker 使用诸多平台的镜像文件,比如 arm 等。

为了能主机虚拟机共享文件,Docker 使用 osxfs 作为全新的文件共享方案,在很多方面都有全新的特性,比如在文件权限、命名空间、文件所有者、文件系统事件、挂载点、符号链接、文件类型、扩展属性等方面都有了全新的内容,并且,所有产生的日志都能通过 syslog 查询,非常方便。不过现在依旧存在许多问题,比如没有设置 docker daemon 各项参数的接口。如果需要设置 registry-mirror 则必须手动使用 pinata set daemon 命令设置 daemon.json 内容。

阅读 16.3k

静雅斋
码代码|Minecraft|Node.jser&PHPer|iOS移动端开发者|Web前端码农
2.4k 声望
156 粉丝
0 条评论
你知道吗?

2.4k 声望
156 粉丝
文章目录
宣传栏