Docker基础修炼2--Docker镜像原理及常用命令
2020/4/15 22:18:27
本文主要是介绍Docker基础修炼2--Docker镜像原理及常用命令,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
通过前文的讲解对Docker有了基本认识之后,我们开始进入实战操作,本文先演示Docker三要素之镜像原理和相关命令。
本文的演示环境仍然沿用上一篇文章在本地Centos7中安装的环境,如果你本地没有搭建Docker环境,也可以直接使用前文提到的Docker练习场(play-with-docker)在线进行练习。
在正式开始之前,我们先回顾下几个常用的命令,尤其是Docker帮助命令是掌握众多命令的万能钥匙,一定要多用。
一、Docker帮助命令
1.1 查看Docker版本命令
查看Doceker版本信息可以使用docker version命令或-v参数(–version),其中-v参数是–version的缩写。
docker -v
[root@docker ~]# docker -v Docker version 19.03.6, build 369ce74a3c
docker --version
[root@docker ~]# docker --version Docker version 19.03.6, build 369ce74a3c
docker version
[root@docker ~]# docker version Client: Docker Engine - Community Version: 19.03.6 API version: 1.40 Go version: go1.12.16 Git commit: 369ce74a3c Built: Thu Feb 13 01:29:29 2020 OS/Arch: linux/amd64 Experimental: false Server: Docker Engine - Community Engine: Version: 19.03.6 API version: 1.40 (minimum version 1.12) Go version: go1.12.16 Git commit: 369ce74a3c Built: Thu Feb 13 01:28:07 2020 OS/Arch: linux/amd64 Experimental: false containerd: Version: 1.2.10 GitCommit: b34a5c8af56e510852c35414db4c1f4fa6172339 runc: Version: 1.0.0-rc8+dev GitCommit: 3e425f80a8c931f88e6d94a8c831b9d5aa481657 docker-init: Version: 0.18.0 GitCommit: fec3683
1.2 查看Docker详细信息命令
我们还可以使用docker info命令查看docker相关的更广泛的操作系统范围内的信息
docker info
[root@docker ~]# docker info Client: Debug Mode: false Server: Containers: 1 Running: 0 Paused: 0 Stopped: 1 Images: 1 Server Version: 19.03.6 Storage Driver: devicemapper Pool Name: docker-253:1-1912367-pool ...省略部分内容 Docker Root Dir: /var/lib/docker ...省略部分内容 [root@docker ~]#
显示内容太多了,我省略了一部分,其中可以查看容器总数、有多少容器在运行、有多少容器已经停止、镜像总数以及内存、容量等信息。
1.3 万能帮助命令
命令何其多,不一定能全记住,也没必要全记住。就像可以在Linux下可以通过man命令查看各个命令的用法一样,Docker也提供了帮助命令。
docker --help
[root@docker ~]# docker --help Usage: docker [OPTIONS] COMMAND ...省略
里边包含了每个命令的各种详细用法,根据需要查询即可。
二、Docker镜像原理
前文已提到Docker三要素:镜像、容器、仓库。镜像是最基础的,就像我们在做面向对象编程开发时写的实体类,只有有了类才能生成实例对象。接下来我们分析下镜像的原理和特点。
2.1 Docker镜像原理及UnionFS
2.1.1 Docker镜像是什么
我们搞技术不像搞数据公式,要明确给事物一个非常严苛的名称。对于一门技术的命名或定义,个人认为只要理解就好,至于名称你可以任意给他取。
我给Docker的定义是***一个轻量级可运行的独立软件包***,只不过这个软件包除了包含我们自己开发的业务代码软件之外,还包含了运行该软件所需的所有环境,也就是他包含了代码、运行时环境、库、配置文件等等软件运行所需的所有内容。
2.1.2 Docker镜像原理
Docker镜像本质就是一个文件,底层依赖于***联合文件系统(UnionFS)***。
- 什么是UnionFS?
***UnionFS***是一种分层、轻量级、高性能的文件系统,支持对文件系统的修改作为一次提交来层层叠加。这很类似于我们生活中的千层饼或鸡蛋,由蛋黄、蛋清、蛋壳一层一层的最终构成了一个鸡蛋。
- UnionFS的特性
联合文件系统最大特点就是***分层***和***联合加载***。
在加载时可以一次同时加载多层文件系统,通过联合加载把各层文件系统叠加起来,从外部看只能看到一个文件系统,最终的文件系统保护所有底层的文件和目录。
- Docker镜像分层结构及加载原理
由于docker镜像底层采用联合文件系统,自然而然docker镜像也是分层的。docker采用的联合文件系统为aufs (advanced multi layered unification filesystem),是一种可堆叠的联合文件系统。
按照docker官网的说法,docker文件系统分为两层:bootfs和rootfs。
bootfs层
bootfs包含了bootloader和linux内核,用户是不能对这层作任何修改的,在内核启动之后,bootfs实际上会unmount掉。
rootfs则包含了一般系统上的常见目录结构,类似于/dev, /proc, /bin等等以及一些基本的文件和命令。
rootfs层
对于linux上不同版本的问题,docker可以同时运行多个rootfs。
Docker的文件系统是分层的,它的rootfs在mount之后会转为只读模式, Docker在它上面添加一个新的文件系统,来达成它的只读。由于共享一个内核,这也是为什么docker比虚拟机消耗资源更少的根本原因。
images层
从下图中,我们能看到多个只读的文件系统,Docker中把他们称为层。image是只读的,container部分则是可写的。如果用户想要修改底层只读层上的文件,这个文件就会被先拷贝到上层,修改后驻留在上层,并屏蔽原有的下层文件。
container层
最后一部分是容器(container), 容器是可读写的。
在系统启动时,Docker会首先一层一层的加载image,直到最先面的base image,这些image都是只读的。最后,在最上层添加可读写的一个容器, 这里存放着诸如unique id,网络配置之类的信息。
- 2024-11-19Docker-Compose容器集群化项目实战:新手入门指南
- 2024-11-19Docker镜像仓库项目实战:新手入门教程
- 2024-11-19Docker容器化部署项目实战:新手入门教程
- 2024-11-19Docker-Compose容器集群化资料入门教程
- 2024-11-19Docker镜像仓库资料详解:新手入门教程
- 2024-11-19Docker容器化部署资料:新手入门指南
- 2024-11-19Docker-Compose容器集群化教程:从入门到实践
- 2024-11-19Docker镜像仓库教程:新手入门指南
- 2024-11-19Docker容器化部署教程:初学者指南
- 2024-11-18Docker-Compose容器集群化入门教程