Docker for Mac 公测版试用

伴随着 2016 年 Docker Conference 的进行, Docker for Mac 和 Windows 的版本终于完全公测开始了. 之前阅读 Docker for Mac Windows Beta: the simple way to use Docker on your laptop 里的介绍, 想要安装的必须在 https://beta.docker.com/  收到获准才能下载.

Docker for Mac and Windows 可能让我们在 Mac 或 Windows 下脱离 Virtual Box 虚拟机, 像在 Linux 下一样跑 Docker. 因为不存在了 Virtual Box 这一中间层, 端口重定向就变成了一件很简单的事情了. 再也不用像原来那样 Localhost:80 -> VirtualBox-Default:1080 -> Container:80, 而直接就是 Localhost:80 -> Container:80.

也不再需要用 eval $(docker-machine env default) 来设置 DOCKER_HOST 等环境变量了.

目前的 Beta 版是 Version 1.12.0-rc2-beta16 (build: 9493) f615be9fb245904fbdf1aa0cad251d418c869428

本人趁手的是 Mac, 所以大概讲述如何安装 Docker for Mac. 首先我们可以尽情的卸载掉已安装的 Virtual Box, Docker-Machine 和 Docker 了, 然后从 https://docs.docker.com/docker-for-mac/ 下载 Docker for Mac. 它是一个 dmg 文件, 想安装普通的 Mac 应用那样拖拽到 /Applications 目录, 

docker-for-mac-install

之后可在 Launchpad 找到 Docker, 或通过 Spotlight Search 找到它并启动, 第一次启动时会要求授权进行一些初始化设置:

创建如下面的执行文件链接

由此可知这个 Docker dmg 安装包含有 docker, docker-machine, docker-compose, docker-diagnose, 和 notary 工具.

如果之前有 docker-machine 的 default Vitual Box 虚拟机, 初始的时候还会询问你是否拷贝它到新的 vhyve 虚拟机中, vhyve 是构建于 OS X 10.10 Yosemite 的 Hypervisor.framework 之上的轻量级虚拟化技术. 而 Docker for Windows 也像 Docker for Mac 一样摒弃了 Virtual Box 而转而采用了  Hyper-V 虚拟化技术.

原来用 brew 安装的 docker, docker-machine 的链接指向是下面那样子的

初始完之后会在系统栏上显示一个  Docker 图标

docker-for-mac-tray

 

现在开始, 使用 Docker 的命令和以前也差不多. 虽然提供了 docker-machine 命令, 但不再通过它来管理虚拟机了, 使用 docker-machine ls 什么都看不到, 不知道保留 docker-machine 这个命令有何用处.

Docker for Mac 不再通过 TCP 端口通信, 而是用 /var/tmp/com.docker.vmnetd.socket 套接字文件通信

我们现在来测试一下 Docker 便捷的端口重定向方式, 运行官方的 nginx 镜像, 该镜像暴露了 80 和  443 端口号, 我们可以用下面的命令直接把 Mac 的 80 映射到 nginx 容器的 80 端口上

直接访问本地的 HTTP 80 端口就是 Docker 容器 nginx 提供的服务了

docker-for-mac-ports

这个困扰我许久的麻烦事终于得到了解决, 这是坚定我开发环境下使用 Docker 的一块基石.

docker ps  查看一下容器

CONTAINER ID    IMAGE      COMMAND                        CREATED           STATUS             PORTS                                              NAMES
e52398c5de91        nginx         "nginx -g 'daemon off"      7 minutes ago     Up 7 minutes     0.0.0.0:80->80/tcp, 443/tcp     serene_jones

对于现在的 Docker for Mac, 我们可以用 ps -ef|grep docker 来看看它相关的进程信息

"docker-machine" 的信息暗含在进程参数中了.


我是卸载了原来的 docker, docker-machine 后安装的 Docker for Mac, 运行命令 docker 命令出现如下错误

Client:
 Version:      1.12.0-rc2
 API version:  1.24
 Go version:   go1.6.2
 Git commit:   906eacd
 Built:        Fri Jun 17 20:35:33 2016
 OS/Arch:      darwin/amd64
 Experimental: true
Error response from daemon: client is newer than server (client API version: 1.24, server API version: 1.22)

检查了新安装的 docker, docker-machine 都是链接到 ~/Library/Group Containers/group.com.docker/bin 下的 docker, docker-machine 的, 并不是原来 brew 安装的 docker, docker-machine.

解决办法是升级 docker-machine, 需要执行命令

Waiting for SSH to be available...
Detecting the provisioner...
Upgrading docker...
Stopping machine to do the upgrade...
Upgrading machine "default"...
Default Boot2Docker ISO is out-of-date, downloading the latest release...
Latest release for github.com/boot2docker/boot2docker is v1.12.0-rc2
Downloading /Users/uqiu/.docker/machine/cache/boot2docker.iso from https://github.com/boot2docker/boot2docker/releases/download/v1.12.0-rc2/boot2docker.iso...
0%....10%....20%....30%....40%....50%....60%....70%....80%....90%....100%
Copying /Users/uqiu/.docker/machine/cache/boot2docker.iso to /Users/uqiu/.docker/machine/machines/default/boot2docker.iso...
Starting machine back up...
(default) Check network to re-create if needed...
(default) Waiting for an IP...
Restarting docker...

我觉得应该是安装 Docker for Mac  时选择了拷贝原来的 boot2docker 的原因, Boot2Docker ISO is out-of-date.

参考: 1. Docker for Mac 初体验
          2. Mac OS X 上基于 FreeBSD/bhyve 的虚拟技术  xhyve
          3. Inside Docker for OS X i/ii

类别: Linux/Unix. 标签: . 阅读(177). 订阅评论. TrackBack.

Leave a Reply

Be the First to Comment!

avatar
wpDiscuz