栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

Docker——2、镜像

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Docker——2、镜像

Docker——镜像
  • 镜像的分层结构
  • 镜像的构建
    • docker commit
    • Dockerfile
      • Dockerfile详解
          • 常见指令
        • shell与exec格式的区别
  • 如何封装完整的镜像
  • 镜像的优化
    • 减少镜像层
    • 多阶段构建镜像
    • 选择精简的基础镜像


镜像的分层结构

base image通常是操作系统的根目录。
同一docker主机支持多种Linux发行版,因为Linux的内核一样。只是不同发行版Linux的根文件系统不同。
在base image上一层一层的叠加。当出现不同的层的数据是一样的,那么就会以最上面的一层为主。在写的时候,镜像层是不可写的。当需要写的时候,在镜像层的最上方创建一个可写容器层,将数据全部写入,然后再提交成一个镜像。

为什么要分层?
为了要共享资源
多个镜像版本之间共同的层,就只保留一份就行。

最上面一层是容器层,是可写的,下面的镜像层都是只读的。
Copy-on-Write意思是当修改时,才会把数据从下到上复制过去。

镜像的构建

docker commit 构建新镜像三部曲
• 运行容器
• 修改容器
• 将容器保存为新的镜像
缺点:
• 效率低、可重复性弱、容易出错
• 使用者无法对镜像进行审计,存在安全隐患

docker commit




使用docker commit 构建有一些缺点:

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

这种方式可重用
Dockerfile的每一层都是通过docker commit来提交的。

#cat Dockerfile
FROM nginx   通过base镜像先启动一个容器
COPY index.html  /usr/share/nginx/html  向容器中拷贝一个文件,通过dokercommit将该层提交到一个镜像层中





Dockerfile详解 常见指令
dockerfile常用指令
• FROM
指定base镜像,如果本地不存在会从远程仓库下载。
• MAINTAINER
设置镜像的作者,比如用户邮箱等。
• COPY
把文件从build context复制到镜像
支持两种形式: COPY src dest  或者   COPY ["src", "dest"]
src必须指定build context中的文件或目录
src必须在指定的构建目录中,只能用相对路径

拷贝的数据不支持从根开始,不能用绝对路径。 而且Dockerfile尽量放在一个空目录下面,不要放在根下面

• ADD
用法与COPY类似,不同的是src可以是归档压缩文件,文件会被自动解压到dest,也可以自动下载URL并拷贝到镜像:
ADD html.tar /var/www
ADD http://ip/html.tar /var/www
• ENV
设置环境变量,变量可以被后续的指令使用:
ENV HOSTNAME sevrer1.example.com
• EXPOSE
如果容器中运行应用服务,可以把服务端口暴露出去:
EXPOSE 80
• VOLUME
申明数据卷,通常指定的是应用的数据挂在点:
VOLUME ["/var/www/html"]
用于做数据持久化,
• WORKDIR
为RUN、 CMD、 ENTRYPOINT、 ADD和COPY指令设置镜像中的当
前工作目录,如果目录不存在会自动创建。
• RUN
在容器中运行命令并创建新的镜像层,常用于安装软件包:
RUN yum install -y vim
• CMD 与 ENTRYPOINT
这两个指令都是用于设置容器启动后执行的命令,但CMD会被docker
run后面的命令行覆盖,而ENTRYPOINT不会被忽略,一定会被执行。
docker run后面的参数可以传递给ENTRYPOINT指令当作参数。
Dockerfile中只能指定一个ENTRYPOINT,如果指定了很多,只有最
后一个有效。

--rm 默认退出就回收,ctrl + p+q 组合键就会把容器打到后台去,然后使用“docker attach 后台容器名称 ” 再连接上去。







docker rm -f demo //删除正在运行的容器 docker rm demo //删除容器










shell与exec格式的区别








如何封装完整的镜像







镜像的优化

在构建的完整镜像webserver:v1的基础上,对该镜像进行优化。
整体优化目标:

  • 选择最精简的基础镜像
  • 减少镜像的层数
  • 清理镜像构建的中间产物
  • 注意优化网络请求
  • 尽量去用构建缓存
  • 使用多阶段构建镜像
减少镜像层

webserver:v1为461M
减少镜像层之后,webserver:v2 大小为317M,


二进制程序在系统中运行时,需要调用动态库文件,base镜像如果不能提供这些文件就需要在构建镜像时,拷贝这些文件

多阶段构建镜像


使用多阶段构建镜像,原本webserver:v2 有317M
使用后,webserver:v3 有205M

选择精简的基础镜像

首先下载base-debian11.tar
并加载
base-debian是非常精简的base镜像,不带动态库文件

查看重构后的镜像大小,只有33.7 MB,所以在实际构建中尽量选
择最精简的base镜像。


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/866159.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号