承接上篇的docker简介,实际上,镜像(image)其实就是容器(container)的模板,容器都是通过镜像创建的,所以镜像中包含启动容器所需要的所有文件系统结构和内容。简单来讲,镜像是一个特殊的文件系统,它提供了容器运行时所需的程序、软件库、资源、配置等静态数据。
前文说过,如果想要用docker运行一个程序,则必须先获取到这个程序的镜像,比如,如果我想要运行一个nginx容器,就必须先有一个nginx镜像,我们可以基于同一个nginx镜像,启动多个nginx容器,就好比基于同一套nginx模板,启动了多个nginx服务一样,此处我们也可以类比着“虚拟机”去理解,程序镜像就好比虚拟机的“模板机镜像”,我们可以通过“模板机镜像”快速的创建出可运行的“虚拟机”,docker也差不多,只不过docker是通过“程序镜像”创建出可运行的“程序容器”,最终对外提供服务,镜像是磁盘中的文件,基于镜像创建出容器,运行的容器就是内存中的进程。
然而 12345 被 nginx 容器中的 80 端口映射,所以当我们访问虚拟机 12345 端口就能访问到容器内部。此时如果再有一个 nginx 容器 2 也要映射 80 端口就只能选择 12345 之外,比如 12346。