Mac OS X上可以通过virtualbox虚拟机来运行一个Docker环境,也就是通过 Boot2Docker 这个轻量级Linux发行版本来运行 Docker(24M大小)。通过 Boot2Docker 可以实现:

  • 支持AUFS的内核3.16.1,Docker v1.2.0 - 使用 libcontainer
  • 容器通过磁盘自动挂载到 /var/lib/docker
  • 通过磁盘自动挂载来持久化SSH key

Boot2Docker发行版是基于 Tiny Core Linux 来制作的

如果系统中没有安装过VirtualBox,也可以直接下载完整打包的 Docker for OS X Installer ,包含了以下组件:

  • Docker v1.2.0
  • Boot2Docker.iso v1.2.0
  • Boot2Docker manage tool v1.2.0
  • VirtualBox 4.3.14

安装boot2docker manage tool

在我的Mac OS X环境中已经安装过VirtualBox,所以我不再下载完整的 Docker for OS X Installer ,而采用下载安装 boot2docker management release 并使用它来下载 boot2docker.iso

Boot@Docker首先会尝试挂载一个命名为 boot2docker-data 的分区,如果该分区不存在,就选择通过 blkid 命令列出的第一个 ext4 分区。

初始化:

boot2docker init

此时提示:

Downloading boot2docker ISO image...
Latest release is v1.2.0
以及创建ssh密钥对信息

我下载的是针对Mac版本的 boot2docker-v1.2.0-darwin-amd64 下载之后修改属性并复制到可执行路径中

chmod 755 boot2docker-v1.2.0-darwin-amd64
sudo cp boot2docker-v1.2.0-darwin-amd64 /usr/local/bin/boot2docker

启动虚拟机

boot2docker up

提示显示

Waiting for VM and Docker daemon to start...
...........................................
Started.

To connect the Docker client to the Docker daemon, please set:
    export DOCKER_HOST=tcp://192.168.59.103:2375

使用VirtualBox Manager也可以看到后台已经启动了 boot2docker-vm 这个虚拟机,且已经配置了NAT和hostonly两个网络

boot2docker

登录虚拟机

boot2docker ssh

从VirtualBox的配置来看,是访问 127.0.0.1 端口 2022 映射到NAT的虚拟机的22端口访问,本地帐号已经创建好ssh密钥对,所以可以无密码登录。

如果是手工创建vm,则默认密码是

user: docker
pass: tcuser

持久化数据

当使用 boot2docker init 时, boot2docker 工具自动创建了一个自动挂载的磁盘,挂载在 /var/lib/docker/var/lib/boot2docker

如果你不使用 boot2docker 这个VirtualBox管理工具,可以使用带有 boot2docker-data 标记的 ext4 或者 btrfs 格式的分区(使用命令 mkfs.ext4 -L boot2docker-data /dev/sdX5 创建),这样 boot2docker 将自动它到 /mnt/sdX 然后软链接 /mnt/sdX/var/lib/docker/var/lib/docker

docker客户端连接

要连接docker client到Docker daemon,使用以下命令

export DOCKER_HOST=tcp://192.168.59.103:2375

然后本地的docker 客户端就可以操作

升级docker

升级需要停止虚拟机

boot2docker stop
boot2docker download
boot2docker start

使用osx-installer安装docker

上述手工安装 boot2docker 工具的方法,我没有找到mac平台本地的docker工具,所以还是采用下载 boot2docker/osx-installer 工具重新安装了一遍。

从Mac OS X的Applications上启动 Boot2Docker 应用程序将自动初始化和启动虚拟机,也就是相当于手工执行了如下命令

boot2docker init
boot2docker start
export DOCKER_HOST=tcp://$(boot2docker ip 2>/dev/null):2375

运行Docker

从终端测试一个 hello-world 案例镜像

docker run hello-world

以上命令下载了一个非常小的 hello-world 镜像,是一个小的容器执行了输出 Hello from docker. 消息。

注意, docker ps 命令默认只能输出正在运行的容器,所以上述容器运行输出后退出,只能用 docker ps -a 查看到::

docker ps -a
CONTAINER ID        IMAGE                COMMAND             CREATED             STATUS                      PORTS               NAMES
d859768aff36        hello-world:latest   "/hello"            39 minutes ago      Exited (0) 39 minutes ago

进一步请参考我的后续实践记录

制作自己的boot2docker.iso

How to build boot2docker.iso locally 提供了制作自己的boot2docker.iso的方法。

待续……