当前位置: 首页 > news >正文

电子商务网站建设 精品课程分销pc网站

电子商务网站建设 精品课程,分销pc网站,佛山产品推广,百度站长工具排名镜像是 Docker 容器的基石,容器是镜像的运行实例,有了镜像才能启动容器; 如果只是使用镜像,直接通过 docker 命令下载和运行就可以了,但如果我们想创建自己的镜像,或者想理解 Docker 为什么是轻量级的&…

镜像是 Docker 容器的基石,容器是镜像的运行实例,有了镜像才能启动容器;

如果只是使用镜像,直接通过 docker 命令下载和运行就可以了,但如果我们想创建自己的镜像,或者想理解 Docker 为什么是轻量级的,则要讨论镜像的内部结构;

一 、hello-world 镜像

hello-world 是 Docker 官方提供的一个镜像,通常用来验证 Docker 是否安装成功;

使用 docker pull 从 Docker Hub 下载它:

 用 docker images 命令查看镜像的信息:

 通过 docker run 运行:

 通常来说,镜像能提供一个基本的操作系统环境,用户可以根据需要安装和配置软件,这样的镜像我们称作 base 镜像;

 二、base 镜像

base 镜像有两层含义:不依赖其他镜像,从 scratch 构建;其他镜像可以之为基础进行扩展;

base 镜像提供的是最小安装的 Linux 发行版;

故能称作 base 镜像的通常都是各种 Linux 发行版的 Docker 镜像,比如 Ubuntu, Debian, CentOS 等;

我们以 CentOS 为例考察 base 镜像包含哪些内容;

下面是 CentOS 镜像的 Dockerfile 的内容:

第二行 ADD 指令添加到镜像的 tar 包就是 CentOS 7 的 rootfs。在制作镜像时,这个 tar 包会自动解压到 / 目录下,生成 /dev, /porc, /bin 等目录;

Linux 操作系统由内核空间和用户空间组成;

内核空间是 kernel,Linux 刚启动时会加载 bootfs 文件系统,之后 bootfs 会被卸载掉,

用户空间的文件系统是 rootfs,包含我们熟悉的 /dev, /proc, /bin 等目录;

对于 base 镜像来说,底层直接用 Host 的 kernel,自己只需要提供 rootfs 就行了

不同 Linux 发行版的区别主要就是 rootfs;所以 Docker 可以同时支持多种 Linux 镜像,模拟出多种操作系统环境;

Docker 支持通过扩展现有镜像,创建新的镜像;

实际上,Docker Hub 中 99% 的镜像都是通过在 base 镜像中安装和配置需要的软件构建出来的

三、镜像的分层结构

我们现在构建一个新的镜像,Dockerfile 如下:

① 新镜像不再是从 scratch 开始,而是直接在 Debian base 镜像上构建。
② 安装 emacs 编辑器。
③ 安装 apache2。
④ 容器启动时运行 bash

构建过程如下图所示:

可以看到,新镜像是从 base 镜像一层一层叠加生成的。每安装一个软件,就在现有镜像的基础上增加一层;

Docker 镜像采用这种分层结构,最大的一个好处就是 - 共享资源;

那么就有个问题:如果多个容器共享一份基础镜像,当某个容器修改了基础镜像的内容,比如 /etc 下的文件,这时其他容器的 /etc 是否也会被修改?答案是不会!修改会被限制在单个容器内。

接下来我们来解释一下原因:

可写的容器层

当容器启动时,一个新的可写层被加载到镜像的顶部,这一层通常被称作“容器层”,“容器层”之下的都叫“镜像层”;

所有对容器的改动 - 无论添加、删除、还是修改文件都只会发生在容器层中;只有容器层是可写的,容器层下面的所有镜像层都是只读的;

在容器层中,用户看到的是一个叠加之后的文件系统:

添加文件:在容器中创建文件时,新文件被添加到容器层中。

读取文件 :在容器中读取某个文件时,Docker 会从上往下依次在各镜像层中查找此文件。一旦找到,打开并读入内存。

修改文件 :在容器中修改已存在的文件时,Docker 会从上往下依次在各镜像层中查找此文件。一旦找到,立即将其复制到容器层,然后修改之。

删除文件 :在容器中删除文件时,Docker 从上往下依次在镜像层中查找此文件。找到后,会在容器层中记录下此删除操作

只有当需要修改时才复制一份数据,这种特性被称作 Copy-on-Write。可见,容器层保存的是镜像变化的部分,不会对镜像本身进行任何修改,这样就解释了我们前面提出的问题:容器层记录对镜像的修改,所有镜像层都是只读的,不会被容器修改,所以镜像可以被多个容器共享;

四、构建镜像的两种方式

几乎所有常用的数据库、中间件、应用软件等都有现成的 Docker 官方镜像或其他人和组织创建的镜像,我们只需要稍作配置就可以直接使用;当然,某些情况下我们也不得不自己构建镜像,Docker 提供了两种构建镜像的方法:

1. docker commit 命令

2. Dockerfile 构建文件

方式一:docker commit方式构建镜像

docker commit 命令是创建新镜像最直观的方法,其过程包含三个步骤:

1.  运行容器

2. 修改容器

3. 将容器保存为新的镜像

举个例子:在 ubuntu base 镜像中安装 vi 并保存为新镜像:

第一步, 运行容器:终端执行命令:

docker run -it ubuntu

 具体效果如下所示:

第二步:安装 vim

终端执行命令:

apt-get install vim

具体效果如下:

如果出现如下错误:

则先执行apt-get update命令,然后再次执行apt-get install vim命令:

具体结果截图如下:

第三步:保存为新镜像

在新窗口中查看当前运行的容器:

 执行 docker commit 命令将容器保存为镜像

新镜像命名为 ubuntu-with-vi;

查看新镜像的属性:

从 size 上看到镜像因为安装了软件而变大了,从新镜像启动容器,验证 vi 已经可以使用;

然而,Docker 并不建议用户通过这种方式构建镜像;因为这是一种手工创建镜像的方式,容易出错,效率低且可重复性弱

方式二:Dockerfile方式构建镜像

Dockerfile 是一个文本文件,记录了镜像构建的所有步骤;

第一步:准备Dockerfile 

第二步:docker build 命令构建镜像

运行 docker build 命令,-t 将新镜像命名为 ubuntu-with-vi-dockerfile,命令末尾的 . 指明 build context 为当前目录,Docker 默认会从 build context 中查找 Dockerfile 文件,我们也可以通过 -f 参数指定 Dockerfile 的位置

具体结果部分片段截图如下所示:

通过 docker images 查看镜像信息:

镜像 ID 为 35ca89798937,与构建时的输出一致;

此时,通过 docker history 命令此时去查看镜像分层结构:

docker history 会显示镜像的构建历史,也就是 Dockerfile 的执行过程;

具体结果如下图所示:

ubuntu-with-vi-dockerfile 与 ubuntu 镜像相比,确实只是多了顶部的一层 35ca89798937,由 apt-get 命令创建,大小为 97.07MB。docker history 也向我们展示了镜像的分层结构,每一层由上至下排列;

五、镜像的缓存特性

Docker 会缓存已有镜像的镜像层,构建新镜像时,如果某镜像层已经存在,就直接使用,无需重新创建;

还是上面的例子,在Dockerfile中添加一些新的内容

第一步:准备文件,Dockerfile和test_file;

第二步:执行docker build 命令

如果我们希望在构建镜像时不使用缓存,可以在 docker build 命令中加上 --no-cache 参数;

需要注意的是,Dockerfile 中每一个指令都会创建一个镜像层,上层是依赖于下层的,无论何时,只要某一层发生变化,其上面所有层的缓存都会失效.也就是说,如果我们改变 Dockerfile 指令的执行顺序,或者修改或添加指令,都会使缓存失效;

比如交换前面 RUN 和 COPY 的顺序:

第一步:修改Dockerfile文件内容

第二步:执行docker build 命令

可以看到生成了新的镜像层 bc87c9710f40,缓存已经失效;

此外,除了构建时使用缓存,Docker 在下载镜像时也会使用;

http://www.yayakq.cn/news/11018/

相关文章:

  • 淄博网站建设培训学校威海建设局网站楼盘信息公布
  • wordpress建站过时了网站策划 ppt
  • 网站seo课设厦门网站建设满山红
  • 常熟网站建设icp备案wpautop wordpress
  • 黑龙江省中国建设银行网站首页设计素材免费下载
  • 盐城市城乡和住房建设厅网站德州网站制作
  • 怎么评价一个网站设计做的好坏中国建筑工程网承包企业管理系统
  • 做网站需要注册吗东道设计公司难进吗
  • 网站建设怎么在图片上加字网站发布初期的推广
  • 山东住房和城乡建设局网站首页磁力狗在线
  • ps常用素材网站有哪些微商城怎么开发
  • idc 网站源码马鞍山专业网站制作
  • 北京易思腾网站建设江门国际网
  • 用虚拟机做服务器搭建网站html新闻列表
  • 网站开发后端待遇php网站代做是什么意思
  • 怎么做透明的网站图片网站制作学什么
  • 建网站一般最低多少钱大连学网站制作
  • 企业网站建设方案ppt泰州网站建设外包
  • 苏州城乡住房建设厅网站设计工作室网站
  • 北京餐饮培训网站建设wordpress前端找回密码
  • 诸葛建站官网Wordpress增加QQ分享
  • 网站把域名解析到新ip后网站建设 自动跳转
  • 长春做网站优化的公司seo网址超级外链工具
  • 阿里网站年费续费怎么做分录网站开发外包公司
  • 青岛网站建设的方案网站视频不能下载怎么保存视频
  • 旅游型网站的建设背景图片知乎 淘宝网站建设
  • wordpress最好用的采集插件如何优化网站代码
  • 淮安软件园网站建设外贸网站做哪些语言
  • 网站建设公司运营计划部署推进网站建设
  • 找人帮忙做网站观澜网站建设