//
云原生技术之docker学习笔记(2)
//
今天我们看看Docker镜像相关内容。
Docker镜像说明
1、什么是Docker镜像?
docker镜像是由多个文件系统叠加而成的,最底层是一个引导文件系统,也就是bootfs,用户基本上不会和底层的引导文件系统有任何交互。所以这块不用了解过于深入。我们只需要知道Docker镜像是由多个文件系统叠加而成的即可。
为了避免抽象,我们举个例子,下面是一个典型的mysql docker镜像文件系统图:
上图中,我们提到了多个镜像,图中不难看出,一个镜像可以放到另外一个镜像的顶部,例如MySQL的镜像,需要被Centos操作系统镜像所承载,位于下面的镜像称之为基础镜像,当一个镜像启动的时候,Docker会在该镜像的最顶层加一个读写文件系统。我们执行程序就是在这个读写层进行。
在Docker中,引导文件系统永远都是只读状态,当Docker刚刚启动的时候,可写容器这一层是空的,当文件系统发生变化的时候,这些变化都会应用到这层,比如我们想修改一个文件,这个文件首先会从下面的内核和引导文件系统层复制到可写容器中,该文件的只读版本依旧存在,但是已经被可写容器层中的文件副本所覆盖。
当Docker容器启动之后,该容器会被移动到内存中,而底层的bootfs引导文件系统会被卸载(unmount),从而节省空间。
基于上面的认识,我们也可以简单的将容器的文件系统划分成两层:
读写层在需要修改文件的时候,将只读层的文件复制到读写层,这种复制的机制被称之为"写时复制"(copy-on-write)。
docker中的只读镜像层永远不会变化,当我们构建自己的容器时,其实docker为我们构建了一个镜像栈,栈顶是我们的读写层,在加上一些配置数据,就构成了镜像。
2、列出docker镜像、查看容器
可以使用docker images命令来列出当前机器上所有的镜像名称。
[root@VM-16-13-centos ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/tomcat latest e0bd8b34b4ea 6 weeks ago 649 MB docker.io/mysql latest 4f1413420360 7 weeks ago 545 MB docker.io/busybox latest f0b02e9d092d 2 months ago 1.23 MB registry.access.redhat.com/rhel7/pod-infrastructure latest 99965fb98423 3 years ago 209 MB docker.io/kubeguide/tomcat-app v1 a29e200a18e9 4 years ago 358 MB docker.io/kubeguide/redis-master latest 405a0b586f7e 5 years ago 419 MB
可以在本机的/var/lib/docker/containers目录下找到本机的容器:
[root@VM-16-13-centos ~]# ll /var/lib/docker/containers/ total 48 drwx------ 5 root root 4096 Nov 20 17:59 3b7634ee3eff796109fca6e198abb75f0544bacda850ae0a690d420ea8d1876b drwx------ 5 root root 4096 Dec 28 11:06 3d198ee60f2a3c5e7043b50c20c0713f0e9199aef029cc28082ecad1c47fa729 drwx------ 4 root root 4096 Nov 20 17:16 4784586d01e00926f42203e37a38bc661d02445ef08f084d22ca54f7af5d6e2b drwx------ 5 root root 4096 Dec 28 11:06 4f8f6ea37578b52c348c1b2efa71122ce0b466bb18bb265e8e74e40c37608546 drwx------ 5 root root 4096 Nov 20 18:12 5b83d7645b1fc1205c5fa1c4535315431b8df0e0b1cfab6a4d73935427626815 drwx------ 4 root root 4096 Dec 28 11:25 7a57ee5286e866072627429e72ad795f104ec22d6fbee30cf430cc71e4b33f03 drwx------ 4 root root 4096 Nov 20 18:57 94332658780b0676073a8489d1f4910d7cf30cd5cadd9d7b4d47c957d6e04335 drwx------ 4 root root 4096 Nov 20 18:28 a7ae6684d1965b5910a98a10acc0790ad8f8bde55815f51fd113873744319101 drwx------ 4 root root 4096 Dec 28 11:25 b2ad9bea8d0d1b09d6304aa3621c010afd1e458fa95b5b29668e0c0e80fa8b24 drwx------ 5 root root 4096 Nov 20 17:10 c8acc287dc061e2222998ff8f034750e36a3dae8e9c502617097d8b8374d5366 drwx------ 4 root root 4096 Nov 20 18:44 d2ec1526079f05264912610dfb28373050862da29d645837940a6ee3c9522c40 drwx------ 4 root root 4096 Nov 20 18:57 f11f11999c426d3ff40d7c9b33d9df3e318b3e9902c85f329e33cdb02b538c76
3、镜像、仓库、和容器的关系
这个关系之前的文章中也有介绍,我们再来看下:
镜像(Image) 容器(Container) 仓库(Repository)
这三部分组成了Docker的整个生命周期,如上图所示。
docker镜像包含了文件系统,类似于虚拟机的镜像,它是只读的模板。
docker容器是由镜像实例化而来的,这和我们学习的面向对象的概念十分相似,我们可以把镜像想象成类,把容器想象成类经过实例化后的对象,这样就非常好理解镜像和容器的关系了。
docker仓库:类似代码仓库,是Docker集中存放镜像文件的场所
这个关系可以更加清楚的表述为:
镜像保存在仓库中,仓库位于registry中,也叫docker hub。默认的registry是:
https://registry.hub.docker.com/ ,它也称之为顶层仓库;
当然,你可以拥有自己的registry,这种称之为用户仓库。
4、查找镜像
例如我们查找mysql的镜像,可以使用下面的命令:
[root@VM-16-13-centos ~]# docker search mysql INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED docker.io docker.io/mysql MySQL is a widely used, open-source relati... 10339 [OK] docker.io docker.io/mariadb MariaDB is a community-developed fork of M... 3832 [OK] docker.io docker.io/mysql/mysql-server Optimized MySQL Server Docker images. Crea... 757 [OK] docker.io docker.io/percona Percona Server is a fork of the MySQL rela... 518 [OK] docker.io docker.io/centos/mysql-57-centos7 MySQL 5.7 SQL database server 86 docker.io docker.io/mysql/mysql-cluster Experimental MySQL Cluster Docker images. ... 79 docker.io docker.io/centurylink/mysql Image containing mysql. Optimized to be li... 60 [OK] docker.io docker.io/bitnami/mysql Bitnami MySQL Docker Image 47 [OK] docker.io docker.io/deitch/mysql-backup REPLACED! Please use http://hub.docker.com... 41 [OK] docker.io docker.io/tutum/mysql Base docker image to run a MySQL database ... 35 docker.io docker.io/databack/mysql-backup Back up mysql databases to... anywhere! 34 docker.io docker.io/prom/mysqld-exporter 34 [OK] docker.io docker.io/schickling/mysql-backup-s3 Backup MySQL to S3 (supports periodic back... 29 [OK]
其中:
Name:是镜像名称
DESC:是镜像描述
Stars列反映的是镜像的受欢迎程度。
Official表示是否官方
Automated表示是否是由Docker hub自动构建流程完成的。
5、关于Docker构建镜像
这部分内容稍微多点,我们后续再说。
Navicat for MySQL怎么连接数据库?- Navicat for MySQL连接数据库教程攻略