freebsd查看服务_架构师修炼之微服务部署 - 深入理解Docker镜像

本文详细介绍了Docker的基础概念,包括镜像的定义、Dockerfile的使用、镜像分层原理,以及如何通过镜像优化来提高构建效率。重点讲解了镜像构建过程中的分层策略和容器与镜像的关系,为微服务部署提供了实践指导。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Docker各类知识点进行整理分享,其他内容请参考目录。

目录

  • 架构师修炼之微服务部署 - Docker简介
  • 架构师修炼之微服务部署 - 深入理解Docker镜像

镜像简介

它是一个创建Docker 容器的只读模板,通过DockerFile可以自定义镜像。它也是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。

Dockerfile简介

Dockerfile是一个文本文件,其内包含了创建镜像(image)所需要的所有指令(Instruction)。使用docker build有序的执行文件中每一条指令,每一条指令构建一层,构建的层通过UnionFS组合起来形成一个只读的镜像。

UnionFS简介

它是一个Linux和FreeBSD的文件系统服务。通过它可以将多个不同文件系统(含文件或者目录)组合形成一个虚拟的文件系统。比如: test1和test2两个文件夹,各个文件夹下有各自的文件。

test1/ntest1/btest2/ltest2/f

通过UnionFS虚拟成test文件夹之后,表面上会变成如下样子。

test/ntest/btest/ltest/f

它有一个很重要的特性:Copy on write

比如:把changed、test1、test2三个文件夹虚拟组合成test文件夹。虚拟组合时指定changed读写权限、test1与test2只读权限。

├── changed├── test│   ├── n│   ├── b│   ├── l│   └── f├── test1│   ├── n│   └── b└── test2    ├── l    └── f

如果对 test/f 文件进行修改,将会复制 f 文件到具备读写权限的changed文件夹,而原始的 test2/f 不会更新。

├── changed│   └── f  #复制创建├── test│   ├── n│   ├── b│   ├── l│   └── f  #更新├── test1│   ├── n│   └── b└── test2    ├── l    └── f  #不更新

镜像与容器关系

使用UnionFS与Copy on write特性之后,容器与镜像的关系如下:

621a85a50021482b0e106b43cda9605c.png

镜像分层与容器层关系

只读镜像层的数据更新时,就会复制数据到可读写操作的容器层。这个复制处理的具体操作依赖系统选择的Storage Driver。Storage Driver列表:

  • overlay2, overlay
  • aufs
  • btrfs
  • devicemapper
  • vfs
  • zfs

由上可以知道,由于共用了只读镜像层,从而缩小了容器的大小,加快了启动速度。

镜像内部分层结构

举个例子看看镜像里头分层情况。第一步:创建DockerFile,内容如下

FROM centos:7

执行docker build:

D:docker00-basic>docker build -t centos7 .Sending build context to Docker daemon  2.048kBStep 1/1 : FROM centos:77: Pulling from library/centosab5ef0e58194: Pull complete                                                                                                                   Digest: sha256:4a701376d03f6b39b8c2a8f4a8e499441b0d567f9ab9d58e4991de4472fb813cStatus: Downloaded newer image for centos:7 ---> 5e35e350adedSuccessfully built 5e35e350adedSuccessfully tagged centos7:latestSECURITY WARNING: You are building a Docker image from Windows against a non-Windows Docker host. All files and directories added to build context will have '-rwxr-xr-x' permissions. It is recommended to double check and reset permissions for sensitive files and directories.

查看镜像分层构造:

D:docker00-basic>docker history centos7IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT5e35e350aded        5 months ago        /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B           5 months ago        /bin/sh -c #(nop)  LABEL org.label-schema.sc…   0B           5 months ago        /bin/sh -c #(nop) ADD file:45a381049c52b5664…   203MB

第二步:修改DockerFile内容如下。

FROM centos:7RUN echo "Hello world" > /tmp/newfile

执行docker build:

D:docker00-basic>docker build -t centos7 .Sending build context to Docker daemon  2.048kBStep 1/2 : FROM centos:7 ---> 5e35e350adedStep 2/2 : RUN echo "Hello world" > /tmp/newfile ---> Running in 8bd61ed2d5e7Removing intermediate container 8bd61ed2d5e7 ---> cdbbf869ca90Successfully built cdbbf869ca90Successfully tagged centos7:latestSECURITY WARNING: You are building a Docker image from Windows against a non-Windows Docker host. All files and directories added to build context will have '-rwxr-xr-x' permissions. It is recommended to double check and reset permissions for sensitive files and directories.

查看镜像分层构造:

D:docker00-basic>docker history centos7IMAGE               CREATED              CREATED BY                                      SIZE                COMMENTcdbbf869ca90        About a minute ago   /bin/sh -c echo "Hello world" > /tmp/newfile    12B5e35e350aded        5 months ago         /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B           5 months ago         /bin/sh -c #(nop)  LABEL org.label-schema.sc…   0B           5 months ago         /bin/sh -c #(nop) ADD file:45a381049c52b5664…   203MB

对比两次的分层结构,就可以知道第二步只在第一步的基础上加了一个12B的分层。从而可以推导出:Docker 为了加速镜像构建、重复利用资源,会利用这些中间层镜像。

镜像优化

知道镜像内部分层之后,我们就可以做一些处理来优化我们的镜像。

  1. 由于镜像每层是只读的,构建之后无法改变。所以在构建这一层时创建的临时文件,也需要在这一层进行删除,后续层中做的删除只是表面效果。

优化前:

FROM ubuntu:18.04RUN apt-get updateRUN apt-get clean && rm -rf /var/lib/apt/lists/*

优化后:

FROM ubuntu:18.04RUN apt-get update && apt-get clean && rm -rf /var/lib/apt/lists/*
  1. 对于已经没有任何依赖的中间层镜像进行删除。
第1章 引言 FreeBSD的起源 Unix的历史发展 FreeBSD的起源和发展 当前FreeBSD的版本 FreeBSD的功能特点 FreeBSD的特点和应用范围 使用FreeBSD的实例 其他相关系统和组织 GNU’s Not Unix GNU/Linux 其他BSD系统 FreeBSD的相关资源 联机文档 出版物 Internet资源 商业服务和支持 第2章 安装与配置 安装之前的准备 硬件设备 安装介质 准备硬盘和软盘 安装FreeBSD 启动安装程序 安装系统 基本系统配置 设置网络 其他安装问题 第3章 系统管理和维护 系统的启动与关闭 系统启动过程 系统启动脚本 系统登录与退出 关闭系统 用户管理 增加用户 超级用户root 登录类别 shell设置 文件系统与磁盘操作 文件的属性 设备文件 安装文件系统 软盘操作 维护文件系统 检查硬盘 调整文件系统的目录结构 建立文件系统 管理交换设备 调整系统设置 调整控制台设置 配置系统时间 进程管理 查看系统状态 定时执行程序 进程的权限 安装应用软件 应用软件的类别 Packages Collection 打印机配置 系统结构 配置打印机 系统日志与备份 系统日志 系统备份 第4章 网络配置与使用 DOD参考模型 基本网络设置 手工配置网络 拨号网络 串口和modem PPP协议 DNS服务 DNS的体系结构 配置缓冲或转发方式的named 定义自己的名字服务 电子邮件 邮件服务器 在FreeBSD查看邮件 网络文件系统(NFS) NFS客户支持 NFS服务器 第5章 设置和使用X Window 安装和设置X服务器 X Free86的硬件要求 安装XFree86 使用XF86Setup配置X服务器 使用xf86config配置X服务器 使用和配置X Window X Window的基本概念 进入X Window 定制X Window的基本方法 X Window下的中文环境 中文X应用软件 外挂式中文显示与输入软件 中文X服务器 配置文件XF86Config 第6章 定制应用软件与系统内核 编译应用软件 Ports Collection 手工编译安装程序 可执行程序格式 配置FreeBSD内核 为编译内核准备源代码 编译安装新内核 缺省内核配置选项 其他内核设置选项 升级系统 第7章 与Windows系统集成 集成Unix和Windows的方式 NetBIOS与SMB/CIFS协议 NetBIOS名字解析 SMB/CIFS协议 配置和使用Samba 安装samba 配置samba 根据Windows网络设置Samba 访问Windows系统资源 使用smbclient访问Windows资源 使用SharityLight安装SMB文件系统 设置DHCP DHCP的工作过程 设置和使用DHCP 第8章 系统与网络安全 网络安全概念 认证与加密 安全问题 防火墙技术 增强安全设置 设置基本系统 安全工具 设置防火墙功能 设置和使用ipfw/natd 设置和使用ipfilter 构建防火墙 第9章 设置WWW服务 基本概念 超文本传输协议HTTP 数据处理方式 安装和设置Apache 基本安装 配置Apache服务服务器的安全控制 对IP地址和域名的控制 基于用户的访问控制 安全连接方式SSL CGI和SSI的安全性 调整服务器性能 单服务器性能调整 提升静态网页服务能力的综合方式 负载均衡技术 基于DNS的负载均衡 反向代理负载均衡 基于NAT的负载均衡技术
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值