前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >云原生技术之docker学习笔记(2)

云原生技术之docker学习笔记(2)

作者头像
AsiaYe
发布2021-01-12 15:31:05
3120
发布2021-01-12 15:31:05
举报
文章被收录于专栏:DBA随笔DBA随笔

//

云原生技术之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命令来列出当前机器上所有的镜像名称。

代码语言:javascript
复制
[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目录下找到本机的容器:

代码语言:javascript
复制
[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的镜像,可以使用下面的命令:

代码语言:javascript
复制
[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构建镜像

这部分内容稍微多点,我们后续再说。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-01-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DBA随笔 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档