Docker镜像的原理
Docker运行的整个生命周期
Docker使用多种操作系统的发行版
- 一个完整的操作系统,是由linux内核+发行版,组成的一个可以使用的完整操作系统。
- 利用docker容器,可以获不同的发行版镜像,然后基于该镜像,运行出各种容器去使用。
查看操作系统的两大组成
# 查看操作系统的发行版
cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
# 查看操作系统内核
uname -r
4.19.12-1.el7.elrepo.x86_64
使用docker,来切换不同的发行版,内核都是使用宿主机的内核
# 利用docker获取不同的发行版镜像
docker pull ubuntu
docker pull centos:7.8.2003
# 确认当前宿主机的发行版本
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@e332fe985eac /]# cat /etc/redhat-release
CentOS Linux release 7.8.2003 (Core)
# 退出当前的容器空间
exit
# 查看虚拟机的操作系统内核
uname -r
4.19.12-1.el7.elrepo.x86_64
# 进入ubuntu系统
docker run -it ubuntu bash
# 查看容器内ubuntu的发行版本
root@5ea99c3a44f1:/# cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=22.04
DISTRIB_CODENAME=jammy
DISTRIB_DESCRIPTION="Ubuntu 22.04 LTS"
# 查看ubuntu的操作系统内核(公用宿主机内核)
root@5ea99c3a44f1:/# uname -r
4.19.12-1.el7.elrepo.x86_64
Docker部署服务的优势
Docker镜像原理
Docker镜像 分层原理
# 进入正在运行的容器内
docker exec -it 18c7f9820954 bash
# 查看nginx运行使用的基础镜像
root@18c7f9820954:/# cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 11 (bullseye)"
NAME="Debian GNU/Linux"
VERSION_ID="11"
VERSION="11 (bullseye)"
VERSION_CODENAME=bullseye
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),如下所示。
共有 0 条评论