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&Kubernetes ❀ Docker image镜像原理解析与分层理论说明
Docker删除报错:Error response from daemon: conflict: unable to delete 08b152afcfae (must be forced)(代码片段