Docker之DockerFile相关基础知识

2023-10-26

一、Docker镜像原理

1、操作系统组成部分

1.1 七大子系统

进程调度子系统、进程通信子系统、内存管理子系统、设备管理子系统、文件管理子系统、网络通信子系统、作业控制子系统

1.2 Linux文件系统

Linux文件系统由bootfs和rootfs两部分组成
(1)bootfs:包含bootloader(引导加载程序)和kernel(内核)
(2)rootfs:root文件系统,包含的就是典型Linux系统中的/dev,/proc,/bin,/etc等标准目录和文件。
不同的linux发行版,bootfs基本一样,而rootfs不同,如ubuntu,centos等

2、Docker镜像原理介绍

2.1 原理图

在这里插入图片描述

2.2 Docker镜像本质

Docker镜像是由特殊的文件系统叠加而成
最底端是bootfs,并使用宿主机的bootfs,所以启动的速度特别快
第二层是root文件系统rootfs,称为base image(centos/ubuntu)
此外上面还可以继续叠加其他的镜像文件。
所以它是一个分层文件系统。

2.3 统一文件系统

统一文件系统(Union File System)技术能够将不同的层整合成一个文件系统,为这些层提供了一个统一的视角,这样就隐藏了多层的存在,在用户的角度看来,只存在一个文件系统。
一个镜像可以放在另一个镜像的上面。位于下面的镜像称为父镜像,最底部的镜像称为基础镜像。
当从一个镜像启动容器时,Docker会在最顶层加载一个读写文件系统作为容器。
(Docker镜像层都是只读的,容器层是可写的)

2.4 复用性

Centos的iso镜像文件包含bootfs和rootfs
docker的Centos镜像复用了宿主机的操作系统的bootfs,所以Centos镜像只有rootfs和其他镜像层。因此docker上的Centos镜像比Centos的iso镜像文件要小。

2.5 统一性

docker中镜像是分层的,某一个镜像的大小很小,但需要依赖父镜像和基础镜像,所以对外暴露的大小就很大了。

二、容器转为镜像

1、Docker镜像的制作

1.1 容器转换为镜像

目录挂载的东西不会一起转换为镜像

docker commit 容器id 镜像名称:版本号

1.2 镜像转为压缩文件

docker save -o 压缩文件名称 镜像名称:版本号

1.3 导入镜像的压缩文件

docker load -i 压缩文件名称

三、dockerfile概述及关键字

1、Dockerfile概念

Dockerfile是一个文本文件
包含一条条的指令
每一条指令构建一层,基于基础镜像,最终构建出一个新的镜像。

2、关键字

2.1 FROM

指定父镜像,指定dockerfile基于哪个image构建

2.2 MAINTAINER

作者信息,用来标明这个dockerfile谁写的

2.3 LABEL

标签,用来标明dockerfile的标签,可以使用Label代替Malntainer最终都是在docker image基础信息中可以查看

2.4 RUN

执行命令,执行一段命令,默认是/bin/bash格式:
RUN command或者 RUN [“command”,“param1”,“param2”]

2.5 ENTRYPOINT

入口,一般在制作一些执行就关闭的容器中会使用

2.6 COPY

复制文件,build的时候复制文件到image中

2.7 ADD

添加文件,build的时候添加文件到image中,不仅仅局限于当前build上下文,可以来源于远程服务

2.8 ENV

环境变量,指定build时候的环境变量,可以在启动容器的时候,通过-e覆盖,格式ENV name=value

2.9 ARG

构建参数,构建参数,只在构建的时候使用的参数,如果有ENV,那么ENV的相同名字的值始终覆盖arg的参数

2.10 VOLUME

定义外部可以挂载的数据卷,指定build的image哪些目录可以启动的时候挂载到文件系统中,启动容器的时候使用-v绑定,格式VOLUME[“目录”]

2.11 EXPOSE

暴露端口,定义容器运行的时候监听的端口,启动容器的使用-p来绑定暴露端口,格式:EXPOSE 8080 或者 EXPOSE 8080/udp

2.12 WORKDIR

工作目录,指定容器内部的工作目录,如果没有创建则自动创建,如果指定 / 使用的是绝对地址,如果不是 / 开头,那么是在上一条workdir的路径的相对路径

2.13 USER

指定执行用户,指定build或者启动的时候,用户在RUN、CMD、ENTRYPONT执行的时候的用户

2.14 HEALTHCHECK

健康检查,指定监测当前容器的健康监测的命令(很少用,因为很多时候,应用本身有健康监测机制)

2.15 ONBUILD

触发器,当存在ONBUILD关键字的镜像作为基础镜像的时候,当执行FROM完成之后,会执行ONBUILD的命令,但是不影响当前镜像,用处也不怎么大

2.16 STOPSIGNAL

发送信号量到宿主机,该STOPSIGNAL指令设置将发送到容器的系统调用信号以退出

2.17 SHELL

指定执行脚本的shell,指定RUN、CMD、ENTRYPOINT执行命令的时候,使用的shell

3、样例

3.1 dockerfile文件内容

基于centos7镜像,构建一个新的镜像,要求有vim工具,以及进入容器后在usr目录

FROM centos:7
MAINTAINER Bob

RUN yum install -y vim
WORKDIR /usr

CMD /bin/bash

3.2 构建命令

docker build -f ./centos_dockerfile -t mycentos:v1 .

-f :指定dockerfile的文件路径
-t :设置新的镜像的名称及版本
. :代表寻址的路径

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Docker之DockerFile相关基础知识 的相关文章

随机推荐

  • java是什么_Java是什么?Java有什么用?

    我们经常提到Java 很多小白只听说过但对其并没有太多具体的了解 那么Java是什么 Java有什么用 今天就来探讨一下 我们常常会听说 Java是世界第一语言 很多应用软件的开发都离不开Java Java真的这么强大吗 其实 Java的内
  • 多链路传输技术在火山引擎 RTC 的探索和实践

    动手点关注 干货不迷路 传统的数据传输方式大多是利用一个链路 选择设备的默认网卡进行传输 使用这种方式实现实时音视频通话时 如果默认网络出现问题 如断网 弱网等 用户的通信就会发生中断或者卡顿 影响用户体验 多链路传输 顾名思义 就是使用多
  • electron_vue—实现消息通知 及 解决通知不显示问题

    实现消息通知 window linux macOS 这三个操作系统都为应用程序提供了向用户发送通知的方法
  • python使用pip安装出现pip is configured with locations that require TLS/SSL异常处理方法

    问题描述 最近给服务器安装python环境 通过源码方式安装Python3 8之后 使用pip功能出现异常 提示 root localhost pip3 install you get pip is configured with loca
  • 大数据处理中的关键算子:分割(Split)和选择(Select)

    在大数据处理中 分割 Split 和选择 Select 是两个常用的算子 它们在数据转换和处理过程中发挥着重要的作用 本文将详细介绍这两个算子的功能和使用方法 并附上相应的源代码示例 1 分割 Split 分割算子用于将一个数据集拆分成多个
  • 图的深度遍历和广度遍历

    理论部分 图的深度遍历和广度遍历都不算很难像极了二叉树的前序遍历和层序遍历 如下面的图 可以用右边的邻接矩阵进行表示 假设以顶点0开始对整幅图进行遍历的话 两种遍历方式的思想如下 1 深度优先遍历 depthFirstSearch DFS
  • LISN到底是啥?干啥用的?

    LISN到底是啥 干啥用的 LISN是在EMC测试的时候 会被使用的设备 如下图所示 双路V型电源阻抗稳定网络 它完全符合CISPR16 1 2 MIL STD 461F VDE 0876 FCC Part 15标准的要求 其等效电路为50
  • 20191004

    A 解 1 我们发现只需要关心处于结果字符串前 k 位的字符 因此考虑从后往前处理 对于一个询问区间 我们暴力连边 用并查集维护 x 的父亲等于 y 相当于位于 x 的字符是从位于 y 的字符处复制过来的 然后删掉这个区间 更新其他元素的排
  • Hutool BeanUtils.copyProperties的四种用法 空不拷贝/忽略拷贝/空不和忽略拷贝/全拷贝

    关注公众号 奇叔码技术 回复 java面试题大全 或者 java面试题 即可领取资料 一 Hutool BeanUtils copyProperties的四种用法 空不拷贝 忽略拷贝 空不和忽略拷贝 全拷贝 1 第一种用法 BeanUtil
  • STM32-CubeMX学习笔记

    例程参考链接 http bbs elecfans com jishu 714935 1 1 html 1 首次使用参见文档 http blog csdn net tq384998430 article details 53466263 2
  • 彻底搞懂Java中的synchronized关键字

    synchronized的作用 synchronized 的作用主要有三 原子性 所谓原子性就是指一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断 要么就都不执行 被synchronized修饰的类或对象的所有操作都是原子
  • 【歪门邪道】懒得麻烦UI同学切图所以用AndroidStudio生成icon

    每次新建项目 是不是都默认生成一个 ic launcher 对于这个icon 你是不是从来都是一删了事 你有没有一次 打开并留意过里头 ic launcher foreground 和 ic launcher background 文件 如
  • 关于以太坊的nonce值

    文章目录 每笔交易nonce值的各个情况 总结 关于Nonce的保管 依赖节点 自行管理nonce 参考代码 nonce在区块链中是一个非常重要的概念 从比特币到以太坊都有nonce的身影 在比特币中 nonce主要用于调整pow挖矿的难度
  • Go语言学习——4、数据存储:数组,切片,映射

    目录 一 数组 1 声明数组 2 初始化数组 3 遍历数组 二 切片 1 从数组或切片生成新的切片的语法格式 2 直接生成一个新的切片 3 切片添加元素 4 从切片删除元素 5 遍历切片 三 映射 1 声明映射 2 初始化映射 3 遍历映射
  • Linux--僵死进程(僵尸进程)

    1 僵死进程产生的原因或者条件 当子进程先于父进程结束 父进程没有获取子进程的退出码 此时子进程变成僵死进程 即就是子进程结束了 但父进程还没有结束的时候才会出现僵死进程 代码中 子先于父 后台运行 当一个进程结束的时候 只有进程的退出码被
  • 前端 token 应该放在哪里呢?

    总结 反正是服务端加密的传过来让前端存着的 通常的存储都可以放 只不过需要防范攻击就是了 风险 放在 webStorage 里的话 因为同源策略 可以在当前页面中注入脚本进行 xss 攻击来获取信息 比如在一个帖子下面回复了一串 js 脚本
  • 点云数据下的KD-tree

    点云数据下的KD tree检索 数据结构 构建KD tree 最近邻检索 KD tree简称K维树 是一种空间划分的数据结构 常被用于高维空间中的搜索 比如范围搜索和最近邻搜索 kd tree是二进制空间划分树的一种特殊情况 在激光雷达SL
  • go mod vender package io/fs is not in GOROOT (/usr/local/go/src/io/fs)

    一 问题解决 最近写区块链相关项目时候 对于智能合约部署时对其进行vender时报错 io fs is not in GOROOT usr local go src io fs 搜索了一下是因为go版本问题 我原本是1 15 5的版本 后来
  • 实施MES系统有何难点,以及怎么解决?

    实施MES系统有何难点 以及怎么解决 很多制造企业当前对于MES系统还处于认知阶段 制造业管理者们在不断了解MES系统的过程中 发现实施MES并没有想象中的简单 一个成熟的MES系统要经历哪些难点 如何更好的解决 一 MES系统有哪些实施难
  • Docker之DockerFile相关基础知识

    DockerFile相关基础知识 一 Docker镜像原理 1 操作系统组成部分 1 1 七大子系统 1 2 Linux文件系统 2 Docker镜像原理介绍 2 1 原理图 2 2 Docker镜像本质 2 3 统一文件系统 2 4 复用