dockerfile:创建镜像的方式,船舰自定义的镜像

dockerfile:创建镜像的方式,船舰自定义的镜像

包括配置文件,挂载点,对外暴露的端口,设置环境变量

docker创建镜像的方式

1、基于已有镜像进行创建。

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

2、基于模板进行创建

3、dockerfile

联合文件系统(UnionFS),docker镜像的基础

镜像通过分层进行继承,特性:一次同时可以加载多个文件系统,但是从外面来看,就是一个文件系统。

docker镜像实际上就是由一层一层的文件系统组成,这种层级的文件系统就是UnionFS

每一层都是layers,每一层都包含文件系统的一部分,这些层次叠加在一起,最终形成的就是rootfs

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

rootfs:即使容器的操作系统,载dockerfile中,我们可以自己指定

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

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

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

镜像层会被缓存和复层

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

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

1、touch 123

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

dockerfile的结构:

1、基础镜像信息

2、维护者信息

3、镜像的操作指令

4、容器启动时,执行的命令

nginx定义好了容器执行的命令 /bin/bash,覆盖了容器内的标准输出

dockerfile的语法

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

MAINTAINER:指定维护者信息(可有可无)

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

ENRYPOINT:设置容器运行时的默认命令(理解为容器内部运行的主程序)

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

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

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

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的指令在容器启动时执行,都会成为容器的主进程,主进程负责接收信号,处理容器的声明周期,主进程退出,容器也讲终止运行

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 \

&& maker -j 4 \

&& make install

可读性更高

copy和add之间区别

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

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

copy只能复制,而且只能是本地文件,不支持URL路径

centos7构建一个apache的dockerfile(编译安装):

docker build -t nginx:wqb5 .

docker run -itd --name nginx8 -p 1212:80 nginx:wqb5

FROM centos:7 AS first
MAINTAINER "this is my apache <wqb>"
RUN yum -y install gcc gcc-gcc+ make pcre pcre-devel expat-devel perl
ADD apr-1.6.2.tar.gz /opt
ADD apr-util-1.6.0.tar.gz /opt
ADD httpd-2.4.29.tar.bz2 /opt
RUN mv /opt/apr-1.6.2 /opt/httpd-2.4.29/srclib/apr && mv /opt/apr-util-1.6.0 /opt/httpd-2.4.29/srclib/apr-util &&\
cd /opt/httpd-2.4.29 &&\ ./configure --prefix=/usr/local/httpd --enable-so --enable-rewrite --enable-charset-lite --enable-cgi &&\
make -j 4 && make install#二层构建:FROM centos:7COPY --from=first /usr/local/httpd /usr/local/httpdRUN yum -y install pcre pcre-devel expat-devel perlEXPOSE 80
CMD ["/usr/local/httpd/bin/apachectl","-D","FOREGROUND"]

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

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

相关文章

IP与以太网的转发操作

TCP模块在执行连接、收发、断开等各阶段操作时&#xff0c;都需要委托IP模块将数据封装成包发送给通信对象。 网络中有路由器和集线器两种不同的转发设备&#xff0c;它们在传输网络包时有着各自的分工。 (1)路由器根据目标地址判断下一个路由器的位置 (2)集线器在子网中将网…

docker的镜像创建 dockerfile

dockerfile Dokcer镜像的创建 创建镜像有三种方法&#xff0c;分别为【基于已有镜像创建】、【基于本地模板创建】以及【基于Dockerfile创建】。 &#xff08;1&#xff09;首先启动一个镜像&#xff0c;在容器里做修改 docker run -itd --name web centos:7 /bin/bash …

k8s pod日志写入ELK的具体实现

shigen坚持更新文章的博客写手&#xff0c;擅长Java、python、vue、shell等编程语言和各种应用程序、脚本的开发。记录成长&#xff0c;分享认知&#xff0c;留住感动。 在上一部分&#xff0c;shigen讲到了k8spod的日志写入ELK的三种技术方案&#xff0c;并在最后展示了一下我…

QMainWindow和QWidget有什么区别

2023年12月12日&#xff0c;周二上午 QMainWindow 和 QWidget 是 Qt 框架中两个不同的类&#xff0c;用于创建用户界面的窗口部件。它们之间的主要区别在于它们的设计和用途。 QMainWindow: QMainWindow 是用于创建主窗口的类&#xff0c;通常包含了一个应用程序的主要界面。…

NFR 数字权益开发流程

NFR 在技术开发领域通常指的是“非功能性需求”&#xff08;Non-Functional Requirements&#xff09;&#xff0c;这些是描述系统属性如安全性、性能、可用性、兼容性等方面的需求。然而&#xff0c;如果在这里 NFR 被用来指代与数字权益或非同质化代币&#xff08;NFT&#x…

C++ 构造函数 调用方法

构造函数 调用方法 //括号法&#xff08;常用&#xff09; Person p1(100); //有参构造 Person p2(p1); //拷贝构造//注意&#xff1a;不要用括号法调用无参构造&#xff0c;会和 函数声明 混淆。//显示法 Person p3 Person(); //无参构造 Person p4 Person(100); //有参构…

【USRP】LFTX / LFRX

LFTX/LFRX 设备概述 LFTX 子板利用两个高速运算放大器来允许 0-30 MHz 的传输。该板仅接受实模式信号。LFTX 非常适合 HF 频段的应用&#xff0c;或使用外部前端来上变频和放大中间信号的应用。LFTX 的输出可以独立处理&#xff0c;也可以作为单个 I/Q 对进行处理。 主要特征…

Python - 搭建 Flask 服务实现图像、视频修复需求

目录 一.引言 二.服务构建 1.主函数 upload_gif 2.文件接收 3.专属目录 4.图像修复 5.gif2mp4 6.mp42gif 7.图像返回 三.服务测试 1.服务启动 2.服务调用 四.总结 一.引言 前面我们介绍了如何使用 Real-ESRGAN 进行图像增强并在原始格式 jpeg、jpg、mp4 的基础上…

HeartBeat监控Redis状态

目录 一、概述 二、 安装部署 三、配置 四、启动服务 五、查看数据 一、概述 使用heartbeat可以实现在kibana界面对redis服务存活状态进行观察&#xff0c;如有必要&#xff0c;也可在服务宕机后立即向相关人员发送邮件通知 二、 安装部署 参照文章&#xff1a;HeartBeat监…

Java实现多线程的三种方式

Java 有三种方式实现多线程&#xff0c;继承 Thread 类、实现 Runnable 接口、实现 Callable 接口。还有匿名内部类方式&#xff0c;Lambda 表达式方式简化开发。 1、Thread Thread 创建线程方式&#xff1a;创建线程类 start() 方法底层其实是给 CPU 注册当前线程&#xff0…

关于IDEA中maven的作用以及如何配置MAVEN

关于IDEA中maven的作用以及如何配置MAVEN 1、Maven是什么2、Idea中对于Maven的配置3、下载依赖时&#xff0c;Idea下方的显示3.1、Maven中央仓库的下载显示界面3.2、阿里云仓库的下载显示界面 4、Maven在Idea中的使用4.1、clean4.2、validate4.3、compile4.4、test&#xff08;…

智能优化算法应用:基于人工蜂群算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于人工蜂群算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于人工蜂群算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.人工蜂群算法4.实验参数设定5.算法结果6.…

java智能异常处理

标题&#xff1a;优雅处理异常&#xff1a;Java智能异常处理的最佳实践 摘要&#xff1a;在软件开发中&#xff0c;异常处理是一项至关重要的任务。本文将介绍Java中的智能异常处理技术&#xff0c;通过合理的异常处理规范和最佳实践&#xff0c;帮助开发者优雅地处理异常情况…

从零构建属于自己的GPT系列5:模型部署1(文本生成函数解读、模型本地化部署、文本生成文本网页展示、代码逐行解读)

&#x1f6a9;&#x1f6a9;&#x1f6a9;Hugging Face 实战系列 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在PyCharm中进行 本篇文章配套的代码资源已经上传 从零构建属于自己的GPT系列1&#xff1a;数据预处理 从零构建属于自己的GPT系列2&#xff1a;模型训…

2023年国赛高教杯数学建模A题定日镜场的优化设计解题全过程文档及程序

2023年国赛高教杯数学建模 A题 定日镜场的优化设计 原题再现 构建以新能源为主体的新型电力系统&#xff0c;是我国实现“碳达峰”“碳中和”目标的一项重要措施。塔式太阳能光热发电是一种低碳环保的新型清洁能源技术[1]。   定日镜是塔式太阳能光热发电站&#xff08;以下…

ES6-import后是否有{}的区别

在ES6中&#xff0c;import语句用于导入其他模块中的变量、函数、类等。在使用import语句时&#xff0c;可以选择是否使用花括号{}来包裹导入的内容&#xff0c;这会影响导入的内容的使用方式。 1.使用花括号{}&#xff1a; 当使用花括号{}时&#xff0c;表示只导入指定的变量…

【Fastadmin】根据Fieldlist键值组件做一个等级配置的完整示例

目录 1.效果展示&#xff1a; ​编辑 2.建表&#xff1a; 3.html页面 4.controller控制器 5.js 6.model 1.效果展示&#xff1a; 2.建表&#xff1a; 表名&#xff1a;fa_xxfb_config /*Navicat Premium Data TransferSource Server : rootSource Server Type …

深入Docker命令行:探索常用命令和实用技巧

Docker命令行界面是每个容器开发者的得力工具。在这篇文章中&#xff0c;将深入探讨一系列常用的Docker命令&#xff0c;以及一些实用技巧&#xff0c;通过更丰富的示例代码&#xff0c;帮助大家更全面地理解和运用Docker命令行工具。 1. Docker基本命令 1.1 镜像操作 深入了…

用 CSS 写一个渐变色边框的输入框

Using_CSS_gradients MDN 多渐变色输入框&#xff0c;群友问了下&#xff0c;就试着写了下&#xff0c;看了看 css 渐变色 MDN 文档&#xff0c;其实很简单&#xff0c;代码记录下&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta ch…

使用FFMPEG转码,转单声道,转标准WAV,转PCM

本文为使用FFMPEG命令行的方式处理音频&#xff0c;来获取想要得到的音频文件。 零、使用命令行查看编码封装信息 格式&#xff1a;ffprobe.exe -show_format inputfile 例子&#xff1a;ffprobe.exe -show_format .\stereo_44_16bit.wav 运行结果为下图&#xff1a; 如图可…