Dockerfile:创建镜像,创建自定义的镜像。

Docker的创建镜像的方式:
  1. 基于已有镜像进行创建。

   根据官方提供的镜像源,创建镜像,然后拉起容器。是一个白板,只能提供基础的功能,扩展性的功能还是需要自己定义(进入容器进行操作)

 基于模板进行创建:

     

 下载下来的模板导入到本地      run起来。

Dockerfile

   联合文件系统(UnionFS),docker镜像的基础,镜像通过分层来进行集成,特性:一次同时加载多个文件系统,但是从外面来看,就是一个文件系统。

   Docker镜像实际上就是一层一层的文件系统组成,这种层级的文件系统就是UnionFS。每一层都是layers,每一层都包含文件系统的一部分,这些层次叠加在一起,最终形成的就是rootfs。

Bootfs:宿主机提供的内核和引导程序。

Roosfs:就是容器的操作系统,在dockerfile中,我们可以自己指定。

Rootfs是多个基础镜像和应用镜像结合起来的只读层,镜像实际上就是一个只读文件。

容器基于镜像实例,运行起来之后,容器变成可读可写层。

在dockerfile 当中创建一个指定都是一个镜像层。

镜像层会被缓存和复用。

1-4将直接完成,继续运行5-6

一旦有一层镜像失败,那么所有的镜像层都会失败,镜像也不会创建。

镜像层是不可变的,你在某一层当中添加一个新的命令,但是下一层删除了指令,镜像中基于这个命令创建的文件依然存在,但是在容器中看不见。

Dockerfile的核心:用户个性化定制docker的镜像。

Dockerfile的结构:
  1. 基础镜像信息
  2. 维护者信息
  3. 镜像的操作指令
  4. 容器启动时执行的命令。
Dockerfile的语法:

FROM:指定基础镜像信息,指定容器的操作系统。

MAINTAINER:指定维护者信息(可有可无,可以不写)。

RUN:在基础的镜像上执行的命令,每个run就是一层,分层越多,镜像也大。

ENTRYPOINT:设置容器运行时是默认命令(容器内部运行的主程序)

CMD:指定容器运行时间的默认命令(docker run /bin/bash 后面加了其他的命令,cmd的指将会被覆盖。)

EXPOSE:暴漏端口(指定容器的运行端口)

ENV:设置变量环境,环境变量可以被PUA命令使用(声明容器运行需要的环境斌环境)

ADD:复制,解压。解压不支持.zip和.tar  tar.gz  tar.bz2 支持url地址解压和复制(解压)

COPY:复制文件,不能解压,而且只能复制蹦迪文件,文件要和dockerfile在一个节目(官方推荐复制利用copy)

VOLUME:创建一个容器内的挂载点,即可以为宿主机挂载,也可以提供容器挂载。

USER:设置运行镜像时使用的用户或者UID(可以不加)

WORKDIR:为后续指令设置的工作目录

ONBUILD :这个镜像可以被其他镜像引用,需要这个命令。

ARG:传参,用于创建容器时,传递参数。ENV用于容器运行时设置环境变量。

CMD和ENTRYPOINT的区别:

都是可以作为容器启动时的默认命令。

区别:

  1. cmd可以吧参数传给ENTRYPOINT
  2. 多个ENTRYPOINT和多个cmd只会运行最后一个(一个dockerfile当中只会有一个ENTRYPOINT和cmd)
  3. ENTRYPOINT的指令不会被覆盖,cmd的指令如果在docker  run 的后面加上输出,会被覆盖。
  4. ENTRYPOINT和cmd的指令在容器启动时执行,都会成为容器的主进程。主进程负责接受信号,处理容器的生命周期,主进程退出,容器也将终止运行。

Run 命令的优化:

主要是减少镜像的层数: 把多个run命令写在一块。

&&符号:

RUN yum -y install nginx && make -j 4 && make install

 注意一点前一个命令执行成功才会执行下一个。

; 符号:

RUN yum -y install nginx ; make -j 4 ;make install

 不管前一个命令是否成功,后面的命令都会执行。

|| :

RUN yum -y install nginx || make -j 4

如果前面一个命令执行失败,才会执行下一个命令。

反斜杠 \ :换行

RUM yum -y install nginx \

&& make -j 4 \

&& make install

可读性高。

Copy和add区别:

Copy和add都可以吧本地文件复制到镜像中,但是官方推荐如果是复制,使用copy

区别:

Add可以解压,如果是一个压缩文件,add在复制之后会自动解压。(tar.gz 和 tar.bz2)可以支持URL下载源文件,只能支持下载,但是不会解压。通过URL拷贝的文件无法自动解压。

Copy只能复制,不能解压。而且只能是本地文件,不支持URL路径。

基于centos7 构建一个Apache的dockerfile(编译安装):

如何基于镜像的二次构建。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

返回零长度的数组或集合,而不是null

返回零长度的数组或集合而不是 null 是一种良好的编程实践,可以提高代码的可靠性和可读性。以下是一个例子,展示了返回零长度的数组或集合的情况: import java.util.ArrayList; import java.util.List;public class StudentManager {private…

【KMP】【判断是否是重复子字符串】Leetcode 459 重复的子字符串

【KMP】【判断是否是重复子字符串】Leetcode 459 重复的子字符串 解法1 拼接字符串-掐头去尾后判断是否含有原字符串解法2 KMP——重复子串的最小单位是这个字符串里的最长相等前后缀所不包含的子串解法3 暴力解法KMP ---------------🎈🎈题目链接&…

【Qt QML 入门】TextArea

TextArea也是一个多行文本编辑器。TextArea相比texttedit,增加了占位符文本,并添加了样式定义。 import QtQuick import QtQuick.Window import QtQuick.ControlsWindow {id: winwidth: 800height: 600visible: trueTextArea {id: taanchors.centerIn: …

SystemVerilog基础:并行块fork-join、join_any、join_none(二)

相关阅读 SystemVerilog基础https://blog.csdn.net/weixin_45791458/category_12517449.html 在第一节中,我们讨论了并行块中的fork-join块和fork-join_any块,了解了它们的差异,本文将继续讨论fork-join_none块的使用。 fork-join_none并行块…

高通平台开发系列讲解(USB篇)linux下如何让U盘可以识别问题

文章目录 一、简述二、修改方法三、宏介绍沉淀、分享、成长,让自己和他人都能有所收获!😄 一、简述 对于一些U盘不能自动被Linux内核识别的情况,可能需要进行一些调整和修改内核驱动的设置。 二、修改方法 在kernel中开启以下的宏开关 CONFIG_USB_STORAGE=y CONFIG_SCSI=…

linux性能优化-上下文切换

如何理解上下文切换 Linux 是一个多任务操作系统,它支持远大于 CPU 数量的任务同时运行,这是通过频繁的上下文切换、将CPU轮流分配给不同任务从而实现的。 CPU 上下文切换,就是先把前一个任务的 CPU 上下文(CPU 寄存器和程序计数…

关于技术架构的思考

技术选型实则是取舍的艺术 这句话是我偶然在一篇技术架构方面的文章上看到的,每当我需要给新项目进行技术选型,决定技术架构时,一直坚信的。 当我们做技术选型时,需要考虑的东西非常多。比如,用关系型数据库还是非关…

怎么解决bash: composer: command not found问题

是不是遇到过bash: composer: command not found问题,怎么解决呢?下面由composer教程栏目给大家来详细介绍该问题的解决方法。 1、先看报错 2、由于错误的原因,安装很多东西都失败了。网上有的说是环境变量的问题,又一个个找也没…

面向对象三大特征之二:继承

继承的快速入门 什么是继承? Java中提供了一个关键字extends,用这个关键字,可以让一个类与另一个类建立起父子关系 继承的特点 子类能继承父类的非私有成员(成员变量、成员方法) 继承后对象的创建 子类的对象是由…

认知能力测验,①如何破解数字推理类测试题?

校园招聘(秋招春招),最为常见的认知能力测验,在线工具网将整理分析关于认知能力测验的系列文章,希望能帮助大家顺利通过认知能力测评,找到自己心仪的工作。 数字推理测试,是我们在求职中经常会…

中通单号查询,中通快递物流查询,对需要的单号进行备注

批量查询中通快递单号的物流信息,对需要的单号进行备注。 所需工具: 一个【快递批量查询高手】软件 中通快递单号若干 操作步骤: 步骤1:运行【快递批量查询高手】软件,并登录 步骤2:点击主界面左上角的“…

袋鼠目标检测数据集VOC+YOLO格式1400多张

袋鼠是双门齿目袋鼠亚目袋鼠科大袋鼠属的哺乳动物。袋鼠跳得最高、最远。雌性袋鼠都长有一个前开的育儿袋,袋鼠也因此得名。 [8]袋鼠泛指任一种属于袋鼠目的有袋动物, [7]它头小眼大耳朵长,面部较长,鼻孔两侧有黑色须痕。袋鼠胆小…

Python函数和模块的使用

我的博客 文章首发于公众号:小肖学数据分析 在开发过程中,函数和模块帮助我们将复杂的代码逻辑分解为可管理的部分,提升代码的可读性、可维护性和重用性。 本文将介绍如何在Python中有效利用函数和模块,提供详细的示例。 函数的…

《Linux C编程实战》笔记:一些系统调用

目录 dup和dup2函数 fcntl函数 示例程序1 示例程序2 ioctl函数 dup和dup2函数 #include <unistd.h> int dup(int oldfd); int dup2(int oldfd, int newfd): dup 函数复制 oldfd 参数所指向的文件描述符。 参数&#xff1a; oldfd&#xff1a;要复制的文件描述符的…

Spring Cloud Alibaba

文章目录 Spring Cloud Alibaba1 介绍2 Nacos&#xff08;注册中心和配置中心&#xff09;2.1 示例 3 Sentinel&#xff08;流量控制和熔断降级&#xff09;3.1 流量控制示例 4 GateWay4.1 断言4.2 过滤器4.2.1 局部过滤器4.2.2 全局过滤器 4.3 网关限流 5 链路追踪Sleuth Spri…

QT案例 使用WMI获取win_32类的属性值,包括Win32提供程序类中的属性

最近涉及到读取WINDOWS 系统电脑设备的各种信息&#xff0c;在一些特殊的PE或者简化系统中是没有WMI查询工具的&#xff0c;所以就自己写了个查询大部分WMI属性值的工具&#xff0c;免去了查网站的功夫。涉及到的方法内容就汇总做个总结。 PS:因为工作中软件基本都是我一个人开…

改进lora-scripts,支持SDXL训练,以及启动脚本

分享下自己改进的一个lora训练脚本&#xff0c;在ubuntu下如果SD-WEBUI的环境已经搭好的话&#xff0c;只需要下载lora-script就可以支持训练了&#xff0c;直接命令行方式训练。 首先&#xff0c;我们需要克隆下项目&#xff1a; git clone https://github.com/Akegarasu/lo…

docker安装Prometheus

docker安装Prometheus Docker搭建Prometheus监控系统 环境准备(这里的环境和版本是经过测试没有问题,并不是必须这个版本) 主机名IP配置系统说明localhost随意2核4gCentOS7或者Ubuntu20.0.4docker版本23.0.1或者24.0.5,docker-compose版本1.29 安装Docker Ubuntu20.0.4版本…

NO-IOT翻频,什么是翻频,电信为什么翻频

1.1 翻频迁移最终的目的就是减少网络的相互干扰&#xff0c;提供使用质量. 1.2 随着与日俱增的网络规模的扩大&#xff0c;网内干扰已成了影响网络的质量标准之一&#xff0c;为了保障电信上网体验&#xff0c;满足用户日益增长的网速需求,更好的服务客户&#xff0c;电信针对…