容器
虚拟机和容器结构主要区别在于中间两层,虚拟机自带了操作系统,这个操作系统可以和宿主机一样,也可以不一样,而容器是和宿主机共享一个操作系统。我们知道,操作系统的内容是很多的,就像我们自己电脑上的操作系统一样,占用的内存很多,启停很慢,而且如果虚拟机安装的操作系统有更新,那更新也很麻烦,而且购买正版操作系统也是一笔不小的费用。而容器则没有这些烦恼,所以容器相对于虚拟机而言,既可以提供独立的软件运行环境,占用内存也小,启停速度快,操作更简单,更轻量级。
Docker
Docker不等同于容器,它是基于容器技术开发的一个应用,docker包含了运行一个应用程序所需要的所有东西,包括:代码、运行时、各种依赖和配置。那么这里面的代码、依赖、配置就是docker镜像包含的内容,而运行镜像里的内容则是容器做的事情,也就是运行时。
Docker镜像
Docker镜像是一个文件系统,上文提到,其中包含了应用程序运行时所需的源代码、依赖、配置等。我们自身的应用代码可以根据dockerfile构建出一个镜像,然后上传到镜像仓库。docker提供了公有镜像仓库docker hub,这里面的镜像可以供所有人下载使用。可以将镜像理解为软件安装包,下载之后就开箱即用。Docker容器里的镜像是可以层层叠加的,比如运行我们的应用程序,需要使用mysql数据库,需要python运行环境,那么docker容器里只要要有mysql镜像、python镜像、我们自己的应用程序镜像。Docker镜像是静态的,像软件安装包一样,没有运行环境是不可以运行的,那么docker容器就提供了这样一个运行环境。
Docker容器
Docker容器就是容器,在docker里,提供了运行docker镜像的运行时环境。运行容器时,在镜像层上面增加了一个读写层,可以对运行的容器做一些更改,但这些更改不会对镜像产生影响,如果关闭或删除容器后,这些更改也不会保存。那么如果保存运行时的一些数据,进行持久化存储,那就是卷(volume)做的事情,这是docker里的另一个概念,这里不做详述。
镜像和容器的关系
由上文描述可见,Docker容器和docker镜像都是docker系统的一部分,密切相关。镜像可以独立于容器存在,但容器得依赖于镜像,容器利用镜像来构建一个运行时环境以此运行一个应用程序。利用docker运行应用程序的过程一般如下:编写应用程序–》编写dockerfile–》根据dockerfile构建镜像–》上传镜像到镜像仓库–》使用docker容器运行该镜像。