然后,咱们聊一下,Docker是如何运行的。
Docker整体架构如下(假设你比较熟悉VMWare或VirtualBox):
Docker Client:与Docker Deamon交互,告诉Docker Deamon要做什么,可以理解为一个远程执行Docker相关各种指令的工具
Docker Host:Docker Deamon的运行环境,就是宿主机
Docker Deamon:Docker服务,管理容器的创建,运行,停止等,是核心服务
Docker Images:Docker镜像,可以先理解为存放GuestOS所需二进制文件的只读光盘(这个不准确的,其实有分层结构),比如你可以把Ubuntu的可运行环境,经过定制后,做成一个镜像(不需要内核,不需要自己重头开始建立)
Docker Containers:Docker容器,通过某个镜像来创建,可以理解为一个虚拟机的实例
Docker Registry:Docker仓库,用来存放大家做好的镜像文件,可以方便的查询和下载
那当你运行下面指令时,究竟发生了什么呢?
# 利用基础镜像为ubuntu创建一个容器,采用交互模式运行(-it),并在容器中执行命令/bin/bash, docker run -it ubuntu /bin/bash
1、查找并获取镜像文件:Docker检查本地是否有ubuntu镜像,如果本地没有该镜像,Docker会从Docker Hub下载。
2、创建容器:如果镜像已经存在或镜像下载后,Docker会使用它来创建新的容器。
3、分配文件系统并且挂载一个可读写的层。
4、分配网络/桥接接口: 创建一个允许容器与本地主机通信的网络接口。
5、设置一个IP地址: 从池中寻找一个可用的IP地址并且服加到容器上。
6、运行你指定的程序:按上面的命令,应该为/bin/bash
7、捕获并且提供应用输出: 连接并且记录标准输出、输入和错误让你可以看到你的程序是如何运行的。
那大家看下来,步骤1、6、7没有什么难理解的,但2、3、4、5究竟在做什么呢?