Docker之DockerFile相关基础知识

news2024/10/5 14:27:26

DockerFile相关基础知识

  • 一、Docker镜像原理
    • 1、操作系统组成部分
      • 1.1 七大子系统
      • 1.2 Linux文件系统
    • 2、Docker镜像原理介绍
      • 2.1 原理图
      • 2.2 Docker镜像本质
      • 2.3 统一文件系统
      • 2.4 复用性
      • 2.5 统一性
  • 二、容器转为镜像
    • 1、Docker镜像的制作
      • 1.1 容器转换为镜像
      • 1.2 镜像转为压缩文件
      • 1.3 导入镜像的压缩文件
  • 三、dockerfile概述及关键字
    • 1、Dockerfile概念
    • 2、关键字
      • 2.1 FROM
      • 2.2 MAINTAINER
      • 2.3 LABEL
      • 2.4 RUN
      • 2.5 ENTRYPOINT
      • 2.6 COPY
      • 2.7 ADD
      • 2.8 ENV
      • 2.9 ARG
      • 2.10 VOLUME
      • 2.11 EXPOSE
      • 2.12 WORKDIR
      • 2.13 USER
      • 2.14 HEALTHCHECK
      • 2.15 ONBUILD
      • 2.16 STOPSIGNAL
      • 2.17 SHELL
    • 3、样例
      • 3.1 dockerfile文件内容
      • 3.2 构建命令

一、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 :设置新的镜像的名称及版本
. :代表寻址的路径

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/537576.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【SpringBoot】三:访问数据库

文章目录 1.DataSource2.JdbcTemplate2.1 准备环境2.2 准备表和数据2.3 配置数据源2.4 JdbcTemplate访问mysql2.5 创建实体类 ArticlePO2.6 测试2.6.1 测试聚合函数 3.mybatis3.1 单表CRUMD3.1.1 创建模块3.1.2 查询3.1.3 插入3.1.4 更新3.1.5 删除 3.2 ResultMap3.3 SQL 提供者…

Elasticsearch 集群部署管理

Elasticsearch 集群配置版本均为8以上 安装前准备 CPU 2C 内存4G或更多 操作系统: Ubuntu20.04,Ubuntu18.04,Rocky8.X,Centos 7.X 操作系统盘50G 主机名设置规则为nodeX.qingtong.org 生产环境建议准备单独的数据磁盘主机名 #各自服务器配置自己的主机名 hostnamectl set-ho…

【2023/05/17】smalltalk

Hello!大家好,我是霜淮子,2023倒计时第12天。 Share His own morning are new surprises to God. 译文: 神自己的清晨,在他自己看来也是新奇的。 Life finds its wealth by the claims of the world,and its worth…

基于UIAutomation+Python+Unittest+Beautifulreport的WindowsGUI自动化测试框架

1 main.py主入口 # -*- coding:utf-8 -*- # 作者:虫无涯 # 日期:2023/2/17 # 文件名称:main.py # 作用:框架的主入口函数# codingutf-8import time from common.reportOut import report_out from common.logOut import log_out …

Wandb.init和wandb.sweep的使用准则

目录 在使用 wandb.init() 初始化函数时,你可以包含以下信息: 如果在同一个代码中多次调用 wandb.init(),可能会导致以下问题: 如果你在一个大文件中使用了 wandb.init(),并且想在其他小文件中使用 wandb.log() 来记…

docker-compose部署sonarqube开源代码审计和分析平台

生成文件夹 mkdir -p /docker/sonar/postgres/postgresql mkdir -p /docker/sonar/postgres/datamkdir -p /docker/sonar/sonarqube chmod 777 -R /docker/sonar/sonarqube echo "vm.max_map_count262144" > /etc/sysctl.conf sysctl -p 创建docker-compose.yml文…

Kuberentes,k8s诞生简介

一、前言 什么是k8s? Kuberentes 是基于容器的集群管理平台,它的简称,是K8S。有人说之所以叫k8s,是因为k到s中间有8个字母,因此叫k8s,也有人说,在使用k8s的安装配置流程中,共分为8…

6年测开经验面试十家大厂,整理出来的笔记...

我第一次接触自动化是在2016年。那时刚毕业一年有余,组内一直做手工功能测试,大概在2018年9月,部门领导要求测试组引入自动化。组内之前从没有开展过任何自动化,测试主管安排了一个刚入职不久的研究生同事去研究。 当时自己内心还…

STM32独立按键扫描,支持同时按下、长按、快速键值

背景 有个项目在实际应用中,采用8个独立按键,每个按键都赋予不同功能,实际使用过程中很多时候都是需要比较特殊的按键操作,例如:长按10s按键、长按5s按键,或者长按需要有快速按键值的反馈,这个…

wordcloud背景图多图形演示

文章目录 前言一、问题二、多图层1.部分重叠1.1背景图1.2词云图 2.完全重叠2.1背景图2.2词云图 3.不重叠3.1背景图3.2词云图 三、不同形状1.背景图2.词云图 四、代码总结 前言 大家好,我是空空star,本篇给大家分享一下wordcloud背景图多图形演示。 一、问…

网络安全真的那么好吗?

近几年,随着网络安全被列为国家安全战略的一部分,这个曾经细分的领域发展提速了不少,除了一些传统安全厂商以外,一些互联网大厂也都纷纷加码了在这一块的投入,随之而来的吸引了越来越多的新鲜血液不断涌入。 网络安全…

多源环境(QGIS\PostgreSQL\ARCGIS\MAXENT\R语言)支持下的SolVES 模型生态系统服务功能社会价值评估

生态系统服务是人类从自然界中获得的直接或间接惠益,可分为供给服务、文化服务、调节服务和支持服务4类,对提升人类福祉具有重大意义,且被视为连接社会与生态系统的桥梁。自从启动千年生态系统评估项目(Millennium Ecosystem Asse…

Python自动化测试实现的思路及方法

Python自动化测试常用于Web应用、移动应用、桌面应用等的测试 Python自动化实现思路通常分为以下几步: 1. 确定自动化测试的范围和目标: 首先需要明确需要进行自动化测试的范围和目标,包括测试场景、测试用例、测试数据等。 2. 选择自动化测…

Kubernetes第2天

第四章 实战入门 本章节将介绍如何在kubernetes集群中部署一个nginx服务,并且能够对其进行访问。 Namespace ​ Namespace是kubernetes系统中的一种非常重要资源,它的主要作用是用来实现多套环境的资源隔离或者多租户的资源隔离。 ​ 默认情况下&…

机器学习——决策树原理及CART算法

问:CART决策树可以有多个分支结构。 答:错误。CART决策树每个内部节点只能有两个分支结构,这些分支分别对应于二进制判定的是或否。因此,CART决策树的每个节点将数据集分成两个较小的子集,其中一个子集满足某种特定条…

【系分知识】需求评审

目录 背景介绍标题目的与意义方法与流程成果展示 背景介绍 软件开发是一项复杂的工作,需要涉及到众多的人员和团队。在这个过程中,需求评审是保证项目质量和进度的关键环节。它是在项目启动之前,对所有的需求进行全面的评估和审查&#xff0c…

C#异步编程之数据并行及任务并行

基于Parallel.ForEach的数据并行使用 1.数据非并行 var items new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; DateTime t1 DateTime.Now; foreach (var item in items) {Console.WriteLine("数据非并行输出:{0}", item); } 2.数据并行,只要使用Parallel.ForEach P…

Unity UI -- (2) 给场景加一个标题

添加Text并将其放到正中位置 我们来增加项目的第一个UI元素:标题。 1. 在Hierarchy中,点击右键,选择UI > Text - TextMeshPro。如果弹出了一个TextMeshPro Importer窗口,选择Import TMP Essentials。TextMeshPro(TM…

优雅地处理参数传递:Spring Boot中的技巧

目录 一:四种传参方式 1.1:在 URL 中传递参数 1.2:PathVariable 传递参数(Restful 风格) 1.3:在请求体中传递参数 1.4:在请求头中传递参数 二:文件上传接口测试 2.1 : test.jav…

5_推荐系统算法详解

推荐系统算法详解 主要内容常用推荐算法分类(重点)基于人口统计学的推荐算法用户画像 基于内容的推荐算法相似度计算 基于内容推荐系统的高层次结构特征工程数值型特征处理 类别型特征处理时间型特征处理统计型特征处理推荐系统常见反馈数据基于 UGC 的推…