对照上图,涉及到的概念如下:
Client:docker客户端,最常见的客户端就是docker命令,如docker build、docker pull、docker run等,通过这些命令我们可以方便的在host上构建和运行容器。Daemon:docker deamon是服务器组件,以linux后台服务的方式运行。docker daemon运行在宿主机docker host上,负责创建、运行、监控容器,构建、存储镜像。image:镜像,可将镜像看成只读模板,通过它可以创建docker容器。正如Java中了.class文件,通过.class可以创建出类的实例。镜像是层叠的,最底层就是linux内核,每添加一个文件或者操作都会在原来的基础上叠加一层,如JDK环境叠加在linux内核之上,tomcat又叠加在JDK环境之上,此时如果你的docker中已有JDK镜像的话,就只需下载tomcat这层即可。因为镜像是只读的、共享的。container:容器,docker容器就是docker镜像的运行实例。registry:registry是存放docker镜像的仓库,我们可以将自己的镜像推到远程,或者从远程下载镜像到本地运行,正如github。docker官方有一个docker hub,我们可以从上面下载官方的镜像。如,下载一个官方的tomcat镜像,直接运行该镜像即可启动tomcat,不需任何配置。
综上,结合上图,整个docker架构交互流程为:启动docker,docker以守护进程的方式运行在linux主机上(docker toolbox下为boot2docker虚拟出来的linux上),我们发送docker命令给到docker daemon执行,docker可以从docker hub中拉取所需要的image,再根据image创建出container。

5. 实战

知道了上面docker架构的交互流程了,我这里以运行一个tomcat容器为例,一步步介绍常用的命令:
docker images:列出当前docker中有哪些镜像,如果是第一次执行,当然就没有镜像了。docker search tomcat:在docker hub中搜索tomcat镜像。当然你可以在浏览器中访问docker hub,地址为:(https://hub.docker.com/),就像访问maven的远程仓库一样,可以搜索你需要的内容。
20191028120959.png
docker pull tomcat:拉取最新版的tomcat镜像到本地,下载完成后再使用docker images就能看到感下载的镜像了。docker run --name mytomcat -p 8080:8080 -d tomcat:根据tomcat镜像运行出一个tomcat实例,执行两遍就有两个实例了(注意改端口),--name表示为这个实例命名,-p 8080:8080表示将本地的8080端口绑定到容器中的8080端口,才能使用localhost:8080(docker toolbox是192.168.99.100:8080)访问到tomcat端口。-d表示后台运行。docker run --name mytomcat03 -p 8082:8080 -it tomcat /bin/bash:-it以交互、附加模式启动并进入容器后执行/bin/bash命令,不以后台运行,进入容器后执行exit命令后,会退出容器,此时使用docker ps -a命令查看会显示为exit状态。ctrl+p+q:退出但是后台运行,如上一个命令,执行exit退出后容器就会退出,此时若不想容器退出,可按这一组快捷键。docker ps -a:显示所有容器状态,docker ps只显示运行中的容器,-a表示显示所有容器,包括已退出的容器。这时就能看到刚刚启动的tomcat了。docker logs -f mytomcat:查看刚刚启动的tomcat打出来的日志,-f表示跟踪滚动日志打印。docker exec -it mytomcat /bin/bash:exec表示执行命令,命令最后需要带将要执行的命令,如/bin/bash,-it表示以交互、附加模式启动返回一个终端,/bin/bash表示进入容器后首先执行的命令。这条命令执行后就登录到了容器内部,该容器中就是tomcat应用。就像使用ssh登录到容器内部一样。这时候你可以修改容器内部的配置文件,当然,生产环境不建议这么做,而是使用配置文件外部挂载的方式。