笔者使用 Mac 系统玩的,所以会更多阐述 Mac 上使用的一些东西。
在安装之前有些 Docker 相关的概念需要了解一下,以便我们更好了解 Docker。
简单来说,安装 Docker 之后,会在机器上跑一个守护进程,你使用 docker 客户端相关命令时,会给到守护进程,由守护进程来处理相关的东西。
在 Linux 系统中,Docker 客户端,守护进程还有你的容器都是跑在本地系统,这意味着容器的端口是直接映射到本地机器,你可以使用 localhost:8376
等来访问相关服务。
在 Mac OS X 系统中,由于 Docker 要使用到 Linux 系统内核的一些特性,所以没法直接在 Mac OS X 上跑。Docker 的守护进程其实是运行在一个称为 default 的 Linux 虚拟机中,所以我们需要 Virtual Box 来使用 Docker。大致如下图:
所以在 Mac OS X 系统中,Docker 的主机地址是这个 Linux 虚拟机的地址。当你使用 docker-machine
来开启虚拟机时,会分配一个 IP 地址。当你开启一个容器时,容器的端口会映射到这个虚拟机的端口。
Docker Machine
Docker Machine 用于在机器或者云端上创建多个虚拟主机。它可以创建虚拟主机然后自动安装 Docker,借助 docker-machine
你可以管理相关的主机。
如果你是 Mac OS X 系统,创建新的虚拟主机很容易,使用以下命令即可:
docker-machine create --driver=virtualbox vbox-test
你也可以使用 --help
来了解命令的更多内容。
如果你要基于云端来创建或者其他驱动,可以参考官方文档:https://docs.docker.com/machine/drivers/
Docker Compose
Docker Compose 是用来定义依赖多个容器运行的应用,例如一个 Wordpress 系统,我们需要数据库,如 Mysql,需要 php 运行时等,这些可以分布在不同的容器。Docker Compose 可以用于管理和配置多个容器相关的东西,多个容器通过 Docker Compose 连接起来形成完整的应用服务。
注意,在我写这篇文章的时候,Docker Compose 还是不支持 windows 系统的,开发者还是使用 Mac 或者 Linux 的好。
Docker Swarm
Docker Swarm 是 Docker 原生的一个集群工具,它可以把多个 Docker 主机转化为单一的虚拟 Docker 主机。
Docker Swarm 遵循 Docker 标准的 API,任何可以和 Docker 守护进程交互的工具,便可以利用 Docker Swarm 来转化为操作多个 Docker 主机。
本文没有更多关于 Docker Swarm 的介绍,想要了解更多可以参考:Docker Swarm
Docker Image
Docker 镜像,便是某个应用或者服务打包好的,一个静态的包括应用或者服务相关信息的东西,在我们使用 Docker 运行某个应用时,我们需要从远程服务器上拉取相应的镜像。
一个 Docker 的镜像是可以做很多事情的,甚至复杂到来启动一个数据库,来等待用户增删改查,都是可以的。
Docker 镜像的意义在于让人们可以创建和分享应用,使用 Docker 镜像,你不用考虑这个应用或者软件能否在机器上跑,Docker 的容器总是可以运行 Docker 镜像的。
官方提供了一个获取和发布镜像的地方:https://hub.docker.com
Docker Container
Docker 容器,是某个镜像的一个运行中的实例,容器可以理解为 Linux 操作系统的一个基础版本,镜像是加载到容器的软件内容。
容器的运行情况,取决于镜像是由什么内容构建的,一个镜像可能只是运行简单的一个命令后便退出,最简单的镜像例子 hello-world
就是这样的。
我们可以通过 Docker 客户端的命令来管理容器,例如重启,停止,销毁等。
有一个需要留意的点是,Docker 的容器是一次性的,其本身并不具备持久化的东西。例如我们运行一个 MySQL 的容器,如果容器重启了,在其运行期间写入的所有数据是不会存在的,因此,Docker 提供了一种方式让系统的某个目录映射到容器的某个目录中,以便做文件或数据的持久化处理,往往许多数据库的容器都需要用到,这个后边会再详述。