Docker镜像的分层结构、Dockerfile的编写及镜像封装优化

镜像的分层结构

  • 在这里插入图片描述
  • 累积木叠加,分层为了共享资源
    在这里插入图片描述

镜像的构建

  • 在这里插入图片描述
  • 在这里插入图片描述
    在这里插入图片描述
  • -d打入后台,-a交互
  • 在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 删除正在运行的,-f;删除已经退出的,直接rm
  • 创建三个文件
  • 退出,容器停掉,数据还在
  • 给容器起名
    在这里插入图片描述
  • 共享,demo3层v1,加了一层
    在这里插入图片描述
  • 删除demo
    在这里插入图片描述
  • 数据保存在demov1,通过其才能看到
    在这里插入图片描述
  • 每个容器都有ID
  • 随机命名
  • 不命名时,-rm回收
    在这里插入图片描述
  • 进入到原始没有,在demov1里
    在这里插入图片描述
  • 删镜像,只删了一层
    在这里插入图片描述
  • 没有人共享就可以把它删掉
  • 从官方镜像,每一层干了什么清楚,便与审计
  • 不用的镜像删掉(推荐)

Dockerfile的编写

  • 创建一个镜像目录
  • 把一个首页拷贝到nginx默认发布目录
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 默认到指定目录寻找文件
    在这里插入图片描述
  • 自动让容器发布目录
    在这里插入图片描述
  • 这个层是在官方里面构建的
    在这里插入图片描述
  • 做端口映射
    在这里插入图片描述
  • 把页面拷到了镜像内
    在这里插入图片描述
    在这里插入图片描述
  • 在这里插入图片描述
  • 启动镜像、拷文件、固定
  • 写一行就是镜像封装成一层
  • 要镜像只需要写一个文件,可复用

Dockerfile详解

Dockerfile常用指令之FROM、MAINTAINER、COPY

  • 在这里插入图片描述
  • 拷贝的数据不支持从根开始
  • dockerfile不是绝对路径而是相对路径,根底下文件所有目录发送到docker引擎
  • 在这里插入图片描述
  • 空目录

Dockerfile常用指令之ADD、ENV

  • 在这里插入图片描述
  • 拷贝原数据一定要放在构建目录之下
  • add来源写url或者压缩包都可以
  • 解压一份数据
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 再次构建,下载放进去
    在这里插入图片描述
  • v2
    在这里插入图片描述
  • 交互后回收
    在这里插入图片描述
  • 镜像后面可以指定命令,不指定会运行默认运行的命令
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 删掉demo
  • env变量,定义对外暴露的端口,监听
    在这里插入图片描述
  • nginx已经有
    在这里插入图片描述
  • 变量,告诉一些信息
  • 这个应用究竟是什么端口(他人构建)

Dockerfile常用指令之EXPOSE、VOLUME、WORKDIR

  • 在这里插入图片描述
  • 卷——做数据持久化
  • 把应用封装到页面不合适
  • 默认挂载点
    在这里插入图片描述
    在这里插入图片描述
  • 直接使用缓存
    在这里插入图片描述
  • 打入后台
    在这里插入图片描述
  • 自动在宿主机创建一个目录,挂接到容器内
    在这里插入图片描述
    在这里插入图片描述
  • docker创建的卷,如果发现容器目录有数据,会自动拷进去
    在这里插入图片描述
  • docker自动创建卷,引擎自动挂进去,发下有数据,自动拷下来
    在这里插入图片描述
  • 目录在宿主机上,容器内是相通的,默认可写
    在这里插入图片描述
  • 在容器内访问数据与宿主机(修改)共享
  • 宿主机持久化到磁盘上
  • 镜像尽量是通用的
  • 卷就是一种数据结藕的方式
    在这里插入图片描述
  • 删除掉,数据还在持久化——保存下来
    在这里插入图片描述
  • 再访问容器时卷还可以挂上去,这时容器是可以坏的,数据不会损失

Dockerfile常用指令之RUN、CMD与ENTRYPOINT

  • 在这里插入图片描述
  • RUN:跑一些基本指令,run表示要在构建镜像中做什么事情
  • 换一个镜像、centos7的镜像
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 本地加载镜像
    在这里插入图片描述
  • 默认有yum源
    在这里插入图片描述
  • 默认开bash
    在这里插入图片描述
  • 进入后有yum源
    在这里插入图片描述
  • 会从外网连接
    在这里插入图片描述
  • 退出来就没了
  • ctrl+p+q,组合键,把容器打入后台
  • 还是运行状态
    在这里插入图片描述
  • attach再次连接上
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 改名,可多次执行
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 开始封包,第一层,自动运行
    在这里插入图片描述
    在这里插入图片描述
  • 每一层干的操作都记录清楚
    在这里插入图片描述
  • CMD是在运行容器时生效,CMD在容器内运行什么样的命令,类似开机自启
  • CMD可被覆盖,而其不可被覆盖,也可以结合

Dockerfile两种编译方法

在这里插入图片描述
在这里插入图片描述

  • 环境变量
    在这里插入图片描述
  • 构建
    在这里插入图片描述
  • 输出
  • 运行后删掉
    在这里插入图片描述
  • 不会解析变量
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 否则不会解析变量
  • 官方推荐
  • 在这里插入图片描述
  • exec写法
    在这里插入图片描述
  • 交互一下
  • cmd会被覆盖,ENTRYPOINT不会被覆盖
  • 通常将CMD和ENTRYPOINT结合使用
    在这里插入图片描述
    在这里插入图片描述
  • 利用cmd可被覆盖的特性
    在这里插入图片描述
  • 类似于shell传参
  • 按照自己需求,封装镜像

镜像封装编译

  • Centos编译nginx,封装
  • add可以支持压缩包
  • 扔到mnt中,自动解压
  • 编译nginx需要包
    在这里插入图片描述
    在这里插入图片描述
  • 关闭debug
    在这里插入图片描述
  • 替换
  • 前面加一个#号
    在这里插入图片描述
  • 复制写入dockerfile
  • 在容器内怎么切工作目录
  • 在容器什么目录运行命令
    在这里插入图片描述
FROM centos:7
ADD nginx-1.21.1.tar.gz /mnt
RUN yum install -y gcc make pcre-devel openssl-devel
WORKDIR /mnt/nginx-1.21.1
RUN sed -i 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc
RUN ./configure --with-http_ssl_module --with-http_stub_status_module
RUN make
RUN make install
COPY index.html /usr/local/nginx/html
CMD ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]

在这里插入图片描述

  • 按照官方写法
  • 删除镜像
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • make install 后做拷贝
    在这里插入图片描述
  • 会覆盖它默认测试页
  • 懂业务部署流程
    在这里插入图片描述
    在这里插入图片描述
  • 不会默认安装make
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • -d打入后台
    在这里插入图片描述
  • 容器起来了
    在这里插入图片描述
  • 地址单调递增
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 成功完成封装
    在这里插入图片描述
  • 编译完成有451兆
  • 比官方的差不多,没有意义,废存储和带宽
  • 容器镜像和操作系统镜像不一样

容器的镜像优化

  • 不指定版本就是最新版
  • docker官方指定仓库
  • :冒号后接标签
    在这里插入图片描述
    在这里插入图片描述
  • 选择最精简的镜像
  • 在这里插入图片描述
  • 编译合并,编译后的清理工作
    在这里插入图片描述
    在这里插入图片描述
  • 尝试减少了镜像层,大小会不会减小
    在这里插入图片描述
  • run动作装很多依赖包占很多大小
  • 把编译好的二进制命令拷贝到目录
  • 通过多阶段构建,把编译的工作压缩到一个容器
  • 产生的临时数据拷出来
    在这里插入图片描述
    在这里插入图片描述
  • 查看二进制程序调用的文件
  • base镜像要有,也有要依赖文件
    在这里插入图片描述
  • 在这里插入图片描述
  • 修改dockerfile
  • 拷贝完成,安装到目录下
  • 再利用一个镜像,进入到第二个容器
  • 从上一个容器拷usr/local/nginx
    在这里插入图片描述
  • 构建v3
    在这里插入图片描述
    在这里插入图片描述
  • 编译后运行
    在这里插入图片描述
  • 可以运行
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 基础镜像还是很大
[root@server1 new]# cat Dockerfile 
FROM nginx:1.18.0 as base

# https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
ARG TIME_ZONE

RUN mkdir -p /opt/var/cache/nginx && \
    cp -a --parents /usr/lib/nginx /opt && \
    cp -a --parents /usr/share/nginx /opt && \
    cp -a --parents /var/log/nginx /opt && \
    cp -aL --parents /var/run /opt && \
    cp -a --parents /etc/nginx /opt && \
    cp -a --parents /etc/passwd /opt && \
    cp -a --parents /etc/group /opt && \
    cp -a --parents /usr/sbin/nginx /opt && \
    cp -a --parents /usr/sbin/nginx-debug /opt && \
    cp -a --parents /lib/x86_64-linux-gnu/ld-* /opt && \
    cp -a --parents /lib/x86_64-linux-gnu/libpcre.so.* /opt && \
    cp -a --parents /lib/x86_64-linux-gnu/libz.so.* /opt && \
    cp -a --parents /lib/x86_64-linux-gnu/libc* /opt && \
    cp -a --parents /lib/x86_64-linux-gnu/libdl* /opt && \
    cp -a --parents /lib/x86_64-linux-gnu/libpthread* /opt && \
    cp -a --parents /lib/x86_64-linux-gnu/libcrypt* /opt && \
    cp -a --parents /usr/lib/x86_64-linux-gnu/libssl.so.* /opt && \
    cp -a --parents /usr/lib/x86_64-linux-gnu/libcrypto.so.* /opt && \
    cp /usr/share/zoneinfo/${TIME_ZONE:-ROC} /opt/etc/localtime

FROM gcr.io/distroless/base-debian10

COPY --from=base /opt /

EXPOSE 80 443

ENTRYPOINT ["nginx", "-g", "daemon off;"]

在这里插入图片描述

  • 导入本地镜像
    在这里插入图片描述
  • 库文件有依赖性
  • 运行报错,得一个个拷,解决依赖性
    在这里插入图片描述
    在这里插入图片描述
  • 从官方的二进制程序的库文件拷出
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 把官方数据拷入一个更小的镜像
    在这里插入图片描述
    在这里插入图片描述
  • 运行不起来,版本不同,base环境不一样
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 用的镜像是当前最新的,用的镜像是当前最新的
  • 拷贝后不生效
  • 镜像路径发生变化
    在这里插入图片描述
  • 删除原有容器
    在这里插入图片描述
    在这里插入图片描述
  • 查看拷的文件对不对
    在这里插入图片描述
    在这里插入图片描述
  • 内置pcre版本不对
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 删除v4
    在这里插入图片描述
  • 起不来
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 再删镜像
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • docker镜像仓库,v5优化
    在这里插入图片描述
    在这里插入图片描述
  • ldd查看动态库文件
    在这里插入图片描述
  • 把dockerfile中路径改掉
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • awk删掉
    在这里插入图片描述
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值