docker镜像原理(二)
一、docker镜像定义
如果我们想要定义mysql5.7镜像应该怎么做?
- 获取基础镜像,选择一个发行版平台(unbtu、centos)
- 在centos镜像中安装mysql5.7软件
- 导出镜像,可以命名为mysql:5.7镜像文件
如何查看镜像的发行版本
# 查看运行镜像的id
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cd9656d00ee8 nginx "/docker-entrypoint.…" 32 hours ago Up 32 hours 0.0.0.0:80->80/tcp, :::80->80/tcp nginx
# 通过exec进入正在运行容器内部
[root@localhost ~]# docker exec -it cd9656d00ee8 bash
root@cd9656d00ee8:/#
# 查看镜像使用的环境,每个镜像使用的系统环境可能不一样,这里以nginx为例使用的Debian GNU/Linux 11 (bullseye)系统,所以查看系统环境的命令如下
[root@cd9656d00ee8:/# cat /etc/os-release
从这个工程,我们可以感觉出来是一层一层添加的,docker镜像的层级概念就出来了,底层是Debian镜像,上层是nginx镜像,Debian镜像属于父类镜像
- Docker镜像是在基础镜像之后,然后安装软件,配置软件,添加新层,构建出来。
- 这种现象在学习dockefile的时候更为清晰。
docker为什么要分层镜像?
- 镜像分层的好处就是资源共享,例如有多个镜像都来自于一个base镜像,那么在docker host只需要存一份base镜像就可以了
- 内存中也只需要在家一份host,即可为多个容器服务
- 即使多个容器共享一个base镜像,某个容器修改了base镜像的内容,例如修改/etc/下的配置文件,其他容器的/etc/下的内容也不会被修改的没修改动作只限制在单个容器内,这就是容器的写入时复制特性(Copy-on-write)
可写的容器层
当容器的启动后,一个新的可写层被加载到镜像的顶部,这层通常被称为容器层,容器层下的都称为镜像层。
所有对容器的修改操作,只会发生在容器层里,只有容器层是可写层,其余镜像层都只读。
文件操作 | 说明 |
---|---|
添加文件 | 新文件被添加到容器层(可写层)中 |
读取文件 | Docker会从上往下一次在各个镜像层中查找此文件。一但找到,立即将其复制到容器层,然后打开并读入内存。 |
修改文件 | Docker会从上往下一次在各个镜像层中查找此文件。一但找到,立即将其复制到容器层,然后开始修改 |
删除文件 | Docker会从上往下一次在各个镜像层中查找此文件。一但找到,会在容器中记录下次删除操作(只是记录操作并不会真正的执行删除) |
分层管理优点
只有修改的时候会对数据进行复值,这种特性叫做写时复制(Copy-on-write)。可见容器层只保存了镜像变化的部分不会对基础镜像进行任何更改。
这样我们就可以解释前面的提出的问题:容器层记录对镜像的修改,所有镜像层都是只读的,不会被容器修改,所以镜像可以被多个容器共享。
大大方便了Docker镜像的分发和存储。
docker镜像代表一个容器文件管理系统,镜像层级技术通过联合文件系统(UnionFS)来实现的
因此在多个容器无论进行任何操作都不会影响到base镜像。
补充:查看各个系统发行版的命令
# Debian GNU系统发行版
cat /etc/os-release
# centos系统发行版
cat /etc/redhat-release
# 查看ubuntu系统发行版
cat /etc/lsb-release
# 查看sesu系统发行版
cat /etc/SuSE-release
所有博客仅用于自己学习记录,如有侵权请联系删除,文章来源于公开视频资料,如有需要请移步这里:
docker镜像原理(二)的更多相关文章
- 深入分析 Docker 镜像原理
摘要:近日, DaoCloud 软件工程师孙宏亮在 CSDN Container 微信群为大家带来了 Docker 镜像原理的深度分享,本次分享的重点是 Docker 镜像,分享的内容主要包含两个部分 ...
- Dockerfile自动制作Docker镜像(二)—— 其它常用命令
Dockerfile自动制作Docker镜像(二)-- 其它常用命令 前言 a. 本文主要为 Docker的视频教程 笔记. b. 环境为 CentOS 7.0 云服务器 c. 上一篇:Dockerf ...
- Docker镜像原理
⒈是什么? 镜像是一种轻量级.可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码.运行时.库.环境变量以及配置文件等. 引用 UnionFs( ...
- 搭建docker镜像仓库(二):使用harbor搭建本地镜像仓库
目录 一.系统环境 二.前言 三.Harbor 四.使用harbor搭建私有镜像仓库 4.1 环境介绍 4.2 k8smaster节点安装配置harbor 4.2.1 安装harbor离线包 4.2. ...
- Docker镜像原理和最佳实践
https://yq.aliyun.com/articles/68477 https://yq.aliyun.com/articles/57126 DockerCon 2016 深度解读: Dock ...
- Docker基础修炼2--Docker镜像原理及常用命令
通过前文的讲解对Docker有了基本认识之后,我们开始进入实战操作,本文先演示Docker三要素之镜像原理和相关命令. 本文的演示环境仍然沿用上一篇文章在本地Centos7中安装的环境,如果你本地没有 ...
- Docker 学习3 Docker镜像管理基础
一.docker 常用操作及原理 1.docker 常用操作 2.docker 机制 1.docker client端是通过http或者https与server端通信的.个 2.docker 镜像可以 ...
- 004.Docker镜像管理
一 镜像基本操作 镜像是一个包含程序运行必要依赖环境和代码的只读文件,其本质是磁盘上一系列文件的集合.它采用分层的文件系统,将每一次改变以读写层的形式增加到原来的只读文件上.镜像是容器运行的基石. 1 ...
- docker运行原理与使用总结
docker运行原理概述 Client-Server架构 docker守护进程运行在宿主机上systemctl start docker daemon进程通过socket从客户端(docker命令)接 ...
- Dockerfile 自动制作 Docker 镜像(三)—— 镜像的分层与 Dockerfile 的优化
Dockerfile 自动制作 Docker 镜像(三)-- 镜像的分层与 Dockerfile 的优化 前言 a. 本文主要为 Docker的视频教程 笔记. b. 环境为 CentOS 7.0 云 ...
随机推荐
- C++调用C#DLL并调试
使用C++ 来调用C#DLL 并且调试程序 环境:使用VS studio 2019 C#项目的设置 1.C# -> 属性 -> 应用程序 -> 目标框架 ->.NET Fram ...
- Matplotlib 实现画中画
需要导入的包 inset_axes 要实现画中画,即在原画轴上添加新轴,需要用到mpl_toolkits.axes_grid1.inset_locator的inset_axes. 基本用法 new_a ...
- N63050 第三周运维作业
五.文本处理工具和正则表达式1.基本正则表达式(53分钟)2.基本正则表达式和扩展正则表达式(50分钟)3.文本处理三剑客之grep(43分钟)4.shell脚本编程基础知识(14分钟)5.shell ...
- Ansible scp Python脚本
import osimport paramiko def RemoteScp(host_ip, host_port, host_username, host_password, remote_path ...
- 7.Object
Object类 超类.基类,所以类的直接或间接父类,位于继承树的最顶层 任何类,如没有书写extends显示继承某个类,都默认直接继承Object类,否则为间接继承 Object类中所定义的方法,是所 ...
- xxx.app 已损坏,无法打开,你应该将它移到废纸篓/打不开 xxx,因为它来自身份不明的开发者解决方法
xxx已损坏,无法打开,你应该将它移到废纸篓解决办法 打不开 xxx,因为它来自身份不明的开发者 打不开xxxx,因为 Apple 无法检查其是否包含恶意软件 在安装的时候提示加载失败! 解决: 打开 ...
- vue组件自调用
组件自调用 在vue中有些情况下我们会用到组件本身来遍历出自己想要的效果. 其实非常简单,可以在模板中使用name属性值,来调用自己 <template> <el-submenu v ...
- Python的入门学习Day 10——form”夜曲编程“
Day 10 time:2021.8.7. 今天本来打算学习时发现手机应该拿去充电了,再上完J课程之后发现时间确实只留到了晚上呢 .但幸好,以我多天的敲代码的牢固根基(哈哈哈),我最终还是弥补回来了. ...
- ubuntu下ntp时间同步
1. 首先安装ntp服务(ubuntu 16.02)在linux的root用户下执行以下命 sudo apt-get install ntp (如果不是ubuntu系统则执行 yum insta ...
- 问题记录_IDEA版本2021.2.3_debug时变量显示不全(只显示线程附近部分)
问题记录_IDEA版本2021.2.3_debug时变量显示不全(只显示线程附近部分) 起因 把IDEA的版本从2019升级到了2021.2.3,在debug的时候发现变量的值能看到的很少,并不像20 ...