Docker镜像的原理

Posted 我的紫霞辣辣

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker镜像的原理相关的知识,希望对你有一定的参考价值。

Docker运行的整个生命周期

Docker使用多种操作系统的发行版

   1. 一个完整的操作系统,是由linux内核+发行版,组成的一个可以使用的完整操作系统。
   2. 利用docker容器,可以获不同的发行版镜像,然后基于该镜像,运行出各种容器去使用。

查看操作系统的两大组成

# 查看操作系统的发行版
[root@docker01 ~]# cat /etc/redhat-release 
CentOS Linux release 7.9.2009 (Core)

# 查看操作系统内核
[root@docker01 ~]# uname -r
3.10.0-1160.el7.x86_64

使用docker,来切换不同的发行版,内核都是使用宿主机的内核

# 利用docker获取不同的发行版镜像
docker pull ubuntu
docker pull centos:7.8.2003

# 确认当前宿主机的发行版本
[root@docker01 ~]# cat /etc/redhat-release 
CentOS Linux release 7.9.2009 (Core)

# 查看本地的docker镜像有哪些
docker images
# REPOSITORY   TAG        IMAGE ID       CREATED         SIZE
# nginx        latest     4cdc5dd7eaad   32 hours ago    133MB
# redis        latest     08502081bff6   2 weeks ago     105MB
# ubuntu       latest     9873176a8ff5   2 weeks ago     72.7MB
# centos       7.8.2003   afb6fca791e0   14 months ago   203MB

# 运行centos7.8.2003发行版
# 运行容器,且进入容器内
# 参数 解释 -i(交互式命令操作) -t(开启一个终端) bash(进入容器后执行的命令)
docker run -it afb6fca791e0 bash
# 查看容器内centos的发行版本
[root@f516f10548c1 /]# cat /etc/redhat-release 
CentOS Linux release 7.8.2003 (Core)

# 退出当前的容器空间
exit

# 查看虚拟机的操作系统内核
[root@docker01 ~]# uname -r
3.10.0-1160.el7.x86_64

# 进入ubuntu系统
docker run -it ubuntu bash

# 查看容器内ubuntu的发行版本
root@01541754159a:/# cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=20.04
DISTRIB_CODENAME=focal
DISTRIB_DESCRIPTION="Ubuntu 20.04.2 LTS"

# 查看ubuntu的操作系统内核(公用宿主机内核)
root@238d08669482:/# uname -r
3.10.0-1160.el7.x86_64

Docker部署服务的优势

Docker镜像原理

Docker镜像 分层原理

# 进入正在运行的容器内
[root@docker01 ~]# docker exec -it 455ebd1b9508 bash
root@455ebd1b9508:/# 

# 查看nginx运行使用的基础镜像
root@455ebd1b9508:/# cat /etc/os-release 
PRETTY_NAME="Debian GNU/Linux 10 (buster)"
NAME="Debian GNU/Linux"
VERSION_ID="10"
VERSION="10 (buster)"
VERSION_CODENAME=buster
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/

Docker镜像 写时复制原理

镜像分层的一大好处就是共享资源,例如有多个镜像都来自于同一个base(基础)镜像,那么docker host只需要存储一份base镜像。

  • 内存里也只需要加载一份host,即可为多个容器服务。
  • 即使多个容器共享一个base镜像,某个容器修改了base镜像的内容,例如修改/etc/下的配置文件,其他容器的/etc/下内容是不会被修改的,修改动作只限制在单个容器内,这就是容器写时复制特性(Copy On Write),如下所示。

以上是关于Docker镜像的原理的主要内容,如果未能解决你的问题,请参考以下文章

Docker 镜像-加载原理分层原理commit镜像

Docker-镜像原理

Docker&Kubernetes ❀ Docker image镜像原理解析与分层理论说明

Docker删除报错:Error response from daemon: conflict: unable to delete 08b152afcfae (must be forced)(代码片段

Docker镜像 详细

Docker镜像 详细