Mac OS X
注意:这个Docker的发行版本不建议使用Boot2Docker命令行,建议使用Docker Machine。使用Docker Toolbox安装Docker Machine跟安装其他Docker工具一样。
你可以使用Docker Toolbox安装Docker。Docker Toolbox包含如下的Docker 工具:
- Docker Machine 为了运行
docker-machine
可执行包 - Docker Engine 为了运行
docker
可执行包 - Docker Compose 为了运行
docker-compose
可执行包 - Kitematic,Docker GUI
- 一个预设的Docker命令行环境
- Oracle VM VirtualBox
因为Docker Daemon使用了Linux一个内核特性,原生的OS X系统不能直接运行Docker。折中的解决方案,你必须使用 docker-machine
去创建并连接到一个虚拟机上(VM)。这个VM会为你的Mac提供Docker运行环境。
要求
你的Mac必须安装OS X 10.8(及以上)"美洲狮"的操作系统,并安装好Docker Toolbox。
在安装前,先了解一些主要的概念
Docker 在Linux上安装过程里,你的物理机器既是本地主机也是Docker的宿主机。在网络里,本地主机的意思是你的计算机。Docker的宿主机是托管这容器运行的计算机。
在一个标准的Linux安装中,Docker客户端、Docker Daemon和一些运行中的容器会直接寄托在你的本地主机上。这意味着你可以使用标准的本地地址和端口去访问容器,例如, localhost:8000
或 0.0.0.0:8376
。
在一个OS X 安装里,docker
daemon(守护进程)会运行在一个被称为default
的Linux虚拟机的内部。 default
是一个轻量的Linux虚拟机,它为Mac OS X运行Docker Daemon做了模拟。VM(虚拟机)完全运行在内存里,它非常小,大约只有24MB,只需约5S就可以启动。
在OS X内,Docker 宿主机的地址跟Linux虚拟一样。当你使用 docker-machine
启动Linux虚拟机是,它会分配一个IP地址。当你启动一个容器是,容器上的端口会映射到虚拟机的端口上。
安装
如果你已经运行了VirtualBox,在安装前,你必须停止它。
-
打开 Docker Toolbox 主页。
-
点击安装程序连接去下载。
-
双击安装包或通过右键弹出的菜单选择 "打开(Openning)" 启动安装。
安装程序启动后,会弹出 “Install Docker Toolbox” 对话框。
-
点击 “Continue” 安装 toolbox。
安装程序会给你提供选项来定制标准的安装。
默认,标准的 Docker Toolboxthe 会安装如下工具:
- 将所有的Docker 工具二进制执行文件安装到
/usr/local/bin
文件里 - 将上述的执行文件的权限向所有用户开发
- 安装 VirtualBox;或更新已经存在的安装
通过 “Customize(定制)” or “Change Install Location(改变安装路径)” 来改变默认设置。
- 将所有的Docker 工具二进制执行文件安装到
-
点击 “Install” 执行标准安装。
系统会提示你输入你的密码。
-
输入你的密码继续安装。
安装完成后,安装程序会给提供一些开始操作的信息。
-
点击 “Close” 退出安装。
运行一个Docker容器
为了运行一个Docker容器,你需要如下步骤:
- 创建一个新的(或启动一个已经存在的) Docker 虚拟机
- 将你的环境切换到新的虚拟机
- 使用
docker
客户端创建、加载和管理容器
当你创建一个机器时,如果你喜欢,你可以随时重用它。正如所有的VirtualBox虚拟机一样。
这里有两种方式可以使用你已经安装的工具,从Docker 快速终端或从你的shell。
使用 Docker 快速启动终端
-
打开 “Applications(应用)” 文件夹或“Launchpad”(启动面板)。
-
找到 Docker 快速启动终端(Quickstart Terminal)并双击启动它。
应用执行流程:
- 打开一个终端窗口
- 创建一个
default
虚拟机,如果它不存在,并启动虚拟机 - 将终端的环境指向这个虚拟机
当启动完成后,快速启动终端会输出一些报告:
现在,你可以运行
docker
命令了。 -
通过运行
hello-world
容器核实上述设置是否成功。$ docker run hello-world Unable to find image 'hello-world:latest' locally 511136ea3c5a: Pull complete 31cbccb51277: Pull complete e45a5af57b00: Pull complete hello-world:latest: The image you are pulling has been verified. Important: image verification is a tech preview feature and should not be relied on to provide security. Status: Downloaded newer image for hello-world:latest Hello from Docker. This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. (Assuming it was not already locally available.) 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash For more examples and ideas, visit: http://docs.docker.com/userguide/
一个更加通用的交互方式是使用你常用的shell 命令行和Docker 工具进行通讯。
从你的shell
在这个小节里,假设你已经运行了一个Bash shell。你可能运行了一个一样的shell,例如,C shell。但是它们的命令是相同的。
-
创建一个新的Docker 虚拟机。
$ docker-machine create --driver virtualbox default Creating VirtualBox VM... Creating SSH key... Starting VirtualBox VM... Starting VM... To see how to connect Docker to this machine, run: docker-machine env default
这里在VirtualBox里,创建了一个新的
default
虚拟机。这条命令也创建了一个机器配置文件,在
~/.docker/machine/machines/default
文件夹里。你只需运行一次create
命令。之后,你可以在命令行里,使用docker-machine
去启动、停止、查询和其他管理虚拟机。 -
列出你的可用机器。
$ docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM default * virtualbox Running tcp://192.168.99.101:2376
如果你以前安装了被弃用的Boot2Docker 应用或运行Docker 快速启动终端,你可能还有一个
dev
的虚拟机。当你创建了default
虚拟机,docker-machine
命令会提供指令去学习如何连接虚拟机。 -
获取你的新虚拟机的环境命令。
$ docker-machine env default export DOCKER_TLS_VERIFY="1" export DOCKER_HOST="tcp://192.168.99.101:2376" export DOCKER_CERT_PATH="/Users/mary/.docker/machine/machines/default" export DOCKER_MACHINE_NAME="default" # Run this command to configure your shell: # eval "$(docker-machine env default)"
-
连接你的shell到
default
机器。$ eval "$(docker-machine env default)"
-
运行
hello-world
容器去校验你的设置。$ docker run hello-world
了解 Toolbox 安装
Toolbox 安装了Docker 引擎二进制包,Docker二进制包存放在你的系统上。当你使用Docker 快速启动终端或手动创建一个 default
虚拟机时,Docker Machine 会更新 ~/.docker/machine/machines/default
文件夹到你的系统。这个文件夹包含虚拟机的配置文件。
你可以创建多个虚拟机,使用Docker Machine 在你的系统上。因此,你可能得到多个虚拟机文件夹,如果你拥有多个虚拟机。移除一个虚拟机,可以使用 docker-machine rm <machine-name>
命令。
从Boot2Docker迁移
如果你之前使用 Boot2Docker,你拥有一个Docker boot2docker-vm
虚拟机,在你的本地系统上。如果你想让Docker Machine 去管理旧的虚拟机,你可以迁移它。
-
打开一个终端或Docker CLI(命令行接口),在你的系统上。
-
输入如下命令:
$ docker-machine create -d virtualbox --virtualbox-import-boot2docker-vm boot2docker-vm docker-vm
-
使用
docker-machine
命令发起虚拟的迁移通信。
docker-machine
子命令与 boot2docker
有稍许的差异。如下列表中列出了 docker-machine
等同的子命令:
boot2docker | docker-machine | docker-machine描述 |
---|---|---|
init | create | 创建一个新的docker主机 |
up | start | 启动一个停止的机器 |
ssh | ssh | 运行一个命令或互动ssh回话,在机器上。 |
save | - | 没有对等指令 |
down | stop | 停止一个运行中的机器 |
poweroff | stop | 停止一个运行中的机器 |
reset | restart | 重启一个运行中的机器 |
config | inspect | 打印机器的配置详情 |
status | ls | 列出所有机器和他们的状态 |
info | inspect | 显示一个机器的详情 |
ip | ip | 显示机器的 ip 地址 |
shellinit | env | 显示你跟机器交互配置的shell指令 |
delete | rm | 删除一个机器 |
download | - | 没有对等指令 |
upgrade | upgrade | 更新一个机器的Docker客户端到一个最新稳定版本 |
在 Mac OS X 上的一个 Docker 例子
通过这一小节,在一个虚拟机上,尝试一些实战性的容器任务。此时此刻,你应该拥有一个正在运行中的虚拟机并已经通过你的shell与它连接成功。为了校验上述的条件,执行下面的命令:
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM
default * virtualbox Running tcp://192.168.99.100:2376
ACTIVE
机器,在这里是 default
,你的一个环境将指向它。
访问容器的端口
-
启动一个 NGINX 容器,在你的Docker主机上。
$ docker run -d -P --name web nginx
通常,
docker run
命令会创建一个容器,运行它,之后退出。-d
标记让容器在后台一直运行,在docker run
命令执行完后。-P
标记发布容器需要暴露的端口到你的本地主机;这样,你就可以从你的Mac访问到它们。 -
使用
docker ps
命令可以查看运行中的容器:CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5fb65ff765e9 nginx:latest "nginx -g 'daemon of 3 minutes ago Up 3 minutes 0.0.0.0:49156->443/tcp, 0.0.0.0:49157->80/tcp web
此刻,你可以看到
nginx
正以守护模式运行中。 -
观察容器的端口。
$ docker port web 443/tcp -> 0.0.0.0:49156 80/tcp -> 0.0.0.0:49157
这里告诉你,
web
容器的端口80
被映射到你的Docker主机上的49157
端口上。 -
输入
http://localhost:49157
地址(localhost
和0.0.0.0
等同) 在你的浏览器内:它并没有正常的运行。这是因为,并没有Docker Daemon在你的
DOCKER_HOST
地址上工作。但是,你可以把地址替换成你的Docker虚拟机地址,重试一下。 -
获取
default
虚拟记得地址。$ docker-machine ip default 192.168.59.103
-
在你的浏览器内,输入
http://192.168.59.103:49157
地址:成功!
-
想停止并删除你正在运行中的
nginx
容器,按如下操作即可:$ docker stop web $ docker rm web
挂载一个数据卷到容器上
当你创启一个容器时,它会通过虚拟机系统的分享了你的/Users/username
目录。你可以使用这个分享指向的挂载目录到你的容器上。下一个练习会向你演示如何做到这点。
-
更改你的用户
$HOME
目录。$ cd $HOME
-
创建一个新的
site
目录。$ mkdir site
-
进入新建的
site
目录里。$ cd site
-
新建一个
index.html
文件。$ echo "my new site" > index.html
-
启动一个新的
nginx
容器并使用site
替换它的html
文件。$ docker run -d -P -v $HOME/site:/usr/share/nginx/html \ --name mysite nginx
-
获取
mysite
容器的端口。$ docker port mysite 80/tcp -> 0.0.0.0:49166 443/tcp -> 0.0.0.0:49165
-
在浏览器中打开上面的地址:
-
尝试在你的
$HOME/site
实时地添加一个新的页面。$ echo "This is cool" > cool.html
-
在浏览器里打开新页面。
-
停止并删除你运行中的
mysite
容器。$ docker stop mysite $ docker rm mysite
升级 Docker Toolbox
到Docker Toolbox安装包下载,并重新安装即可。具体可以参考上述的诸多步骤。
卸载 Docker Toolbox
卸载,可以遵循如下步骤:
-
列出你的机器。
$ docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM dev * virtualbox Running tcp://192.168.99.100:2376 my-docker-machine virtualbox Stopped default virtualbox Stopped
-
移除每个机器。
$ docker-machine rm dev Successfully removed dev
移除一个机器,会从VirtualBox删除它们并从
~/.docker/machine/machines
删除相关的目录。
-
从你的“ Applications”文件夹中移除Docker快速启动终端和Kitematic。
-
从
/usr/local/bin
文件夹中移除docker
、docker-compose
和docker-machine
命令。$ rm /usr/local/bin/docker
-
从你的系统中删除
~/.docker
文件夹。
知识拓展
使用 docker-machine help
列出Docker Machine的完整的命令行帮助文档。获取更多关于使用SSH或SCP访问一个虚拟机的信息,请移步到 Docker Machine文档。
你可以通过 Docker用户指南继续学习。如果你Kitematic GUI的使用感兴趣,请移步到Kitematic用户指南。