聊聊docker中容器与镜像的区别
什么是镜像?
镜像可以看成是由多个镜像层叠加起来的⼀个⽂件系统(通过UnionFS与AUFS⽂件联合系统实现),镜像层也可以简单理解为⼀个基本的镜像,⽽每个镜像层之间通过指针的形式进⾏叠加。什么是容器?
容器(container)的定义和镜像(image)⼏乎⼀模⼀样,也是⼀堆层的统⼀视⾓,唯⼀区别在于容器的最上⾯那⼀层是可读可写的。要点:容器 = 镜像 + 读写层,并且容器的定义并没有提及是否要运⾏容器。
今天抛开原理,抛开底层。通俗的讲解docker中容器与镜像的区别。
对于初学者来说,刚刚接触docker会有点迷,特别是镜像与容器。其实我们可以理解镜像与容器为⼀对多的关系。
下图错误的⽰范,为什么是错误的呢?因为可以通过⼀个镜像确实可以启动三个容器,但是这个三个容器的名字不能⼀样
正确的⽰例(有⼈说这和上图有什么区别,上图中是不是名字⼀样了容器=容器=容器,这⾥的名字是容器a != 容器b != 容器c )
mysql社区版国内镜像下载
所以我们能通过⼀个镜像,运⾏出三个容器,镜像是别⼈打包好在镜像仓库的,我们去下载就好了。但是我们下载镜像的时候要带上版本号。就像我们下载⼀个jdk,官⽹默认是最新版,如果我们要下载旧版,就要进到对应的版本⾥⾯。
⼀个镜像怎么运⾏为容器呢?⽐如msql,我们下载⼀个mysql镜像。
docker pull mysql
运⾏镜像,⽣成mysql_zhangsan数据库(专门给张三⽤的数据库)
[root@localhost ~]# docker run ‐p 3306:3306 ‐‐name mysql_zhangsan ‐e MYSQL_ROOT_PASSWORD=123456 ‐d  mysql
ad10e4bc5c6a0f61cbad43898de71d366117d120e39db651844c0e73863b9434
-p 3306:3306 : 端⼝映射
--name mysql_zhangsan : 给这个容器命名为mysql_zhangsan(这个名字是唯⼀的,不能重复)
-e MYSQL_ROOT_PASSWORD=123456 : 这个数据库登陆的账号为ROOT 密码为123456
-d 是基于我们刚刚拉下拉的镜像mysql进⾏创建的。
运⾏镜像,⽣成mysql_lisi数据库(专门给李四⽤的数据库)
[root@localhost ~]# docker run ‐p 3307:3307 ‐‐name mysql_lisi ‐e MYSQL_ROOT_PASSWORD=123456 ‐d  mysql
ms10e4bcfdsf0f61cbad43898de71d366117d120dfs9db651844c0e73863b9968
-p 3307:3307 : 端⼝映射(不能⽤3306了,因为3306被张三的数据库占⽤了)
--name mysql_lisi : 给这个容器命名为mysql_lisi(这个名字是唯⼀的,不能和上⾯的mysql_zhangsan重复)
-e MYSQL_ROOT_PASSWORD=123456 : 这个数据库登陆的账号也为ROOT 密码也为123456
-d 是基于我们刚刚拉下拉的镜像mysql进⾏创建的。
到这⾥,我们成功通过⼀个镜像,创建了两个不同的容器。这样,我们的电脑上就能运⾏两个mysql了。如果我们要再开⼀个mysql容器,只要端⼝不同,名称不同,最后还是基于我们拉的mysql镜像就可以进⾏创建了。
以上就是聊聊docker中容器与镜像的区别的详细内容,更多关于docker容器与镜像的区别的资料请关注其它相关⽂章!