docker(二)——镜像_docker 七牛镜像-程序员宅基地

技术标签: Linux  运维  linux  docker  

1:镜像的分层结构

docker 镜像共享宿主机的kernel,base镜像提供的是最小的Linux发行版,同一docker主机支持运行多种Linux发行版。
在这里插入图片描述
比如我们在宿主机上拉取一个busybox镜像,以交互式运行一个容器,执行uname -r命令,可以发现在容器中的操作系统和内核版本与宿主机相同。
在这里插入图片描述
一个docker镜像由多个只读的镜像层组成,然后运行的容器会在这个docker的镜像上面多加一层可写的容器层,docker从上往下依次查找文件,容器层以下所有镜像层都是只读的,任何对容器的更改都只存在此容器层,并不会对镜像本身进行修改。同时,采用分层结构的最大好处就是:共享资源。
一个镜像最多127层。
在这里插入图片描述
比如 ,我们拉取一个busybox镜像,执行docker history busybox查看这个镜像的创建历史,可以看到一共有两层。
在这里插入图片描述
我们以交互式运行一个busybox的容器,在test容器中创建几个新的文件后,使用docker commit -m "v1" test demo:v1命令,从容器创建一个新的镜像demo:v1。
在这里插入图片描述
对比demo:v1和busybody的创建历史,demo:v1在前两层的基础上新建了一层镜像。
在这里插入图片描述
使用docker rmi demo:v1命令删除demo:v1镜像,发现只删除了最上面的一层,因为busybox还在使用最基础的两层镜像。

2:镜像的构建

根据以上实验,我们可以看到使用docker commit创建新镜像,分为以下三步:

  • 运行容器
  • 修改容器
  • 将容器保存为新的镜像

这样做的缺点是:

  • 效率低、可重复性弱、容易出错
  • 使用者无法对镜像进行审计,存在安全隐患。

因为,我们接下来可以通过创建dockerfile来构造镜像。

3:dockerfile的创建

Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。每条指令都必须为大写字母,切后面要跟随一个参数。Dockerfile中的指令会按照顺序从上到下执行,所以应该根据需要合理安排指令的顺序。每条指令都会创建一个新的镜像层并对镜像进行提交。Docker大体上按照如下流程执行Dockerfile中的指令。
Dockerfile构建构过程:

  • 从基础镜像运行一个容器
  • 执行一条指令,对容器做出修改
  • 执行类似docker commit 的操作,提交一个新的镜像层
  • 再基于刚提交的镜像运行一个新容器
  • 执行Dockerfile中的下一条指令,直至所有指令执行完毕

下面我们通过构造一个dockerfile的实例来了解它的工作原理。
创建一个目录,在dockerfile目录下新建一个dockerfile文件,然后编写一个完整的dockerfile,内容如下;

FROM busybox  ##指定一个基础镜像busybox,本地没有的话,会从网络上pull
RUN echo "hello world">testfile  ##构建镜像时执行  echo "hello world">testfile 这个命令

使用dockerfile创建一个新的镜像demo:v3 (docker build 创建镜像的命令, -f 指定dockerfile文件,镜像的名字及标签 ,后面跟的是路径," . "表示当前路径);
在这里插入图片描述
查看demo:v3的创建历史,我们可以看到镜像内的所有操作,便于审计;
在这里插入图片描述
同时,dockerfile也是可以缓存,我们在demo:v3的dockerfile上增加一条指令;

FROM busybox
RUN echo "hello world">testfile
RUN  rm -fr testfile

使用新的dockerfile构建demo:v4镜像,我们可以看到前面的指令是使用了缓存的,更高效的利用系统资源。
在这里插入图片描述

4: 镜像加速

国内从 DockerHub 拉取镜像有时会遇到困难,此时可以配置镜像加速器。Docker 官方和国内很多云服务商都提供了国内加速器服务,例如:

  • 科大镜像:https://docker.mirrors.ustc.edu.cn/
  • 网易:https://hub-mirror.c.163.com/
  • 阿里云:https://<你的ID>.mirror.aliyuncs.com
  • 七牛云加速器:https://reg-mirror.qiniu.com

当配置某一个加速器地址之后,若发现拉取不到镜像,请切换到另一个加速器地址。国内各大云服务商均提供了 Docker 镜像加速服务,建议根据运行 Docker 的云平台选择对应的镜像加速服务。
阿里云镜像获取地址:登陆后,左侧菜单选中镜像加速器就可以看到你的专属地址了:
在这里插入图片描述
对于使用 systemd 的系统,请在 /etc/docker/daemon.json 中写入如下内容(如果文件不存在请新建该文件):

{
    "registry-mirrors":["https://xxxx.aliyuncs.com/"]}

之后重新启动服务:

 systemctl daemon-reload
 systemctl restart docker 
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_42006358/article/details/120297890

智能推荐

c# 调用c++ lib静态库_c#调用lib-程序员宅基地

文章浏览阅读2w次,点赞7次,收藏51次。四个步骤1.创建C++ Win32项目动态库dll 2.在Win32项目动态库中添加 外部依赖项 lib头文件和lib库3.导出C接口4.c#调用c++动态库开始你的表演...①创建一个空白的解决方案,在解决方案中添加 Visual C++ , Win32 项目空白解决方案的创建:添加Visual C++ , Win32 项目这......_c#调用lib

deepin/ubuntu安装苹方字体-程序员宅基地

文章浏览阅读4.6k次。苹方字体是苹果系统上的黑体,挺好看的。注重颜值的网站都会使用,例如知乎:font-family: -apple-system, BlinkMacSystemFont, Helvetica Neue, PingFang SC, Microsoft YaHei, Source Han Sans SC, Noto Sans CJK SC, W..._ubuntu pingfang

html表单常见操作汇总_html表单的处理程序有那些-程序员宅基地

文章浏览阅读159次。表单表单概述表单标签表单域按钮控件demo表单标签表单标签基本语法结构<form action="处理数据程序的url地址“ method=”get|post“ name="表单名称”></form><!--action,当提交表单时,向何处发送表单中的数据,地址可以是相对地址也可以是绝对地址--><!--method将表单中的数据传送给服务器处理,get方式直接显示在url地址中,数据可以被缓存,且长度有限制;而post方式数据隐藏传输,_html表单的处理程序有那些

PHP设置谷歌验证器(Google Authenticator)实现操作二步验证_php otp 验证器-程序员宅基地

文章浏览阅读1.2k次。使用说明:开启Google的登陆二步验证(即Google Authenticator服务)后用户登陆时需要输入额外由手机客户端生成的一次性密码。实现Google Authenticator功能需要服务器端和客户端的支持。服务器端负责密钥的生成、验证一次性密码是否正确。客户端记录密钥后生成一次性密码。下载谷歌验证类库文件放到项目合适位置(我这边放在项目Vender下面)https://github.com/PHPGangsta/GoogleAuthenticatorPHP代码示例://引入谷_php otp 验证器

【Python】matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距-程序员宅基地

文章浏览阅读4.3k次,点赞5次,收藏11次。matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距

docker — 容器存储_docker 保存容器-程序员宅基地

文章浏览阅读2.2k次。①Storage driver 处理各镜像层及容器层的处理细节,实现了多层数据的堆叠,为用户 提供了多层数据合并后的统一视图②所有 Storage driver 都使用可堆叠图像层和写时复制(CoW)策略③docker info 命令可查看当系统上的 storage driver主要用于测试目的,不建议用于生成环境。_docker 保存容器

随便推点

网络拓扑结构_网络拓扑csdn-程序员宅基地

文章浏览阅读834次,点赞27次,收藏13次。网络拓扑结构是指计算机网络中各组件(如计算机、服务器、打印机、路由器、交换机等设备)及其连接线路在物理布局或逻辑构型上的排列形式。这种布局不仅描述了设备间的实际物理连接方式,也决定了数据在网络中流动的路径和方式。不同的网络拓扑结构影响着网络的性能、可靠性、可扩展性及管理维护的难易程度。_网络拓扑csdn

JS重写Date函数,兼容IOS系统_date.prototype 将所有 ios-程序员宅基地

文章浏览阅读1.8k次,点赞5次,收藏8次。IOS系统Date的坑要创建一个指定时间的new Date对象时,通常的做法是:new Date("2020-09-21 11:11:00")这行代码在 PC 端和安卓端都是正常的,而在 iOS 端则会提示 Invalid Date 无效日期。在IOS年月日中间的横岗许换成斜杠,也就是new Date("2020/09/21 11:11:00")通常为了兼容IOS的这个坑,需要做一些额外的特殊处理,笔者在开发的时候经常会忘了兼容IOS系统。所以就想试着重写Date函数,一劳永逸,避免每次ne_date.prototype 将所有 ios

如何将EXCEL表导入plsql数据库中-程序员宅基地

文章浏览阅读5.3k次。方法一:用PLSQL Developer工具。 1 在PLSQL Developer的sql window里输入select * from test for update; 2 按F8执行 3 打开锁, 再按一下加号. 鼠标点到第一列的列头,使全列成选中状态,然后粘贴,最后commit提交即可。(前提..._excel导入pl/sql

Git常用命令速查手册-程序员宅基地

文章浏览阅读83次。Git常用命令速查手册1、初始化仓库git init2、将文件添加到仓库git add 文件名 # 将工作区的某个文件添加到暂存区 git add -u # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,不处理untracked的文件git add -A # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,包括untracked的文件...

分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120-程序员宅基地

文章浏览阅读202次。分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120

【C++缺省函数】 空类默认产生的6个类成员函数_空类默认产生哪些类成员函数-程序员宅基地

文章浏览阅读1.8k次。版权声明:转载请注明出处 http://blog.csdn.net/irean_lau。目录(?)[+]1、缺省构造函数。2、缺省拷贝构造函数。3、 缺省析构函数。4、缺省赋值运算符。5、缺省取址运算符。6、 缺省取址运算符 const。[cpp] view plain copy_空类默认产生哪些类成员函数

推荐文章

热门文章

相关标签