当前位置: 首页 > news >正文

dockerfile自定义镜像

目录

概念

基于dockerfile创建

dockerfile的命令

构建容器

FROM

ENTRYPOINT和CMD

RUN

COPY和ADD

工作目录和环境变量以及容器卷(挂载卷)

EXPOSE

实战


概念

dockerfile就是自定义镜像,通过dockerfile创建的都是镜像,而不是容器。

创建镜像的方式:

1.dockerfile 最基本的方式、最常用的方式

2.docker pull 拉取的是最基础的镜像,只有基础功能,没有定制化的功能

3.基于基础镜像,创建好了容器之后,在容器内部进行定制化的操作,然后导出成镜像,下次继续使用。

基于dockerfile创建

dockerfile用的是联合文件系统UnionFS。这个是docker镜像的基础,镜像是通过分层来进行集成。基于UnionFS这个基础可以制作各种具体的应用镜像。

UnionFS特性:一次性同时的加载多个文件系统,但是从外面看只能看到一个文件系统。它的特点:文件系统叠加。

镜像的分层:它是由一层一层的文件系统组成的

UnionFS是由rootfs 根文件系统和bootfs 引导文件系统组成的。

rootfs 根文件系统:包含了一个完整的文件系统(操作系统),包括了所有的文件和目录,以及相关的权限和用户等等信息,运行容器时,整个根文件系统就会整个被使用,作为应用运行的环境。

bootfs 引导文件系统:它是启动根系统时需要加载的核心文件

dockerfile底层逻辑图:

dockerfile定制化镜像:定制每一层需要添加的配置和文件,也就是把每一层的安装、修改、构建和操作都写入一个脚本,然后用脚本来进行创建镜像。这个脚本就是dockerfile。

创建dockerfile脚本,vim Dockerfile 识别默认名称

每一个镜像我们都会给他单独创建一个目录,然后在这个目录下创建单独的Dockerfile脚本

dockerfile分为四个部分:

1.基础镜像信息 (底层)

2.维护者信息(可有可无)

3.镜像的操作指令和相关配置

4.容器启动时执行的命令

dockerfile可以支持以#开头作为注释

dockerfile的命令

FROM:永远是整个脚本的第一个语法,它的作用是指定定制镜像的基础操作系统。

MAINTAINER:维护者信息,可以不写。现在新版本用LABEL来代替。

RUN:在基础镜像上执行命令,然后把运行结果整合到新镜像当中。RUN就是一个镜像的分层,RUN越多,分层就越多,镜像就越大。为了控制镜像大小,可以把多个RUN尽可能的写在一个RUN里面。

ENTRYPOINT:指定容器在启动时执行的命令或者参数。

CMD:指定容器在启动时执行的命令或者参数。

EXPOSE:指定容器对外暴露的端口号。

ENV:用来设置基础操作系统的环境变量,以便RUN命令可以使用或者新镜像使用,就是给系统添加环境变量。

ADD:可以支持URL从网络下载文件,也可以对压缩文件进行解压。

COPY:只能复制本地文件(宿主机文件)到镜像的目标位置。

VOLUME:创建一个容器内的挂载点,用来和其他容器进行挂载,不是和宿主机进行挂载。

USER:设置运行镜像时的用户。

WORKDIR:指定容器的工作目录,相当于切换到这个目录,在这个目录下做指定的操作。

ONBUILD:指定一个镜像作为另一个镜像构建的基础时需要运行的命令。

ARG:主要是用来传参,是用户传递的参数,比如:/bin/bash就是ARG。而ENV是容器内部的变量。

构建容器

命令:docker build -t centos:test .

FROM

格式:FROM centos:7

ENTRYPOINT和CMD

格式:ENTRYPOINT ["ls","/etc"]

           CMD ["ls","/usr"]

ENTRYPOINT有多个的情况下,只会运行最后一个

CMD有多个的情况下,也只会运行最后一个

CMD和ENTRYPOINT同时存在时,命令都会执行。ENTRYPOINT会覆盖CMD的命令并且CMD会把命令作为参数传给ENTRYPOINT

总结:做为容器启动时执行命令的语句,一般情况下二者是通用的,但是在传参的情况下,需要加上CMD,如果没有特殊的操作(传参),写一个CMD或者ENTRYPOINT即可,二者不要同时存在。

CMD做为启动命令,运行容器时传了额外的参数,CMD会被覆盖从而不会被执行。而ENTRYPOINT做为启动命令时不会被覆盖,容器运行时指定的命令相当于给ENTRYPOINT传参

RUN

RUN的作用是在基础镜像运行然后把结果传给新镜像

RUN的结构要合理,不要太多,否则镜像就会很大。

格式:RUN ls /opt && ls /etc && ls /usr

RUN命令的优化:写一起中间用&&

&&  表示前一个指令成功才会执行下一个

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

| |    表示前一个失败了,后面才会执行

\      表示把一个命令分成多个行,提高可读性

COPY和ADD

ADD主要作用是解压,比如:.tar  .gz .zip 。还可以根据URL进行文件下载,还可以复制(但是一般不用,官方解释:同样是复制,推荐使用copy)。ADD不能复制压缩文件。

COPY只能复制,复制本地文件到容器内。

ADD和COPY:解压或者复制文件都必须和Dockerfile这个脚本在同一个目录下。

格式:ADD 文件名 /opt    (解压)

           COPY test1.txt /opt/test/   (复制)

           ADD http://mirrors.aliyun.com/repo/Centos-7.repo /opt/Centos-7.repo (在线下载)

工作目录和环境变量以及容器卷(挂载卷)

WORKDIR  工作目录:切换到容器内的指定目录

ENV 环境变量:添加一个PATH(可以让系统识别到命令)

VOLUME

格式: WORKDIR /opt

           ENV PATH /opt/test:$PATH

           VOLUME ["/opt/test"] (默认的容器内的挂载点,外部不是必须和这个挂载,其他容器可以和这个进行挂载)

EXPOSE

格式:EXPOSE 指定端口

实战

实战:使用yum安装定制一个nginx,首先我们要先创建一个镜像,里面基础镜像是centos7,里面的服务是nginx

Dockerfile脚本:

FROM centos:7

RUN rm -rf /etc/yum.repos.d/*

ADD http://mirrors.aliyun.com/repo/Centos-7.repo /etc/yum.repos.d/Centos-7.repo

RUN yum -y install epel-release && \
    yum -y install nginx

EXPOSE 80

WORKDIR /var/log/nginx/

VOLUME ["/usr/share/nginx/html"]

CMD ["nginx","-g","daemon off;"]
 

整个步骤:

cd /opt/

mkdir test

cd test/

vim Dockerfile

FROM centos:7RUN rm -rf /etc/yum.repos.d/*ADD http://mirrors.aliyun.com/repo/Centos-7.repo /etc/yum.repos.d/Centos-7.repoRUN yum -y install epel-release && \yum -y install nginxEXPOSE 80WORKDIR /var/log/nginx/VOLUME ["/usr/share/nginx/html"]CMD ["nginx","-g","daemon off;"]

docker build -t nginx:test .

docker run -itd --name nginx1 nginx:test

docker exec -it nginx1 bash

docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' nginx1

curl 172.17.0.2

设置挂载卷

docker run -itd --name nginx2 -v /opt/html:/usr/share/nginx/html nginx:test

docker run -itd --name nginx3 --volumes-from nginx2 nginx:test

相关文章:

dockerfile自定义镜像

目录 概念 基于dockerfile创建 dockerfile的命令 构建容器 FROM ENTRYPOINT和CMD RUN COPY和ADD 工作目录和环境变量以及容器卷(挂载卷) EXPOSE 实战 概念 dockerfile就是自定义镜像,通过dockerfile创建的都是镜像,而…...

【工作状态】如何保持专注?

好的睡眠计划主题化 1、保持足够的睡眠,才能头脑清晰和有精力,工作不是纯拼体力,要用脑力的。 2、脑力主要工作放在午餐前,在脑力充足的时候使用脑力,下午五点后可以安排脑力活动较低的工作,比如听课读书。…...

欧科云链研究院对话:风浪越大鱼越贵—链上数据洞悉加密市场规律

作者 Hedy 出品 OKG Research “我们从来就不是理性人。但可以用最简单的工具——链上数据做‘最猛’的分析。” 在经历了超级宏观周之后,金融市场产生了巨大的震荡,加密市场的表现也越来越受到宏观经济因素的影响。欧科云链研究院OKG Research 集结多…...

SQLite库笔记:日期和时间函数

1. 函数概述 SQLite支持7个日期和时间函数,如下: 1 date(time-value, modifier, modifier, ...) 返回YYYY-MM-DD格式的日期 2 time(time-value, modifier, modifier, ...) 返回HH:MM:SS格式的时间 3 datetime(time-value, modifier, modifier, ...…...

Linux开发板运行报错/system/bin/sh: can‘t create /dev/leds: Permission denied

Linux开发板运行报错/system/bin/sh: cant create /dev/leds: Permission denied 1.问题解决 1.问题解决 /system/bin/sh: can’t create /dev/leds: Permission denied 在linux开发板下运行驱动报错没有权限,需要运行 su,同时也会停止打印 在运行: ch…...

月薪5W的项目经理是如何面试的?这份面试攻略请收好!

面试是项目经理求职必须经历的一关,但很多经验不够丰富的项目经理不知道面试会问些什么问题,也不知道要怎么回答,无疑会直接影响面试企业的判断,使项目经理求职受阳.所以,项目经理想要顺利求职,还是有必要掌…...

接口隔离原则

接口隔离原则 接口隔离原则就是客户端不应该依赖它不需要的接口,或者说类间的依赖关系应该建立在最小的接口上。 我们以搜索美女为例,设计了如下的类图: 源代码如下。美女及其实现类: 搜索程序及其子类源代码如下: 最…...

【C++ 面试 - 基础题】每日 3 题(十六)

✍个人博客:Pandaconda-CSDN博客 📣专栏地址:http://t.csdnimg.cn/fYaBd 📚专栏简介:在这个专栏中,我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞👍收藏&…...

端到端测试自动化:使用JavaScript打造可靠的Web应用

端到端测试(End-to-End Testing,简称E2E测试)是软件测试的一种形式,用于验证整个应用从端到端的流程是否按预期工作。在JavaScript生态系统中,E2E测试通常使用专门的框架来模拟用户交互,验证应用的业务逻辑…...

『大模型笔记』基于LLM生成真实世界数据的合成问答数据!

基于LLM生成真实世界数据的合成问答数据! 文章目录 一. 基于LLM生成真实世界数据的合成问答数据!1. 概述(Overview)2. 场景(Scenario)2.1. 概述2.1.1. 第1阶段:构建种子数据集(Stage 1. Constructing a seed dataset)2.1.2. 第2阶段:数据增强(可选)(Data Augmentation…...

一个使用Python和`scikit-learn`库实现KMeans聚类算法的简单示例

一个使用Python和scikit-learn库实现KMeans聚类算法的简单示例。首先,请确保您已经安装了scikit-learn库。如果没有安装,可以通过pip安装它: pip install scikit-learn下面是一个简单的例子,展示如何使用scikit-learn中的KMeans进…...

记录一下vue2和vue3中如何配置keep-alive及写法上的差异

应用场景 跳转下一个页面后,返回当前页面,或者在多个页面之间切换,保留页面中的所有状态,常见的就是填写到一半的表单。h5的tabbar页面缓存,避免重复加载数据。 主要实现思路 这个东西很常见,动态路由一…...

面试题:Rabbitmq怎么保证消息的可靠性?

1.消费端消息可靠性保证: 消息确认(Acknowledgements):(自动(默认),手动) 消费者在接收到消息后,默认情况下RabbitMQ会自动确认消息(autoAcktrue)。为保证消息可靠性,可以设置auto…...

性能测试工具之JMeter

JMeter Apache JMeter应用程序是开源软件,是一个100%纯Java应用程序,旨在负载测试功能行为和衡量性能。它最初是为测试Web应用程序而设计的,但后来扩展到其他测试功能。 JMeter是一个免费、开源、跨平台的性能测试工具,于20世纪90年代后期面世。这是一个成熟、健全且具有…...

SQL Zoo 9-.Window functions

以下数据均来自SQL Zoo 1.Show the lastName, party and votes for the constituency S14000024 in 2017.(显示2017年选区“S14000024”的姓氏、政党和选票) SELECT lastName, party, votesFROM geWHERE constituency S14000024 AND yr 2017 ORDER BY…...

智能化清理C盘的方法 小白也可以轻松清理C盘了 不再担心误删文件

智能化清理C盘的方法 小白用户也可以轻松清理C盘了 不再担心误删文件。对于电脑小白来说,C盘清理是一个大大的问题,因为大家都不知道C盘里有哪些文件可以删除,哪些不能删除,所以就直接的导致大家不可能去清理c盘垃圾。 就算是C盘…...

在c#中常用的特性

在C#中,特性(Attributes)是一种将元数据应用于程序实体(如类、方法、属性等)的方式。这些元数据可以在编译时和运行时被读取,常用于配置、自定义行为、装饰器模式等场景。以下是一些C#中常用的特性&#xf…...

Polars简明基础教程十二:可视化(二)

设置绘图后端 我们可以使用 hv.extension 更改绘图后端。但是,我们不在此处运行此单元格,因为它会导致下面的 Matplotlib/Seaborn 图表无法渲染。 注释: hvPlot 利用 HoloViews 库来构建图表,并且可以使用多个后端进行渲染&…...

python 使用正则表达式判断图片路径是否是超链接

在Python中,判断一个给定的字符串(假设为图片路径)是否是网页链接(URL),你可以通过检查该字符串是否符合URL的基本格式来实现。虽然这个方法不能保证链接一定指向图片,但它能判断该字符串是否是…...

【学习笔记】Day 14

一、进度概述 1、《地震勘探原理》第七章 二、详情 地震波动力学是相对于运动学而言的。运动学主要研究波的传播规律,其主要特征是分析、研究波的传播路径。传播速度。旅行时间等。地震波动力学则主要从能量的角度研究地震波的特征,如波的振幅、波形、频…...

使用SSL认证访问操作手册

完整版,从证书生成到使用 【金山文档 | WPS云文档】 使用SSL认证访问操作手册 https://kdocs.cn/l/cuxGfHD17eEw...

网络协议 十一 ARP,RARP,icmp,websocket,webservice,HTTPDNS,FTP,邮件相关的协议, SMTP,POP,IMAP

ARP 已知IP 求 MAC 的过程 RARP 已知MAC 求 IP 的过程,已被DHCP取代 ICMP websocket 协议,html5中提出的前端使用协议 webservice 技术,已过时 HTTPDNS 之前我们要获得 某一个域名的 IP ,要通过DNS协议 去 运营商的ISP 查询&…...

浏览器插件利器--allWebPluginV2.0.0.16-Stable版发布

allWebPlugin简介 allWebPlugin中间件是一款为用户提供安全、可靠、便捷的浏览器插件服务的中间件产品,致力于将浏览器插件重新应用到所有浏览器。它将现有ActiveX控件直接嵌入浏览器,实现插件加载、界面显示、接口调用、事件回调等。支持Chrome、Firefo…...

设计模式22-迭代器模式

设计模式22-迭代器模式 迭代器模式(Iterator Pattern)动机定义结构定义结构结构图解释注意事项 C代码推导多态属性(虚函数)实现迭代器1. **返回值问题**2. **对象切割问题**3. **内存管理问题**4. **迭代器生命周期问题**5. **接口…...

编程深水区之并发⑥:C#的线程池

绝大多数情况下,我们都应该使用CLR线程池,而不是直接操作Thread,本章节介绍直接操作线程池的ThreadPool,但实际开发中也很少直接使用它。 一、CLR和线程池 1.1 CLR的主要工作 CLR(Common Language Runtime&#xff0…...

KCTF 闯关游戏:1 ~ 7 关

前言 看雪CTF平台是一个专注于网络安全技术竞赛的在线平台,它提供了一个供网络安全爱好者和技术专家进行技术交流、学习和竞技的环境。CTF(Capture The Flag,夺旗赛)是网络安全领域内的一种流行竞赛形式,起源于1996年…...

【海贼王航海日志:前端技术探索】一篇文章带你走进JavaScript(二)

目录 1 -> 基础数据类型 1.1 -> 条件语句 1.1.1 if语句 1.2 -> 分支语句 1.2.1 -> switch语句 1.3 -> 循环语句 1.3.1 -> while循环 1.3.2 -> continue 1.3.3 -> break 1.3.4 -> for循环 1.4 -> 数组 1.4.1 -> 创建数组 1.4.2 -…...

鸿蒙内核源码分析(进程管理篇) | 谁在管理内核资源?

官方基本概念 从系统的角度看,进程是资源管理单元。进程可以使用或等待CPU、使用内存空间等系统资源,并独立于其它进程运行。 OpenHarmony内核的进程模块可以给用户提供多个进程,实现了进程之间的切换和通信,帮助用户管理业务程序…...

SQLALchemy 自动从数据库中映射

SQLALchemy 自动从数据库中映射 使用`automap_base`注意事项在SQLAlchemy中,自动从数据库中映射表到Python类(也称为“反射”或“逆向工程”)是一个常见的需求,尤其是在你已经有了一个现有的数据库,并希望快速地为它创建一个ORM模型时。SQLAlchemy提供了工具来帮助你完成这…...

C++ stack与queue的使用与简单实现

目录 0. 适配器 1. stack的简要介绍 2. stack的简单使用 3. queue的简要介绍 4. queue的简单使用 STL标准库中stack和queue的底层结构 deque简单介绍 5. stack的模拟实现 6. queue的模拟实现 0. 适配器 在文章开始前我们先了解一下适配器的概念 适配器是一种设计模式(设计…...

wordpress可视化菜单/黄页推广

一、选择题(本题为单项选择题,每题1分,多选,不选或错选均不得分,):(25分)1、世界上第一台电子数字计算机是(B)年出现的。A、1958B、1946C、1965D、19472、微型计算机的发展史可以看作是(A )的发展历史。A、微处理器B、…...

简单网上书店网站建设php/中国行业数据分析网

坑 意味着没有输出。变量都会保存到console里边 如果取消这个选项,则:有输出,运行完就结束了...

wordpress配置qq邮箱/谷歌推广怎么开户

erp5开源制造业erp集群部署指南 1 独立服务器安装mariadb 2 独立服务器安装memcache缓存 3 独立服务器安装zeo 4 1-n台服务器安装zope(erp5) 5 独立服务器安装apache代理,对外提供访问url...

摄影网站建设任务书/青青河边草直播免费观看

1.距离顺序排列矩阵单元格 //给出 R 行 C 列的矩阵&#xff0c;其中的单元格的整数坐标为 (r, c)&#xff0c;满足 0 < r < R 且 0 < c < C。 // // 另外&#xff0c;我们在该矩阵中给出了一个坐标为 (r0, c0) 的单元格。 // // 返回矩阵中的所有单元格的坐标&am…...

做静态网站有什么用/seo关键词优化外包公司

第1关:求二维数组中最大值及所在的位置 任务描述 本关任务:编写一个能计算求二维数组中最大值及所在的位置。 相关知识 为了完成本关任务,你需要掌握:1.如何生成一个二维数组,2.如何求最大值及所在位置。 生成二维数组 可以利用random.seed(n)设置随机种子,再利用rand…...

保定 网站/网域名解析ip查询

接上篇文章&#xff1a;机器学习第一期&#xff08;上&#xff09;&#xff1a;数学矩阵前置知识、机器学习前置知识、机器学习基础、机器学习类型&#xff0c;分类回归、机器学习过程、损失函数、过拟合与欠拟合、正则化项、训练误差与测试误差、模型选择、交叉验证、梯度下降…...